iOS逆向----恢復符號表

什麼是符號表?

符號表(Symbo Table)是一種用於語言翻譯器(例如編譯器和解釋器)中的數據結構。在符號表中,程序源代碼中的每個標識符都和它的聲明或使用信息綁定在一起,比如其數據類型、作用域以及內存地址

獲取符號表偏移前的地址

當App準備上線打生產環境的包時,編譯器會去掉符號表信息;所以在iOS逆向調試的時候,lldb調試中查看代碼的函數調用棧時

符號偏移前的地址 = 符號偏移後的地址(lldb斷點地址) - ASLR偏移地址

其中ASLR偏移地址是App啓動後系統分配的內存區域的的首地址,在lldb中通過:

image list -o -f

來獲取某一進程的ASLR地址。

恢復符號表

方法其實很固定,就是使用restore-symbol這個開源命令行工具。

恢複函數的符號表

  1. 克隆第三方庫: git clone https://github.com/tobefuturer/restore-symbol
  2. 到庫目錄裏: cd restore-symbol
  3. 編譯成功後會在當前目錄生成一個 restore-symbol 可執行文件
  4. 在macOS終端運行(設置爲全局命令): sudo cp ./restore-symbol /usr/local/bin。或者自己手動拷貝到/usr/local/bin目錄下也可以
  5. 給已經砸殼的IPA文件瘦身:lipo -info xxx 查看是否是fat的文件,如果是fat的文件,fat文件瘦身:lipo xxx-thin arm64 -output xxx.arm64
  6. 獲取符號表:restore-symbol xxx.arm64 -o xxx.symbol
  7. 然後將xxx.symbol替換IPA包裏原來的xxx二進制,記得給xxx.symbol改名啊
  8. 扔到IPAPatch裏調試吧

恢復block的符號表

iOS中 block 是一段特殊的代碼塊,反彙編後再彙編語言中以sub_xxxx表示,例如:sub_123456ASD,我們恢復block的符號表需要藉助IDA和python腳本來實現,需要下載這個腳本

  1. Mac版IDAfn+Alt+F7打開腳本,或者menu+文件+Script file 加載
  2. IDA控制檯輸出Search completed表示(也有可能不出現,截圖中沒出現,但是已經有block_symbol.json文件了),恢復完成。在IDA打開文件路徑有:block_symbol.json在這裏插入圖片描述
    在這裏插入圖片描述
  3. 在原先恢複函數符號表的Mach-O文件中,繼續恢復Block符號表restore-symbol xxx.symbol -o xxx.symbol -j block_symbol.json
    在這裏插入圖片描述
  4. 然後重新打包用IPAPatch運行即可
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章