重簽名的四種方式
- 手動重簽名【這種方法很複雜,容易出錯,不過更接近原理】
- 使用Xcode進行重簽名【在手動重籤的基礎上,利用XCode的功能執行部分操作,這種方法比較簡單】
- 使用XCode指令碼自動簽名【首選的方法】
- 使用Monkey自動簽名【Monkey的原理其實就是第三種方法】
手動重簽名APP【這裡以WeChat為例】
準備工作
微信脫殼後的IPA包【砸殼有兩種方式(Clutch、dumpdecrypted),有興趣的可以先去了解一下,我也會在後續的文章中分享這兩種工具的使用,我們現在暫時從PP助手上面下載IPA包】 #####操作流程 1.解壓wechat.ipa【ipa檔案本質就是個zip包】
2.找到Payload資料夾下的Wechat.app 3.如何判斷一個APP是否被砸過殼砸過殼的App會有兩個特點:沒有簽名資訊和已經解過密了
- 檢視.app檔案的簽名資訊
$codesign -vv -d WeChat.app
- 檢視.app檔案裡面可執行檔案的加密資訊 獲取給可執行檔案的加密資訊
$otool -l WeChat | grep crypt
因為cryptid的值為0,代表已經被解密了【砸殼是PP助手幫我們做的,後面我會在越獄篇介紹如何自己動手】
4.開始手動去重簽名
- 由於 Plugins/Wacth 裡面是一些擴充外掛和WatchApp,個人的證書沒辦法籤extension,簽名後無法正常安裝到手機上,需要刪掉
一開始我強行簽名這些外掛,安裝到手機上時會出現如下報錯
後來我在Monkey的簽名指令碼中,發現他們是直接把這兩個資料夾直接刪掉
- 需要對APP用到的每一個動態庫【framework/dylib】進行簽名
- 首先簽名需要你有蘋果開發者賬號的開發證書
- 檢視我們可以用來簽名的證書資訊
$security find-identity -v -p codesigning
- 簽名動態庫【這裡需要把.app/Frameworks目錄下的所有動態庫進行簽名】 codesign -fs "iPhone Developer: XXX (XXXXXXXX)" mars.framework codesign -fs "iPhone Developer: XXX (XXXXXXXX)" MMCommon.framework codesign -fs "iPhone Developer: XXX (XXXXXXXX)" MultiMedia.framework codesign -fs "iPhone Developer: XXX (XXXXXXXX)" WCDB.framework ""裡面是我們自己的證書,這裡我就隱藏了用XXX替代
- 給WeChat.app下的可執行檔案執行許可權
$chmod +x WeChat
- 新增描述檔案
新建一個工程,使用真機編譯,從生成的APP包中獲取描述檔案
- 修改info.plist裡面的Bundle ID 【這個Bundle ID 必須跟我們剛新建的工廠的Bundle ID一致】
- 生成許可權檔案
通過我們剛才生成描述檔案中,查詢出許可權資訊
然後使用XCode新建一個Entitlements.plist檔案把許可權資訊拷貝進來,這樣就得到我們自己的許可權檔案了$security cms -D -i embedded.mobileprovision
- 把新的許可權檔案放到.app檔案的同級目錄下,使用許可權檔案,簽名整個APP
codesign -fs "iPhone Developer: XXX (XXXXXX)" --no-strict --entitlements=Entitlements.plist WeChat.app
- 使用 Devices and Simulators 成功安裝到手機上