聊聊從iOS韌體提取系統庫符號
阿新 • • 發佈:2018-12-23
“民之失德,乾餱以愆;他山之石,可以攻玉。”- 《詩經》
當程式發生崩潰並有機會獲取到崩潰堆疊時,還原崩潰堆疊從而定位錯誤顯得非常重要。使用者符號的還原非常簡單,因為在打包 APP 時,會生成對應的符號檔案(以 .dSYM 結尾)。而對於系統符號,Apple 並沒有提供對應的符號檔案下載,所以需要自己解析。本文就簡單聊聊從 iOS 韌體獲取系統庫符號的方法。
一、韌體下載和解密
有很多提供韌體下載服務的站點,比較出名的是: theiphonewiki.com 。這個站點同時也維護了用於韌體解密的 key,如圖1所示:
圖1:theiphonewiki.com 維護的 iOS 9.x 版本的韌體解密 key
在圖1中,藍色字型部分表示對應的韌體 key 存在,紅色字體表示對應的韌體 key 暫時不可得,所以 theiphonewiki 上只有極少數的 arm64 版本的韌體是可以解密的。
韌體(以 .ipsw 結尾)檔案其實是一個壓縮包,解壓後得到的 3 個 dmg 檔案中,佔用空間最大的那個就包含需要的系統庫。而這個檔案是 AES 加密的,解密這個需要 Root Filesystem Key。例如,iPhone5,4(即 iPhone 5c )韌體的解密 key
如圖2所示:
圖2:iPhone5,4 韌體的 Root Filesystem 解密 Key
獲取到 key 後,就可以使用 VFDecrypt 工具完成最終的解密,當然也有很多更方便的 UI 整合工具或者 python 指令碼,比如:
二、系統庫符號提取
從 iPhone OS 3.1 開始,所有的系統庫都打包成一個檔案:dyld_shared_cache_xxx ,其中 xxx 表示具體的架構,此檔案位於:/System/Library/Caches/com.apple.dyld 目錄。dyld_shared_cache_xxx 檔案的解壓可以使用 dyld 中的程式碼,
步驟如圖3所示:
圖 3:dyld_shared_cache_xxx 檔案解密方法
最後得到的目錄中就包含了此韌體的系統庫檔案,如 UIKit.framework 等。