閱讀479 返回首頁    go iPhone_iPad_Mac_apple


IPAPatch: 免越獄調試、修改第三方App

之前在 GitHub 上開源了關閉 Facebook for iOS 的 HTTPS 證書校驗的方法 (Naituw/HackingFacebook),收到了很多反饋,大部分都集中在操作的過程太複雜的問題上。其實我自己在後來修改其他 App 的過程中也察覺,調試、驗證問題的過程中,操作太過繁瑣。


因此我又對這個方向做了進一步的嚐試,最後 IPAPatch 誕生了~

源代碼

我已經把模版工程放在了 GitHub 上了,歡迎大家提 Issue~

https://github.com/Naituw/IPAPatch

另外還包含一個 Demo

https://github.com/Naituw/IPAPatch/releases


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 後執行這個腳本:

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


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


具體的例子?

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

使用 Reveal 調試 Youtube


1. 首先我們需要準備一個解密過的 Youtube 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 上,如圖配置的話最後就是 "RevealYoutube" 


6. 點擊 Xcode 左上角的編譯運行按鈕,修改好的 Youtube 就會安裝到手機上,Reveal 中也能找到 




我把這個 Demo 打了一個包,傳到 GitHub 的 Release 中了,大家可以自行下載嚐試~

https://github.com/Naituw/IPAPatch/releases


後記

其實做這個項目的起因,並不是想要對其他 App 進行修改,而是在競品分析時,想盡可能了解其他 App 是如何實現類似需求的。 然後發現其實我們還能做到比抓包更進一步,對我自己很有用,所以也分享給大家~

最後還是想說一句,該項目僅用於學習目的,請勿濫用~


項目地址:https://github.com/Naituw/IPAPatch 

最後更新:2017-04-07 21:25:10

  上一篇:go 淺談android hook技術
  下一篇:go 利用FRIDA攻擊Android應用程序(一)