IDA Pro(Interactive Disassembler Professional)簡介

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"可將修改更新到二進制文件

遠程調試

 

 

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