原文地址:??http://weibo.com/ttarticle/p/show?id=2309404086977153611942
之前在 GitHub 上開(kāi)源了關(guān)閉 Facebook for iOS 的 HTTPS 證書(shū)校驗(yàn)的方法 (Naituw/HackingFacebook)隆豹,收到了很多反饋,大部分都集中在操作的過(guò)程太復(fù)雜的問(wèn)題上助泽。其實(shí)我自己在后來(lái)修改其他 App 的過(guò)程中也察覺(jué)富玷,調(diào)試、驗(yàn)證問(wèn)題的過(guò)程中诚隙,操作太過(guò)繁瑣讶隐。
因此我又對(duì)這個(gè)方向做了進(jìn)一步的嘗試,最后 IPAPatch 誕生了~
源代碼
我已經(jīng)把模版工程放在了 GitHub 上了久又,歡迎大家提 Issue~
https://github.com/Naituw/IPAPatch
另外還包含一個(gè) Demo
https://github.com/Naituw/IPAPatch/releases
?IPAPatch 可以做什么呢巫延?
和 "HackingFacebook" 類似,"IPAPatch" 主要可以在第三方的 IPA 文件上 "添加" 自己的代碼地消,但過(guò)程有很大不同:
- 過(guò)程簡(jiǎn)單
- 提供 IPA 文件和你的代碼炉峰,配置好簽名信息,點(diǎn)擊“運(yùn)行”即可
- 整個(gè)過(guò)程在 Xcode 中進(jìn)行脉执,就像在編寫(xiě)自己的 App
- IPA 文件依然需要是解密過(guò)的
在 Youtube 中彈出自定義窗口
?
- 支持調(diào)試
- 在 Xcode 中可以直接斷點(diǎn)進(jìn)行調(diào)試
- 可以用 lldb 命令(如 po)疼阔,輸出運(yùn)行時(shí)信息
- 可以使用 Xcode 的調(diào)試功能查看 View Hierarchy、Memory Graph 等信息
使用 lldb 調(diào)試 Youtube
?
- 支持鏈接第三方 Framework
- 在集成一些第三方服務(wù)時(shí)很有用
- 例如之前發(fā)微博的 Reveal 調(diào)試 Youtube 就是這種方式
使用 Reveal 調(diào)試 Youtube
?
?
- 修改過(guò)的 App 可以與原始 App 共存半夷,并自動(dòng)修改名字以作區(qū)分
修改過(guò)的 Youtube 和 Facebook
?
怎么實(shí)現(xiàn)的婆廊?
主要的自動(dòng)化過(guò)程在 patch.sh 這個(gè)腳本里,Xcode 會(huì)在把你的代碼編譯成 Framework 后執(zhí)行這個(gè)腳本:
- 解壓 IPA 文件
- 用 IPA 文件的內(nèi)容巫橄,替換掉 Xcode 生成的 .app 的內(nèi)容
- 通過(guò) OPTOOL淘邻,將你代碼生成的 Framework 及其他外部 Framework,注入到二進(jìn)制文件中
- 對(duì)這些文件進(jìn)行重新簽名
完成后湘换,Xcode 會(huì)自動(dòng)將修改過(guò)的 .app 安裝到 iPhone 上
?具體的例子宾舅?
之前發(fā)過(guò)一個(gè) “iOS 10.3 使用 Reveal 調(diào)試 Youtube” 的微博,我就用這個(gè)來(lái)舉例吧彩倚。
使用 Reveal 調(diào)試 Youtube
?1. 首先我們需要準(zhǔn)備一個(gè)解密過(guò)的 Youtube IPA 文件贴浙,這個(gè)文件可以從越獄手機(jī)上導(dǎo)出,也可以直接去網(wǎng)站下載署恍,比如我自己常用的是 iphonecake.com
2. 將 IPA 文件命名為 app.ipa,替換模版工程中的 Assets/app.ipa 文件
3. 打開(kāi) Reveal蜻直,拿到需要集成的 Framework 文件
?
?4. 將 RevealServer.framework 放置在 Assets/Frameworks/RevealServer.framework
?
5. 打開(kāi) IPAPatch盯质,在 IPAPatch-DummyApp 這個(gè) Target 里,配置好 BundleID 和代碼簽名概而。Display Name 會(huì)作為前綴添加到原來(lái)的 App 上呼巷,如圖配置的話最后就是 "RevealYoutube"
?
6. 點(diǎn)擊 Xcode 左上角的編譯運(yùn)行按鈕,修改好的 Youtube 就會(huì)安裝到手機(jī)上赎瑰,Reveal 中也能找到
?
我把這個(gè) Demo 打了一個(gè)包王悍,傳到 GitHub 的 Release 中了,大家可以自行下載嘗試~
https://github.com/Naituw/IPAPatch/releases
后記
其實(shí)做這個(gè)項(xiàng)目的起因餐曼,并不是想要對(duì)其他 App 進(jìn)行修改压储,而是在競(jìng)品分析時(shí)鲜漩,想盡可能了解其他 App 是如何實(shí)現(xiàn)類似需求的。
然后發(fā)現(xiàn)其實(shí)我們還能做到比抓包更進(jìn)一步集惋,對(duì)我自己很有用孕似,所以也分享給大家~
最后還是想說(shuō)一句,該項(xiàng)目?jī)H用于學(xué)習(xí)目的刮刑,請(qǐng)勿濫用~
?
????