一框沟、前言
逆向過程中六水,我們有時候需要利用Xcode來調(diào)試三方應(yīng)用,這是應(yīng)用重簽名的目的之一凰盔,如果我們改變了應(yīng)用的二進制文件(可執(zhí)行文件)墓卦,或者增加了應(yīng)用里面的資源,應(yīng)用本身的簽名就會被破壞户敬,要想修改過的應(yīng)用可以安裝在手機上落剪,就需要對其進行重新簽名。
二尿庐、準備需要重簽名的應(yīng)用ipa
這里我使用的是自己脫殼的微信ipa(當前最新版6.7.4),重簽名不能用加密(加殼)的ipa包忠怖,所有從App Store上下載的ipa包都經(jīng)過蘋果加密,如何查看是否加密抄瑟,具體如下:
說明:otool -l 參數(shù) | grep crypt
參數(shù)
是當前ipa包解壓后的.app目錄下的可執(zhí)行文件凡泣,一般與.app包名稱同名,其他類推皮假。
三鞋拟、準備用于簽名的證書
做過正向開發(fā)的都應(yīng)該知道,真機調(diào)試惹资,打包測試等等都需要經(jīng)過證書簽名贺纲,通過命令security find-identity -p codesigning -v
獲取本機證書,具體如下:
說明:第2褪测、3行分別是個人開發(fā)者證書猴誊,普通開發(fā)者免費證書潦刃,兩種均可,只不過用后者重簽名應(yīng)用安裝7天之后會失效稠肘,這次使用的是免費開發(fā)者證書福铅。
四、用免費開發(fā)者證書簽名三方ipa
1.刪掉一些免費開發(fā)者證書不能簽名的內(nèi)容
免費開發(fā)者證書無法對微信包內(nèi)的PlugIns目錄下的Extension簽名(經(jīng)檢驗项阴,如果是用非免費開發(fā)者證書滑黔,可以簽名這些插件、Extension)环揽,同時Watch目錄下也包含PlugIns略荡,由于我們需要簽名的是iPhone應(yīng)用,因此可以刪掉這兩個文件夾:
2.對包內(nèi)Frameworks文件夾下的所有framework進行簽名
codesign -fs 你的證書 需要簽名的framework
3.賦予可執(zhí)行文件執(zhí)行權(quán)限
有可能.app下的可執(zhí)行文件沒有執(zhí)行權(quán)限歉胶,先通過ls -l Wechat
查看一下
可以看到文件所有者沒有"x"標記汛兜,表示沒有可執(zhí)行權(quán)限,通過
chmod +x Wechat
添加權(quán)限通今,再次查看4.新建空工程粥谬,獲取embeded.mobileprovision描述文件
新建一個Xcode iOS App項目,編譯生成目標App辫塌,在該目錄下獲取embeded.mobileprovision描述文件漏策,復制到WeChat.app包目錄下
(1)修改Wechat的Info.plist的BundleID
因為該描述文件是對應(yīng)我們新空工程的BundleID,因此我們將WeChat.app下Info.plist對應(yīng)BundleID字段修改與之對應(yīng)臼氨。
(2)從embeded.mobileprovision描述文件提取entitlements.plist授權(quán)文件
security cms -D -i embedded.mobileprovision > profile.plist
/usr/libexec/PlistBuddy -x -c 'print :Entitlements' profile.plist > entitlements.plist
(3)對整個.app文件夾進行簽名
codesign -f -s CECC797ED99A7943709DF97F215F741CBB8EE7BB --entitlements entitlements.plist /Users/kinken_yuen/Desktop/微信重簽名Demo/Payload/WeChat.app
ps:CECC797ED99A7943709DF97F215F741CBB8EE7BB
是證書的另一種表示掺喻,在查看本機證書的時候可以看到。
(4)打包ipa
zip -ry WeChatResign.ipa Payload
五储矩、安裝測試
使用Xcode安裝重新簽名后的ipa文件感耙,首次安裝可能會出現(xiàn)安裝失敗,因為新空工程的描述文件尚未安裝到手機持隧,切回到新空工程Command + R運行即硼,并且在手機上信任描述文件。
再次安裝屡拨,成功安裝谦絮,并且成功運行
這個時候我們就可以進行l(wèi)ldb調(diào)試附加,在Xcode -> Debug -> Attach to Process -> WeChat
,效果就是類似于日常開發(fā)調(diào)試界面洁仗,動態(tài)調(diào)試层皱,尋找你需要逆向的線索、目標赠潦。
六過程遇到的問題
1.忘記刪除PlugIns與Watch文件夾叫胖,安裝時出現(xiàn)以下提示
解決:刪除之后重新再打包安裝
七、總結(jié)
手動重簽名步驟比較繁瑣她奥,一般會采用腳本進行重簽名瓮增,這里主要以理解其過程原理為主怎棱。
學習重簽名之前,需要先了解一下蘋果的簽名機制绷跑,可以參考iOS App 簽名的原理拳恋,非常詳細。
獲取脫殼應(yīng)用方法可以查看我前幾篇的學習筆記砸捏。