利用Xcode在非越獄機器上動態調試第三方APP

0x00 問題起源

分析Office Lens和系統相機拍照時,發現物理設備旋轉時,Office Lens和系統相機的statusbar方向會相應進行變化,但界面上相機控制區域元素又看不到明顯變化,彷彿是界面沒有進行方向變化同樣,遂決定分析Lens和系統相機APP,查看其實現思路。git

0x01 準備脫殼的ipa

App Store上的應用都使用了FairPlay DRM數字版權加密保護技術,動態調試以前須要先將其解密。github

解密使用的工具:Clutchbash

Clutch: A high-speed iOS decryption tool.微信

Clutch解密原理,把應用運行時的內存數據按照必定格式導出。app

Clutch是開源的,能夠從github上免費獲取。ssh

源碼 https://github.com/KJCracks/Clutch
編譯好的可執行文件 https://github.com/KJCracks/Clutch/releases
複製代碼

解密步驟:ide

1. 準備一臺越獄機器,並安裝openSSH
2. 獲取clutch可執行文件(從源碼編譯或者直接下載編譯好的可執行文件)
3. 拷貝clutch可執行文件至越獄設備的/usr/bin/目錄
scp /path/to/clutch root@<your.device.ip>:/usr/bin/
複製代碼
4. 導出脫殼IPA
ssh root@<your.device.ip>
clutch -i       //列出設備上已安裝APP
clutch -d [n]   //解密,並致使IPA

複製代碼

解密成功後,clutch會提示解密後ipa文件的存放位置,整個過程以下圖所示。 工具

脫殼過程

5. 將解密後的ipa文件拷貝出來便可獲得脫殼ipa
scp root@<your.device.ip>:/path/to/xx.ipa /User/xx/Desktop
複製代碼

0x02 新建一個同名空白工程

下面以動態調試Kindle爲例來演示整個動態調試過程。ui

  1. 首先經過0x01獲取脫殼的Kindle.ipa文件。
  2. 而後新建一個工程,名稱Kindle(Bundle ID前綴任意),結構以下:

空白工程結構

0x03 添加自定義腳本

在Target 「Kindle」的Build Phases裏添加Run Script,加密

偷樑換柱腳本

該腳本實現偷樑換柱魔法

首先將第三方app拷貝替換咱們新建工程生成的app

而後對第三方app使用咱們的證書進行簽名

最後將簽名後的第三方app安裝至物理機器上

彷彿是在運行咱們本身編寫的app

從Xcode的Build日誌能夠看出整個過程,以下圖所示:

Bulid 日誌

0x04 動態調試第三方APP

添加完腳本後,先clean整個工程,而後Run,能夠在非越獄機器上

點擊查看視圖結構, lldb進行動態調試。

查看視圖結構

還能夠經過反編譯找到特定符號的內存地址,而後根據內存地址設置斷點,實現各類神奇的調試偷窺效果。

0x05 遇到的問題

1. clutch無執行權限
chmod +x clutch
複製代碼
2. Plugins中一些Extension簽名失敗

Kindle和微信都存在這種狀況。

從Xcode日誌中看到以下相似信息:

NSLocalizedDescription=Failed to verify code signature of 
<MIPluginKitPluginBundle : path = /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.l4X8Bg/extracted/Kindle.app/PlugIns/KindleToday.appex 
identifier = com.amazon.Lassen.KindleTodayExtension type = 7> : 0xe8008001 (Unknown error)}
複製代碼

從日誌能夠看出,經過上述方式運行的APP不會對Plugins裏面的插件進行簽名。

解決方法有兩種:

1) 刪除提示錯誤的Plugins文件夾,通常對動態調試沒有什麼意義。
2) 類比建立一個同名Extension,經過腳本替換成第三方app的Extension。
  • File->New->Target->Today Extension

添加TodayExtension

  • 在target "KindleToday"的Build Phases添加Run Script。

拷貝Extension

  • 將target "Kindle"的Build Phases中的Run Script移至Embed App Extensions以前。

Run Script位置

  • 若APP中有其餘Extension或Watch APP可一樣處理。

歡迎你們到個人公衆號留言交流

公衆號
相關文章
相關標籤/搜索