分析Office Lens和系統相機拍照時,發現物理設備旋轉時,Office Lens和系統相機的statusbar方向會相應進行變化,但界面上相機控制區域元素又看不到明顯變化,彷彿是界面沒有進行方向變化同樣,遂決定分析Lens和系統相機APP,查看其實現思路。git
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
scp /path/to/clutch root@<your.device.ip>:/usr/bin/
複製代碼
ssh root@<your.device.ip>
clutch -i //列出設備上已安裝APP
clutch -d [n] //解密,並致使IPA
複製代碼
解密成功後,clutch會提示解密後ipa文件的存放位置,整個過程以下圖所示。 工具
scp root@<your.device.ip>:/path/to/xx.ipa /User/xx/Desktop
複製代碼
下面以動態調試Kindle爲例來演示整個動態調試過程。ui
在Target 「Kindle」的Build Phases裏添加Run Script,加密
該腳本實現偷樑換柱魔法
首先將第三方app拷貝替換咱們新建工程生成的app
而後對第三方app使用咱們的證書進行簽名
最後將簽名後的第三方app安裝至物理機器上
彷彿是在運行咱們本身編寫的app
從Xcode的Build日誌能夠看出整個過程,以下圖所示:
添加完腳本後,先clean整個工程,而後Run,能夠在非越獄機器上。
點擊查看視圖結構, lldb進行動態調試。
還能夠經過反編譯找到特定符號的內存地址,而後根據內存地址設置斷點,實現各類神奇的調試偷窺效果。
chmod +x clutch
複製代碼
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裏面的插件進行簽名。
解決方法有兩種: