iOS逆向之旅(進階篇) — 重簽名APP(一)

洪呵呵發表於2018-10-26

重簽名的四種方式

  • 手動重簽名【這種方法很複雜,容易出錯,不過更接近原理】
  • 使用Xcode進行重簽名【在手動重籤的基礎上,利用XCode的功能執行部分操作,這種方法比較簡單】
  • 使用XCode指令碼自動簽名【首選的方法】
  • 使用Monkey自動簽名【Monkey的原理其實就是第三種方法】

手動重簽名APP【這裡以WeChat為例】

準備工作

微信脫殼後的IPA包【砸殼有兩種方式(Clutch、dumpdecrypted),有興趣的可以先去了解一下,我也會在後續的文章中分享這兩種工具的使用,我們現在暫時從PP助手上面下載IPA包】 #####操作流程 1.解壓wechat.ipa【ipa檔案本質就是個zip包】

14.png
2.找到Payload資料夾下的Wechat.app
image.png
3.如何判斷一個APP是否被砸過殼

砸過殼的App會有兩個特點:沒有簽名資訊和已經解過密了

  • 檢視.app檔案的簽名資訊 $codesign -vv -d WeChat.app
    image.png
  • 檢視.app檔案裡面可執行檔案的加密資訊
    image.png
    image.png
    獲取給可執行檔案的加密資訊 $otool -l WeChat | grep crypt
    image.png
    因為cryptid的值為0,代表已經被解密了【砸殼是PP助手幫我們做的,後面我會在越獄篇介紹如何自己動手】

4.開始手動去重簽名

  • 由於 Plugins/Wacth 裡面是一些擴充外掛和WatchApp,個人的證書沒辦法籤extension,簽名後無法正常安裝到手機上,需要刪掉

一開始我強行簽名這些外掛,安裝到手機上時會出現如下報錯

1231539672380_.pic.jpg
後來我在Monkey的簽名指令碼中,發現他們是直接把這兩個資料夾直接刪掉
image.png

  • 需要對APP用到的每一個動態庫【framework/dylib】進行簽名
  • 首先簽名需要你有蘋果開發者賬號的開發證書
  • 檢視我們可以用來簽名的證書資訊 $security find-identity -v -p codesigning
    image.png
  • 簽名動態庫【這裡需要把.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

image.png

  • 新增描述檔案

新建一個工程,使用真機編譯,從生成的APP包中獲取描述檔案

image.png

  • 修改info.plist裡面的Bundle ID 【這個Bundle ID 必須跟我們剛新建的工廠的Bundle ID一致】
    image.png
  • 生成許可權檔案

通過我們剛才生成描述檔案中,查詢出許可權資訊 $security cms -D -i embedded.mobileprovision

image.png
然後使用XCode新建一個Entitlements.plist檔案把許可權資訊拷貝進來,這樣就得到我們自己的許可權檔案了
image.png

  • 把新的許可權檔案放到.app檔案的同級目錄下,使用許可權檔案,簽名整個APP

image.png
codesign -fs "iPhone Developer: XXX (XXXXXX)" --no-strict --entitlements=Entitlements.plist WeChat.app
image.png

  • 使用 Devices and Simulators 成功安裝到手機上
    image.png
    1221539672008_.pic.jpg

相關文章