IPAPatch: 免越獄調試、修改第三方App
之前在 GitHub 上開源了關閉 Facebook for iOS 的 HTTPS 證書校驗的方法 (Naituw/HackingFacebook),收到了很多反饋,大部分都集中在操作的過程太複雜的問題上。其實我自己在後來修改其他 App 的過程中也察覺,調試、驗證問題的過程中,操作太過繁瑣。
因此我又對這個方向做了進一步的嘗試,最後 IPAPatch 誕生了~
源代碼
我已經把模版工程放在了 GitHub 上了,歡迎大家提 Issue~
Naituw/IPAPatch
另外還包含一個 Demo
Naituw/IPAPatch
IPAPatch 可以做什麼呢?
和 "HackingFacebook" 類似,"IPAPatch" 主要可以在第三方的 IPA 文件上 "添加" 自己的代碼,但過程有很大不同:
過程簡單
- 提供 IPA 文件和你的代碼,配置好籤名信息,點擊「運行」即可
- 整個過程在 Xcode 中進行,就像在編寫自己的 App
- IPA 文件依然需要是解密過的
在 Youtube 中彈出自定義窗口
支持調試
- 在 Xcode 中可以直接斷點進行調試
- 可以用 lldb 命令(如 po),輸出運行時信息
- 可以使用 Xcode 的調試功能查看 View Hierarchy、Memory Graph 等信息
使用 lldb 調試 Youtube
支持鏈接第三方 Framework
- 在集成一些第三方服務時很有用
- 例如之前發微博的 Reveal 調試 Youtube 就是這種方式
使用 Reveal 調試 Youtube
修改過的 App 可以與原始 App 共存,並自動修改名字以作區分
修改過的 Youtube 和 Facebook
怎麼實現的?
主要的自動化過程在 patch.sh 這個腳本里,Xcode 會在把你的代碼編譯成 Framework 後執行這個腳本:
- 解壓 IPA 文件
- 用 IPA 文件的內容,替換掉 Xcode 生成的 .app 的內容
- 通過 OPTOOL,將你代碼生成的 Framework 及其他外部 Framework,注入到二進位文件中
- 對這些文件進行重新簽名
完成後,Xcode 會自動將修改過的 .app 安裝到 iPhone 上
具體的例子?
之前發過一個 「iOS 10.3 使用 Reveal 調試 Youtube」 的微博,我就用這個來舉例吧。
使用 Reveal 調試 Youtube
1. 首先我們需要準備一個解密過的 Youtube IPA 文件,這個文件可以從越獄手機上導出,也可以直接去網站下載,比如我自己常用的是 http://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 上,如圖配置的話最後就是 "RevealYoutube"
6. 點擊 Xcode 左上角的編譯運行按鈕,修改好的 Youtube 就會安裝到手機上,Reveal 中也能找到
我把這個 Demo 打了一個包,傳到 GitHub 的 Release 中了,大家可以自行下載嘗試~
Naituw/IPAPatch
後記
其實做這個項目的起因,並不是想要對其他 App 進行修改,而是在競品分析時,想儘可能了解其他 App 是如何實現類似需求的。 然後發現其實我們還能做到比抓包更進一步,對我自己很有用,所以也分享給大家~
最後還是想說一句,該項目僅用於學習目的,請勿濫用~
項目地址:Naituw/IPAPatch
-------------------------------------------------------
* 作者:Naituw,本文授權轉載,文章出處:Sina Visitor System
更多安全類文章,請持續關注阿里聚安全的安全專欄或阿里聚安全官方博客
推薦閱讀:
※哪些程序在 App Store 里是被禁止的?
※如何評價 Swift 4 的開發計劃?
※資深 iOS 開發工程師需要達到什麼水平?
※如何看待 Dash 被 App Store 下架?