前言:
? ? ? ?筆者最近工作中遇到對app(ipa,apk)進行重簽名的單子,由于筆者以python為主,網(wǎng)上并沒有太多python的重簽名的內(nèi)容,所以下面是介紹利用 python對app包重簽名的過程。
流程:
? ? ? 1.對ipa,apk的包,進行分析。簡單來說,重簽名的過程是對 ipa/apk包的文件或者屬性進行替換或者修改。
? ? ? 2.首先我們利用argparse命令行工具進行接收參數(shù),比如 --appname ,--icon 等,然后使用zipfile,tempfile,apktool,pillow等工具利用解壓-替換(傳參)-壓縮。
過程(以ipa為例):
1、命令行接收參數(shù)(自定義,看原ipa打包需要什么參數(shù)添加即可)
python3?resign.py?
? ? ? ? ? ? ?-c?1111? #客戶號
? ? ? ? ? ? ? -s old.ipa # 原文件路徑
? ? ? ? ? ? ? -d?new.ipa #修改后的路徑
? ? ? ? ? ? ? --server?http://xx.com? #后臺地址
? ? ? ? ? ? ? ?-a newappname #新app名稱
? ? ? ? ? ? ? -i?new_icon.png #新圖標
#命令行參數(shù)解析
import?argparse?
parser?=?argparse.ArgumentParser()?#創(chuàng)建一個解析對象
parser.add_argument()?#向該對象中添加你要關注的命令行參數(shù)和選項
?parser.add_argument(????????
?????'-ic','--icon',?????????#??name?or?flags
?????dest?=?'icon',??????????#??這個參數(shù)相當于把位置或者選項關聯(lián)到一個特定的名字
?????required=True,??????????#??當某個選項指定需要在命令中出現(xiàn)的時候用這個參數(shù)
?????metavar='<icon>',???????#??這個參數(shù)用于help?信息輸出中
?????help?='Path?to?icon'????#??使用這個參數(shù)描述選項作用
?)?
parser.add_argument(
? ? ?'-a','--app_name',
? ? ..........
?)
2、
????def?resignte(self,?old_src,?new_src,? update_table ):
????????#?update_table 傳參統(tǒng)一傳入字典
? ? ? ??#讀取原ipa文件路徑的前綴目錄
????????cur_dir?=?os.path.dirname( old_src )?
? ? ? ?#在同樣目錄下創(chuàng)建臨時文件
????????tmp_fd,?tmp_name?=?tempfile.mkstemp(dir=cur_dir)
????????os.close(tmp_fd)
? ? ? ? #如果傳參有圖片,則進行處理
????????if updata_table[' icon ']:
????????????self.process_icon(icon)
? ? ? ? #進行讀寫替換
????????with?zipfile.ZipFile( old_src ,?'r')?as?zin:
????????????with?zipfile.ZipFile( new_src ,?'w')?as?zout:
????????????????zout.comment?=?zin.comment
????????????????for?item?in?zin.infolist():
????????????????????#?update?file?asset
????????????????????if?item.filename?==?self.update_file:
????????????????????????content?=?zin.read(item.filename)
????????????????????????for?key,?value?in?update_table.items():
????????????????????????????content?=?content.replace(key,?value)
????????????????????????zout.writestr(item,?content)
歡迎各位大神交流,交流QQ群:688933850