分享内容apd+android,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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值