IPAPatch: 免越獄調試、修改第三方App
之前在 GitHub 上開源了關閉 非死book for iOS 的 HTTPS 證書校驗的方法 ( Naituw/Hacking非死book ),收到了很多反饋,大部分都集中在操作的過程太復雜的問題上。其實我自己在后來修改其他 App 的過程中也察覺,調試、驗證問題的過程中,操作太過繁瑣。
因此我又對這個方向做了進一步的嘗試,最后 IPAPatch 誕生了~
IPAPatch 可以做什么呢?
和 "Hacking非死book" 類似,"IPAPatch" 主要可以在第三方的 IPA 文件上 "添加" 自己的代碼,但過程有很大不同:
過程簡單
提供 IPA 文件和你的代碼,配置好簽名信息,點擊“運行”即可
整個過程在 Xcode 中進行,就像在編寫自己的 App
IPA 文件依然需要是解密過的
在 油Tube 中彈出自定義窗口
支持調試
在 Xcode 中可以直接斷點進行調試
可以用 lldb 命令(如 po),輸出運行時信息
可以使用 Xcode 的調試功能查看 View Hierarchy、Memory Graph 等信息
使用 lldb 調試 油Tube
支持鏈接第三方 Framework
在集成一些第三方服務時很有用
例如之前發微博的 Reveal 調試 油Tube 就是這種方式
使用 Reveal 調試 油Tube
修改過的 App 可以與原始 App 共存,并自動修改名字以作區分
修改過的 油Tube 和 非死book
怎么實現的?
主要的自動化過程在 patch.sh 這個腳本里,Xcode 會在把你的代碼編譯成 Framework 后執行這個腳本:
- 解壓 IPA 文件
- 用 IPA 文件的內容,替換掉 Xcode 生成的 .app 的內容
- 通過 OPTOOL,將你代碼生成的 Framework 及其他外部 Framework,注入到二進制文件中
- 對這些文件進行重新簽名
完成后,Xcode 會自動將修改過的 .app 安裝到 iPhone 上
具體的例子?
之前發過一個 “iOS 10.3 使用 Reveal 調試 油Tube” 的微博,我就用這個來舉例吧。
使用 Reveal 調試 油Tube
1. 首先我們需要準備一個解密過的 油Tube IPA 文件,這個文件可以從越獄手機上導出,也可以直接去網站下載,比如我自己常用的是 iphonecake.com
2. 將 IPA 文件命名為 app.ipa,替換模版工程中的 Assets/app.ipa 文件
3. 打開 Reveal,拿到需要集成的 Framework 文件
4. 將 RevealServer.framework 放置在 Assets/Frameworks/RevealServer.framework
5. 打開 IPAPatch,在 IPAPatch-DummyApp 這個 Target 里,配置好 BundleID 和代碼簽名。Display Name 會作為前綴添加到原來的 App 上,如圖配置的話最后就是 "Reveal油Tube"
6. 點擊 Xcode 左上角的編譯運行按鈕,修改好的 油Tube 就會安裝到手機上,Reveal 中也能找到
后記
其實做這個項目的起因,并不是想要對其他 App 進行修改,而是在競品分析時,想盡可能了解其他 App 是如何實現類似需求的。 然后發現其實我們還能做到比抓包更進一步,對我自己很有用,所以也分享給大家~
項目主頁:http://www.baiduhome.net/lib/view/home/1490163581519