原文地址:??http://weibo.com/ttarticle/p/show?id=2309404086977153611942
之前在 GitHub 上開源了關(guān)閉 Facebook for iOS 的 HTTPS 證書校驗的方法 (Naituw/HackingFacebook),收到了很多反饋,大部分都集中在操作的過程太復(fù)雜的問題上。其實我自己在后來修改其他 App 的過程中也察覺,調(diào)試、驗證問題的過程中,操作太過繁瑣。
因此我又對這個方向做了進(jìn)一步的嘗試,最后 IPAPatch 誕生了~
源代碼
我已經(jīng)把模版工程放在了 GitHub 上了,歡迎大家提 Issue~
https://github.com/Naituw/IPAPatch
另外還包含一個 Demo
https://github.com/Naituw/IPAPatch/releases
?IPAPatch 可以做什么呢?
和 "HackingFacebook" 類似,"IPAPatch" 主要可以在第三方的 IPA 文件上 "添加" 自己的代碼,但過程有很大不同:
- 過程簡單
- 提供 IPA 文件和你的代碼,配置好簽名信息,點擊“運行”即可
- 整個過程在 Xcode 中進(jìn)行,就像在編寫自己的 App
- IPA 文件依然需要是解密過的
在 Youtube 中彈出自定義窗口
?
- 支持調(diào)試
- 在 Xcode 中可以直接斷點進(jìn)行調(diào)試
- 可以用 lldb 命令(如 po),輸出運行時信息
- 可以使用 Xcode 的調(diào)試功能查看 View Hierarchy、Memory Graph 等信息
使用 lldb 調(diào)試 Youtube
?
- 支持鏈接第三方 Framework
- 在集成一些第三方服務(wù)時很有用
- 例如之前發(fā)微博的 Reveal 調(diào)試 Youtube 就是這種方式
使用 Reveal 調(diào)試 Youtube
?
?
- 修改過的 App 可以與原始 App 共存,并自動修改名字以作區(qū)分
修改過的 Youtube 和 Facebook
?
怎么實現(xiàn)的?
主要的自動化過程在 patch.sh 這個腳本里,Xcode 會在把你的代碼編譯成 Framework 后執(zhí)行這個腳本:
- 解壓 IPA 文件
- 用 IPA 文件的內(nèi)容,替換掉 Xcode 生成的 .app 的內(nèi)容
- 通過 OPTOOL,將你代碼生成的 Framework 及其他外部 Framework,注入到二進(jìn)制文件中
- 對這些文件進(jìn)行重新簽名
完成后,Xcode 會自動將修改過的 .app 安裝到 iPhone 上
?具體的例子?
之前發(fā)過一個 “iOS 10.3 使用 Reveal 調(diào)試 Youtube” 的微博,我就用這個來舉例吧。
使用 Reveal 調(diào)試 Youtube
?1. 首先我們需要準(zhǔn)備一個解密過的 Youtube IPA 文件,這個文件可以從越獄手機(jī)上導(dǎo)出,也可以直接去網(wǎng)站下載,比如我自己常用的是 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 就會安裝到手機(jī)上,Reveal 中也能找到
?
我把這個 Demo 打了一個包,傳到 GitHub 的 Release 中了,大家可以自行下載嘗試~
https://github.com/Naituw/IPAPatch/releases
后記
其實做這個項目的起因,并不是想要對其他 App 進(jìn)行修改,而是在競品分析時,想盡可能了解其他 App 是如何實現(xiàn)類似需求的。
然后發(fā)現(xiàn)其實我們還能做到比抓包更進(jìn)一步,對我自己很有用,所以也分享給大家~
最后還是想說一句,該項目僅用于學(xué)習(xí)目的,請勿濫用~
?
????