温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android和iOS包中如何实现批量重签名

发布时间:2022-04-18 14:19:45 来源:亿速云 阅读:225 作者:iii 栏目:开发技术

本篇内容主要讲解“Android和iOS包中如何实现批量重签名”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android和iOS包中如何实现批量重签名”吧!

Android篇

环境要求

1 安装winrar,然后配置winrar的环境变量,要用到winrar指令

2 配置java的bin目录到环境变量,要用到jarsigner指令

重签名步骤说明:

1 从母包复制一个子包

2 删除子包的签名文件META-INFO

3 根据需要修改子包的文件,比如渠道号文件之类

4 重签名子包 

对应的python脚本

import os import sys import shutil import json   ORIGINAL_APK='母包.apk' UNSIGN_APK='unsign.apk' SIGNED_APK={"\"子包1.apk\"":1,"\"子包2.apk\"":2,"\"子包3.apk\"":3,"\"子包4.apk\"":4}   KEY_STORE='keystore文件.keystore' KEY_PASS='key密码' STORE_PASS='store密码'   def copy_apk(src_f,dst_f):  if not os.path.isfile(src_f):  print("%s not exist"%(src_f))  else:  fpath,fname=os.path.split(dst_f)  shutil.copyfile(src_f,dst_f)  print("copy %s -> %s"%(src_f,dst_f))     def zip_del_file(apk_f,del_f):  os.system("winrar d %s %s"%(apk_f,del_f))  print('zip_del_file:'+del_f)   def zip_add_file(apk_f,channel):  del_dir("assets")  os.makedirs("assets")  f=open("assets\\AppParamSetting.txt",'w')  f.write('{"channel":%s,"bundleIdentifier":""}'%(channel))  f.close()  os.system("winrar a -ad %s %s"%(apk_f,"assets\\AppParamSetting.txt"))   def del_file(f):  os.remove(f)  print('del_file:'+f)   def del_dir(f_dir):  if os.path.exists(f_dir):  shutil.rmtree(f_dir)  print("del_dir:"+f_dir)   def sign_app(unsigned_app, signed_app):  signcmd='jarsigner -verbose -keystore %s -keypass %s -storepass %s -signedjar %s -digestalg SHA1 -sigalg MD5withRSA %s sfish' % (KEY_STORE,KEY_PASS,STORE_PASS,signed_app,unsigned_app)  os.system(signcmd)  print(signcmd)   if __name__ == '__main__':  cur_dir=os.getcwd()  print('cur_dir'+cur_dir)  copy_apk(ORIGINAL_APK,"tmp_"+ORIGINAL_APK)  zip_del_file("tmp_"+ORIGINAL_APK,"META-INF")  for key in SIGNED_APK.keys():  channel=SIGNED_APK[key]  zip_add_file("tmp_"+ORIGINAL_APK,channel)  sign_app("tmp_"+ORIGINAL_APK,key)  del_dir("assets")  del_file("tmp_"+ORIGINAL_APK)  input("Done")

iOS篇

环境要求:

1 mac机子

2 证书文件,打开:Launchapd(火箭图标)->其他 -> 钥匙串访问,就在那里

3 .mobileprovision文件

重签名步骤说明:

1 从.mobileprovision文件生成entitlements.plist文件

2 解压ipa,会得到一个Payload目录,再往里是一个xxx.app,显示包内容可以看到里面的东西

3 删除签名文件,即:Payload/xxx.app/_CodeSignature目录

4 根据需要修改文件,比如渠道文件

5 重签名

6 压缩ipa

对应的python脚本

#!/usr/bin/python   import os import sys import json   ORIGINAL_IPA='母包.ipa' SIGNED_APK={"\"子包1.ipa\"":1,"\"子包2.ipa\"":2,"\"子包3.ipa\"":3,"\"子包4.ipa\"":4} CERT_FILE='证书文件' MOBILE_PROVISION_UUID = 'mobileprovision的uuid'   def get_mobile_provision_dir():  return os.path.join(os.getenv('HOME'),'Library/MobileDevice/Provisioning Profiles/')   def get_mobile_provision_file(uuid):  return os.path.join(get_mobile_provision_dir(), uuid + ".mobileprovision")   def unzip_app():  os.system('unzip -qo ./%s -d ./'%(ORIGINAL_IPA))  print('unzip_app %s done!'%(ORIGINAL_IPA))    def del_code_signature():  os.system("rm -rf ./Payload/sfish.app/_CodeSignature")  print('del_code_signature done!')   def resign_app():  os.system('/usr/bin/codesign --continue -f -s "%s" --entitlements "%s" "%s"'%(CERT_FILE,'./entitlement.plist','./Payload/sfish.app'))  print('resign_app done!')   def zip_app(f_ipa):  os.system('zip -r %s ./Payload'%(f_ipa))  print('zip_app done!')   def del_payload():  os.system('rm -r ./Payload')   def gen_entitlements(uuid, out_file_name):  os.system('security cms -D -i "%s" > entitlement_full.plist '%(get_mobile_provision_file(uuid) ))  os.system('/usr/libexec/PlistBuddy -x -c \'Print:Entitlements\' entitlement_full.plist > "%s" '%( out_file_name))   def rep_emb_file(uuid):  os.system('cp "%s" ./Payload/sfish/embedded.mobileprovision' % (get_mobile_provision_file(uuid)))   def update_channel_file(channel):  f_channel='./Payload/xxx.app/Data/Raw/channel.txt'  fr=open(f_channel,'r')  txt=fr.read()  fr.close()  js=json.loads(txt)  js['channel_id']=channel  fw=open(f_channel,'w')  fw.write(json.dumps(js))  fw.close()   if __name__ == '__main__':  gen_entitlements( MOBILE_PROVISION_UUID, "entitlement.plist" )  unzip_app()  del_code_signature()  for key in SIGNED_APK.keys():   channel=SIGNED_APK[key]   update_channel_file(channel)   resign_app()   zip_app(key)  del_payload()

到此,相信大家对“Android和iOS包中如何实现批量重签名”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI