“民之失德薇缅,乾糇以愆;他山之石攒磨,可以攻玉泳桦。”- 《詩(shī)經(jīng)》
當(dāng)程序發(fā)生崩潰并有機(jī)會(huì)獲取到崩潰堆棧時(shí)娩缰,還原崩潰堆棧從而定位錯(cuò)誤顯得非常重要灸撰。用戶符號(hào)的還原非常簡(jiǎn)單,因?yàn)樵诖虬?APP 時(shí)拼坎,會(huì)生成對(duì)應(yīng)的符號(hào)文件(以 .dSYM 結(jié)尾)浮毯。而對(duì)于系統(tǒng)符號(hào),Apple 并沒(méi)有提供對(duì)應(yīng)的符號(hào)文件下載泰鸡,所以需要自己解析债蓝。本文就簡(jiǎn)單聊聊從 iOS 固件獲取系統(tǒng)庫(kù)符號(hào)的方法。
一盛龄、固件下載和解密
有很多提供固件下載服務(wù)的站點(diǎn)饰迹,比較出名的是:theiphonewiki.com。這個(gè)站點(diǎn)同時(shí)也維護(hù)了用于固件解密的 key余舶,
如圖1所示:
圖1:theiphonewiki.com 維護(hù)的 iOS 9.x 版本的固件解密 key
在圖1中啊鸭,藍(lán)色字體部分表示對(duì)應(yīng)的固件 key 存在,紅色字體表示對(duì)應(yīng)的固件 key 暫時(shí)不可得匿值,所以 theiphonewiki 上只有極少數(shù)的 arm64 版本的固件是可以解密的赠制。
固件(以 .ipsw 結(jié)尾)文件其實(shí)是一個(gè)壓縮包,解壓后得到的 3 個(gè) dmg 文件中挟憔,占用空間最大的那個(gè)就包含需要的系統(tǒng)庫(kù)钟些。而這個(gè)文件是 AES 加密的,解密這個(gè)需要 Root Filesystem Key绊谭。例如厘唾,iPhone5,4(即 iPhone 5c )固件的解密 key
如圖2所示:
圖2:iPhone5,4 固件的 Root Filesystem 解密 Key
獲取到 key 后,就可以使用 VFDecrypt 工具完成最終的解密龙誊,當(dāng)然也有很多更方便的 UI 集成工具或者 python 腳本,比如:iDecrpyptIt喷楣。
二趟大、系統(tǒng)庫(kù)符號(hào)提取
從 iPhone OS 3.1 開(kāi)始鹤树,所有的系統(tǒng)庫(kù)都打包成一個(gè)文件:dyld_shared_cache_xxx ,其中 xxx 表示具體的架構(gòu)逊朽,此文件位于:/System/Library/Caches/com.apple.dyld 目錄罕伯。
dyld_shared_cache_xxx 文件的解壓可以使用 dyld 中的代碼,
步驟如圖3所示:
圖 3:dyld_shared_cache_xxx 文件解密方法
最后得到的目錄中就包含了此固件的系統(tǒng)庫(kù)文件叽讳,如 UIKit.framework 等追他。
三、需要說(shuō)明的地方
theiphonewiki 上提供的解密 key 并沒(méi)有 arm64 架構(gòu)的岛蚤,如果要解密 iPhone 5s 及以后產(chǎn)品對(duì)應(yīng)的固件邑狸,需要通過(guò)其它渠道或者自己手動(dòng)獲取解密 key 。關(guān)于如何手動(dòng)獲取解密 key涤妒,本文并沒(méi)有涉及单雾,這一話題筆者也還在研究,歡迎大家指正她紫。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 更多資訊請(qǐng)關(guān)注網(wǎng)易云捕微信公眾號(hào)硅堆,網(wǎng)易云捕官方微博~~
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??網(wǎng)易云捕微博