重簽名步驟
準(zhǔn)備一個(gè)embedded.mobileprovision文件(必須是付費(fèi)證書產(chǎn)生的,appid施禾、device一定要匹配)脚线,并放入.app包中
可以通過Xcode自動(dòng)生成,然后在編譯后的APP包中找到
可以去開發(fā)者證書網(wǎng)站生成下載
從embedded.mobileprovision文件中提取出entitlements.plist權(quán)限文件
security cms -D -i embedded.mobileprovision > temp.plist
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' temp.plist > entitlements.plist
查看可用的證書
security find-identity -v -p codesigning
對(duì).app內(nèi)部的動(dòng)態(tài)庫(kù)弥搞、AppExtension等進(jìn)行簽名
codesign -fs 證書ID xxx.dylib
對(duì).app包進(jìn)行簽名
codesign -fs 證書ID --entitlements entitlements.plist xxx.app
重簽名GUI工具
iOS App Signer
https://github.com/DanTheMan827/ios-app-signer
可以對(duì).app重簽名打包成ipa
需要再.app包中提供對(duì)應(yīng)的embedded.mobileprovision文件
iReSign
https://github.com/maciekish/iReSign
可以對(duì)ipa進(jìn)行重簽名
需要提供entitlements.plist邮绿、embedded.mobileprovision文件的路徑
動(dòng)態(tài)庫(kù)注入
可以使用insert_dylib庫(kù)將動(dòng)態(tài)庫(kù)注入到Mach-O文件中
https://github.com/Tyilo/insert_dylib
用法
insert_dylib 動(dòng)態(tài)庫(kù)加載路徑 Mach-O文件
有2個(gè)常用參數(shù)選項(xiàng)
--weak渠旁,即使動(dòng)態(tài)庫(kù)找不到也不會(huì)報(bào)錯(cuò)
--all-yes,后面所有的選擇都為yes
insert_dylib的本質(zhì)是往Mach-O文件的Load Commands中添加了一個(gè)LC_LOAD_DYLIB或LC_LOAD_WEAK_DYLIB
可以通過otool查看Mach-O的動(dòng)態(tài)庫(kù)依賴信息
otool -L Mach-O文件
更改動(dòng)態(tài)庫(kù)加載地址
可以使用install_name_tool修改Mach-O文件中動(dòng)態(tài)庫(kù)的加載地址
install_name_tool -change 舊地址 新地址 Mach-O文件
通過Theos開發(fā)的動(dòng)態(tài)庫(kù)插件(dylib)
默認(rèn)都依賴于/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
如果要將動(dòng)態(tài)庫(kù)插件打包到ipa中船逮,也需要將CydiaSubstrate打包到ipa中顾腊,并且修改下CydiaSubstrate的加載地址
2個(gè)常用環(huán)境變量
@executable_path代表可執(zhí)行文件所在的目錄
@loader_path代表動(dòng)態(tài)庫(kù)所在的目錄