IDA的交互能力:對變量名、數組、結構等進行定義,人爲指定編譯器類型等。
IDA支持多平臺的多種文件類型:PE,DOS、UNIX、Mac、Java、.NET等。
IDA在反編譯程序後會創建一個數據庫(一個IDB文件),一旦創建成功,再次分析目標文件時就無需目標文件,只需擁有之前創建的數據庫即可。
配置IDA
1.Disassembly
IDA主窗口
1.反彙編窗口IDA-View
反彙編窗口有兩種顯示模式:圖形視圖和文本視圖,圖形視圖以程序流程圖顯示代碼,將函數分解成塊顯示。兩種模式可通過按空格鍵或者右鍵->‘text view’進行切換
2.添加註釋窗口
在代碼行後單擊';'或右鍵->‘edit commet’ 可彈出註釋窗口在代碼行後添加註釋
3.導航
單擊可直接在跳轉到相關的地方,右鍵->'zoom in' 'zoom out' 可放大或縮小導航條
4.Imports 窗口
該窗口包含了程序調用的函數及其對應的庫,雙擊可在反彙編窗口中跳轉到調用處
5.轉到地址窗口
在反彙編窗口單擊'G',可彈出地址跳轉窗口跳轉到輸入的地址
6.字符串窗口
'view'->'open subviews'->'strings'可打開字符串窗口,其包含了掃描到的字符串,雙擊在反彙編窗口可跳轉到字符串出現的地方
7."shift+F9"或“options”->'view'->'open subviews'->'structures' 打開結構體窗口,在此可以自定義結構體、查看程序使用的已導入的結構體
8“shift+F11"或“options”->'view'->'open subviews'->'type libraries'打開類型庫,在此可以添加一些文件,這些文件可能定義了程序使用的結構體,進而可以在反彙編窗口中以結構體的形式顯示數據
交叉參考(XREF)
交叉參考用於瞭解代碼的相互調用關係
圖中的“CODE XREF: :_E_1]xV:02535339| j”就表示交叉參考,提示當前的代碼01665945可以從02535339處跳轉至此,'|'後面有幾種情況:j表示跳轉,p表示子程序,o表示子程序。通過單"Enter"可跳轉到相應的地方
參考重命名
參考重命名可將反彙編中的一些默認名稱改爲一些有意義的名稱,增加代碼的可讀性。選擇名稱後單擊'N‘或右鍵->’Rename‘可彈出重命名窗口
數據與代碼轉換
有些時候代碼可能會被錯誤的識別爲數據,或數據被錯誤的識別爲代碼,因此需要將十六進制數據轉換爲代碼顯示,或者將代碼轉換爲數據顯示,將光標移動到要轉換的地方的第一字節:
單擊’C‘或"edit"->"Code" :將數據轉換爲代碼
單擊'U'或“edit”->"Undefine" : 將代碼轉換爲數據
單擊’D‘ :將數據類型在dd、dw、db之間轉換
單擊’P‘ :定義爲子程序
單擊‘A’或 “Edit”-> "Strings" -> "ASCII" :轉換爲字符串,“options”-> "ASCII string style"可以切換字符串識別模式,默認爲0字節結束識別
單擊‘*’或 “Edit”-> "Array" :在彈窗中設置好數組大小(Array size)、每行項數(Item on a line)、對齊方式(Element print width)等後,可以轉換爲數組形式顯示
代碼與數據之間的轉換會在遇到第一個錯誤數據或者指令時停止,或者選擇一段數據或代碼可在指定範圍內進行轉換
顯示結構體
1.加載常用的結構體
2.自定義結構體
FLIRT(Fast Library Identification and Recognition Technology)庫文件快速識別與鑑定技術
IDA可以在一些編譯器的標準庫文件中找出當前程序調用的函數,並顯示,如調用C的printf,一般的反彙編可能顯示爲call 407F82,而IDA可以顯示爲call printf,提高了彙編代碼的可讀性。
FILRT失敗的原因:
1.程序中編譯器相關的數據被刪除,無法識別是什麼編譯器
2.程序由某些特定版本的編譯器產生,IDA不支持
3.編譯器不支持
如果知道編譯器且IDA支持但是FILRT沒有成功,那麼可以嘗試啓用特定的編譯器簽名文件:“shift+F5”或“view”->"open subviews"->"signatures" 打開庫列表,然後右鍵->"apply new signature" 添加編譯器的簽名文件,IDA就會重新分析代碼或者“options”->"general"->"analysis"->"reanalysis program"手動讓IDA分析代碼
如果知道程序調用了某個庫的函數,亦可自己創建FLIRT簽名文件(.sig),詳情請查看FLIRT的幫助文檔
IDA動態調試
加載目標文件
IDA調試有2種方式:第一種是IDA加載目標文件後,點擊“debugger”->"select debugger"彈出選擇調試器窗口,一般選擇“win32 debugger”不一般的情況請自行搜索選項相關信息,選擇後Debugger菜單欄會發送改變,這時點擊“debugger”->"start process"即可開始調試。
第二種是加載正在運行的程序進行調試,“Debugger”->"Attach to process..."或“debugger”->"attach"->"local windows debugger"即可開始調試,這時需要注意的是如果調試的程序是以管理員權限運行的,那麼IDA也需要以管理員權限運行才能進行調試。
調試時常用的快捷鍵
F7 | 單步步進,遇到 call 時會進入 |
F8 | 單步步過,遇到 call 時不會進入 |
F9 | 運行程序,直到遇到斷點 |
F4 | 運行到光標所在行 |
F2 | 設置斷點在光標所在行 |
ctrl + F7 |
運行直到函數返回 |
ctrl + F2 | 終止正在運行的程序 |
調試窗口
"IDA View-R(E)IP" : 代碼相關
"General registers": 通用寄存器相關
"Threads" : 線程相關
"Stack view" : 堆棧相關
設置斷點
有些時候在單擊'F7'之後程序並不是單步執行而是像‘F9’一樣直接運行程序並沒有停止,這時候可以嘗試先暫停程序,然後在EIP指令處設置斷點(F2),這樣點擊'F7'程序就可以單步執行了。
修改指令或數據
將光標移動到要修改的指令行,“edit”->"patch program"->"assemble"即可修改指令,或者在Hex View窗口修改亦可,修改後“edit”->"patch program"->"apply patches to input file"可將修改更新到二進制文件
遠程調試