iOS逆向學習四:符號表還原

本文的部分理論支持,節選自這裏:iOS符號表恢復

前言

符號表歷來是逆向工程中的“必爭之地”,而iOS應用在上線前要裁去符號表,以避免被逆向分析。

這些可以通過配置xcode的編譯選項來達到效果。具體操作請看這:Xcode中和symbols有關的幾個設置

Xcode顯示調用堆棧中符號時,只會顯示符號表中有的符號。爲了我們調試過程的順利,我們有必要把可執行文件中的符號表恢復回來。

先來看一眼無符號表和有符號表的可執行文件調試區別:
無符號表
有符號表
符號表有多好用,一目瞭然。

什麼是符號表?

我們要恢復符號表,首先要知道符號表是什麼,他是怎麼存在於 Mach-O 文件中的?由於這塊涉及到的知識較多,還原符號表的作者講解的很好,所以希望大家認真研究一下這篇文章。對 就是開篇提到的鏈接。

這裏是:項目開源地址
工具的配置和使用說明,也在作者的博客中。

有了這些工具,再回過頭來研究一下,爲什麼我們在第二篇文章中重寫了doSearch方法,卻沒有生效的原因。

doSearch打斷點的時候,showLoading函數已經被執行了,但我們點擊搜索沒有反應,所以應該是後面調用了stopLoading函數。這個函數正好在FindContactSearchViewCellInfo類裏實現了(在class-dump導出的頭文件裏看到的)。所以我們就大膽嘗試一下,通過br -n "[FindContactSearchViewCellInfo stopLoading]"命令,斷點該函數。
再次在輸入框輸入0921,bingo,斷點執行了。

從函數堆棧調用順序(圖片出了點問題,就不貼圖了,後面我會附上其他app的函數調用棧效果截圖),我們可以看到doSearch之後,執行了另一個函數:
- (void)MessageReturn:(id)arg1 Event:(unsigned int)arg2
該函數也是FindContactSearchViewCellInfo類中的。
移步IDA工具,看該函數實現:
在這裏插入圖片描述
驚不驚喜,怪不得重寫了網絡請求的創建,依然搜不到想要的結果。而且我也曾試着重寫過wx的getSearchBarText方法,仍然不起作用。
原來是消息回來之後,wx拿searchBar.text 跟 request的請求參數(userName就是)做了比對,最終丟掉了這次的請求包。最後又stopLoading了。

我懷疑這是wx來了一個新人,不知道該類有getSearchBarText方法,所以直接自己手動取值了。導致正常的微信用起來會有一個bug:點擊搜索的瞬間,刪除一位搜索框的內容。loading就停不下了。

哦對了,附上別人的符號表還原效果圖:
在這裏插入圖片描述
我們斷點到stopLoading以後,也是這種效果。

至此,調試三方app就跟調試自己的app一樣了。

這篇可能有點爛尾,實在是符號表還原的理論知識太多,而且作者講的我無法超越,只能虛心引用了。

那麼,加油吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章