??IPAPatch: 免越獄調(diào)試、修改第三方App

原文地址:??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 中彈出自定義窗口

在 Youtube 中彈出自定義窗口

?

  • 支持調(diào)試
    • 在 Xcode 中可以直接斷點進(jìn)行調(diào)試
    • 可以用 lldb 命令(如 po),輸出運行時信息
    • 可以使用 Xcode 的調(diào)試功能查看 View Hierarchy、Memory Graph 等信息
使用 lldb 調(diào)試 Youtube

使用 lldb 調(diào)試 Youtube

?

  • 支持鏈接第三方 Framework
    • 在集成一些第三方服務(wù)時很有用
    • 例如之前發(fā)微博的 Reveal 調(diào)試 Youtube 就是這種方式
使用 Reveal 調(diào)試 Youtube

使用 Reveal 調(diào)試 Youtube

?

?

  • 修改過的 App 可以與原始 App 共存,并自動修改名字以作區(qū)分
修改過的 Youtube 和 Facebook

修改過的 Youtube 和 Facebook

?


怎么實現(xiàn)的?

主要的自動化過程在 patch.sh 這個腳本里,Xcode 會在把你的代碼編譯成 Framework 后執(zhí)行這個腳本:

  1. 解壓 IPA 文件
  2. 用 IPA 文件的內(nèi)容,替換掉 Xcode 生成的 .app 的內(nèi)容
  3. 通過 OPTOOL,將你代碼生成的 Framework 及其他外部 Framework,注入到二進(jìn)制文件中
  4. 對這些文件進(jìn)行重新簽名

完成后,Xcode 會自動將修改過的 .app 安裝到 iPhone 上


?具體的例子?

之前發(fā)過一個 “iOS 10.3 使用 Reveal 調(diào)試 Youtube” 的微博,我就用這個來舉例吧。

使用 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í)目的,請勿濫用~

?

????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容