開啟IDA一般都是去搜尋函數,可以說函數是IDA工程的基本單位吧,資料結構什麼的都是為函數服務而已。函數列表在介面左側的Functions Window:
可以看到,UIKit有27789個函數呢。在搜尋前要Crowdsourced Security Testing道函數的表示方式。
Objective-C函數的表示:
拿UIView來做例子吧。在xcode documentation中,UIView的函數會有這樣的表示:
+ (void)beginAnimations:(NSString *)animationID context:(void *)context- (void)drawRect:(CGRect)rect- (id)initWithFrame:(CGRect)aRect- (void)removeFromSuperview@property(nonatomic) CGRect frame
在gdb/lldb中的表示:
+[UIView(Animation) beginAnimations:context:]-[UIView(Rendering) drawRect:]-[UIView initWithFrame:]-[UIView(Hierarchy) removeFromSuperview]-[UIView(Geometry) frame]-[UIView(Geometry) setFrame:]
可以看到,xdb表示的特點是:
- 省略傳回值
- 省略參數型別宣告與形參
- 函數名與類名之間有一個空格,多參數之間不含空格,直接是冒號分割
- 類名後緊跟著category名
- property被展開,readwrite屬性的property會等於兩個函數,set函數會有set首碼和第一個字母大寫(@property時顯式聲明函數名的話也許不同)
在IDA中的表示是:
__UIView_Animation__beginAnimations_context____UIView_Rendering__drawRect____UIView_initWithFrame____UIView_Hierarchy__removeFromSuperview___UIView_Geometry__frame___UIView_Geometry__setFrame__
其特點就是把xdb標記法中除字母數字外的字元都用底線代替。
(block型的函數會較複雜,後面的章節再講)
C++函數的表示:
和xdb的格式差不多,不單獨列了。基本格式為:
命名空間名::類名::函數名(參數類型,參數類型...)
預設命名空間的話就會沒有前面的名字和兩個冒號。C函數沒有類名,有的C函數實際有參數,但在IDA中不顯示。
盡量列我所看到的規則吧:
- 省略傳回值,省略形參
- 空參數時會表示為 函數名(void)
- 指標型參數是 類型+空格+* ,引用型參數是 類型+空格+&
- const型參數的const聲明在後,有空格隔開,在*和&之前
- const型函數的const省略
- 參數的typedef會展開,例如CFDictionaryRef會變成__CFDictionary const*
- 參數類型也要加命名空間名
一些函數樣本如下:
WebCore::loaderRunLoop(void)WebCore::runLoaderThread(void *)WebCore::CustomEvent::~CustomEvent()WebCore::CustomEvent::initCustomEvent(WTF::AtomicString const&, bool, bool, WebCore::ScriptValue)WebCore::LegacyWebArchive::createResource(__CFDictionary const*)_WKViewAddSubview
好了,知道函數名的表示規則之後,就可以搜尋你想看的函數了。
啟用Functions Window(隨便點擊一行令本視窗處於焦點狀態),頂部菜單Search->Search...->輸入函數名->OK。IDA的是模糊搜尋,可以不填全名,只要你能確保輸入的字元會令搜尋結果唯一就行,匹配中的話就會跳到那個函數處,雙擊這條函數,就能在右邊視窗看到此函數的反組譯碼代碼了。如果搜尋結果有多個,可以在頂部菜單->Search->Search again跳到下一個。
Search快速鍵為Alt+T,Search again的快速鍵為Ctrl+T。
為整體效果(點擊查看大圖):
一般來說,看著xcode文檔也難以確定其實際函數名的,先用xdb搜尋一遍再對照規則在IDA裡尋找會便捷些。
上一篇:IDA反組譯碼/反編譯靜態分析iOS模擬器程式(二)負載檔案與儲存資料庫
轉載請註明出處:http://blog.csdn.net/hursing