0x01 啟動IDA
- new:反匯編一個新文件
- go:運行,直接進入IDA
- Previous:載入一個我們以前編譯過的程序
如果不想每次都看到這個對話框,可以取消該對話框底部的Display at startup(啟動時顯示),如果沒有勾選這個,下次啟動IDA時,IDA會認為我們單擊了go選項。如果我們沒有勾選這個,下次希望使用這個時,我們可以按照下圖做,就又可以顯示了。
文件加載
使用File—>open命令打開一個新文件時,會看到下圖所示的加載對話框。IDA會自動生成一個可能的文件列表,并顯示這個列表,這個列表中將顯示最適合處理選定文件的IDA加載器。
- Windows PE加載器(pe.ldw)
- MS-DOS EXE加載器(dos.ldw),PE文件格式是MS-DOS EXE文件格式的拓展形式
- Binary File(二進制文件):這個選項會一直顯示,不論加載什么文件,因為它是IDA加載無法識別的文件默認選項,它提供最低級的文件加載方式
- 如果IDA提供幾個加載器,我們一般選擇第一個,其他選項我們也一般默認
0x02 界面介紹
默認界面:
1、工具欄區域:
包含與IDA的常用操作對應的工具,我們可使用 VIew–>Toolbars----->Advance mode打開高級模式工具欄,高級模式工具欄包含三排工具按鈕
2、彩色的水平帶是IDA的概括導航欄,也叫導航帶,是被加載文件地址空間的線性視圖。我們可以右擊導航帶任何位置,并選擇一個可用的縮放選項。不同的顏色表示不同類型的文件類型,如數據或代碼。在導航帶上,會有一個細小的當前位置指示符(默認為黃色)指向當前反匯編窗口中顯示地址范圍對應的導航帶地址。我們可以通過options—>colors自定義導航帶使用的顏色。
3、IDA為當前打開的每一個數據顯示窗口都提供了標簽。數據顯示窗口中包含從二進制文件中提取的信息,他們代表數據庫的各種視圖。
通過View—>Open Subviews菜單可打開其他數據顯示窗口
4、反匯編視圖是主要數據顯示視圖,兩種形式:圖形視圖(默認)和列表視圖。我們可以使用空格鍵在圖形樣式和列表樣式之間切換。
如果希望列表視圖作為默認視圖,則必須通過Options---->General菜單打開IDA Options復選框,取消Graph選項卡下的Use graph view by default
5、使用圖形視圖時,顯示區很少能夠一次顯示某個函數的完整圖形。這時,圖形概況視圖可提供基本圖形結構的縮小快照,其中虛線矩陣表示其在圖形視圖中的當前顯示位置。
6、輸出窗口顯示的是IDA輸出的信息
7、函數窗口是默認IDA顯示窗口的最后一部分
IDA 桌面提示和技巧
- 使用View–>Open SubViews恢復無意中關閉的數據顯示窗口
- 使用Windows—>reset desktop命令可迅速將桌面恢復到原始布局
- 利用windows—>Save desktop命令保存你認為特別有用的當前桌面布局。使用Windows—>load desktop命令迅速打開你之前保存的一個桌面布局
- Disassembly窗口是唯一一個可以修改其顯示字體的窗口,使用Options—>fonts命令可以設置字體
0x03 IDA數據顯示窗口
基本規則:
- IDA不提供撤銷功能。如果不小心按下某個鍵,導致數據庫文件發生意外,這是,我們必須將顯示窗口恢復到以前的狀態
- 幾乎所有的操作都有其對應的菜單項、熱鍵和工具欄按鈕。
- IDA提供方便的、基于上下文的鼠標右鍵操作菜單
IDA主要的數據顯示窗口
在IDA中,ESC鍵是一個非常有用的熱鍵。在反匯編窗口中,ESC鍵的作用與web瀏覽器的后退按鈕類似。因此,它在導航反匯編窗口非常有用。遺憾的是,在打開其他的窗口時,ESC鍵用于關閉窗口。
1、反匯編窗口
反匯編窗口也叫IDA-View窗口,它是操作和分析二進制文件的主要工具。
反匯編窗口有兩種顯示窗口:圖形和列表
IDA圖形視圖
圖形視圖將一個函數分解成許多基本塊,以生動顯示該函數由一個塊到另一個塊的控制流程。IDA使用不同彩色箭頭區分函數塊之間各種類型的流。在條件跳轉位置終止的基本塊可能會生成兩種流:
- 紅色:No邊的箭頭,不執行分支
- 綠色:Yes邊的箭頭,執行分支
還有一個藍色箭頭,指向下一個即將執行的塊
我們可使用Ctrl+鼠標滑輪來調整圖形的大小。 - 平移:通過單擊圖形概述和拖動圖形視圖的背景來定位圖形
- 重新調整塊位置。通過單擊指定塊的標題欄并將其拖到一個新的位置,用戶還可以移動每一個塊的位置
- 創建其他反匯編窗口:可以通過View–>Open subviews—>disassembly命令打開另一個反匯編空口。這樣打開的第一個反匯編窗口叫做IDA View A。隨后的反匯編窗口叫做IDA View B、IDA View C,以此類推。每個反匯編窗口都獨立于其他窗口。我們可以在一個窗口中查看一個圖形,在另一個窗口查看文本列表。
2、IDA文本視圖
面向文本的反匯編窗口是查看和操作IDA生成的反匯編代碼的傳統顯示窗口。文本顯示窗口會顯示一個程序的完整反匯編代碼清單,用戶只有通過這個窗口才能查看一個二進制文件的數據部分。
顯示窗口的左邊部分叫做箭頭窗口,用于描述函數中的非線性流程。實線箭頭表示非條件跳轉,虛線箭頭表示條件跳轉。如果一個跳轉將控制權交給程序中的某個地址,這時會使用粗線(實線或虛線)。出現逆向流程,通常表示程序中存在循環
函數窗口
Functions窗口用于列舉IDA在數據庫中識別的每一個函數
十六進制窗口
默認情況下,十六進制窗口顯示程序內容和列表的標準十六進制代碼,每行顯示16個字節。我們可以打開幾個十六進制窗口。
第一個16進制窗口會與第一個反匯編窗口同步。如果一個反匯編窗口與一個十六進制窗口同步,在一個窗口滾動鼠標,另一個窗口也會滾動到相應位置(同一個虛擬地址)。如果在反匯編窗口選中一個項目,十六進制窗口中的對應字節也將突出顯示。
有時候,十六進制窗口顯示的全部是問號,這表示IDA無法識別給定的虛擬地址范圍內的值。
導出窗口
導出窗口列出文件的入口點
導入窗口
導入窗口的功能與導出窗口的功能正好相反。它列出由被分析的二進制文件導入的所有函數
結構體窗口
結構體窗口用于顯示IDA決定在一個二進制文件中使用的任何復雜的數據結構的布局。
枚舉窗口
如果IDA檢測到標準枚舉數據類型,它將在枚舉窗口列出該數據類型
其他IDA顯示窗口
下面討論的窗口并不是你當前需要的信息,因此,IDA一開始并不開開這些窗口。
1.Strings 窗口
我們可以通過View —> Open SubViews —> Strings命令打開
Strings窗口中顯示的是從二進制文件中提取出的一組字符串,以及每個字符串所在的地址,雙擊Strings窗口中的任何字符串,反匯編窗口將跳轉到該字符所在的地址。IDA默認掃描的字符串類型為至少包含5個字符的C風格、以Null結尾的7位ASCII字符串。
每次打開Strings窗口,IDA都會掃描或重新掃描整個數據庫,查找其中的字符串。掃描字符串的操作遵照Strings窗口的設置來完成,我們右擊該窗口,在出現的菜單中選擇setup,即可開始設置
- Display only defined strings (僅顯示已定義的字符串)。這個選項使Strings窗口僅顯示IDA自動創建或用戶手動創建的已命名字符串數據項。
- Igonre instructions/data definitions(忽略指令/數據定義)。這個選項會使IDA掃描指令和現有數據定義中的字符串
2、names窗口
列舉一個二進制文件的所有全局名稱。雙擊Names窗口的名稱,可立即跳轉到顯示該名稱的反匯編視圖。
Name窗口顯示的名稱采用了顏色和字母編碼。其編碼方案:
- F,常規函數。IDA認為這些函數不屬于庫函數
- L,庫函數。IDA通過簽名匹配算法來識別庫函數
- I,導入的名稱,通常為共享庫導入的函數名稱
- C,命名代碼。
- D,數據
- A,字符串數據
3、段窗口
段窗口顯示的是在二進制文件中出現的段的簡要列表。該窗口顯示的信息包括段名稱、起始和結束地址以及許可標志。
雙擊段窗口的任何條目,IDA將跳轉到反匯編窗口中該段的起始位置。右擊一個條目,IDA將顯示一個上下文菜單,你可以添加新段、刪除現有段或者編譯現有段的屬性。
4、簽名窗口
IDA利用一個龐大的簽名庫來識別已知的代碼塊。簽名用于識別編譯器生成的常用啟動順序,以確定可能已被用于構建給定二進制文件的編譯器。
0x04 反匯編導航
基本IDA導航
1、雙擊導航
反匯編程序時,程序的每個位置都分配一個虛擬地址。只要提供希望訪問的位置的虛擬地址,就可以導航到程序的任何地址。然而,記住大量地址并非易事。這促使早期的程序員給他們希望引用的程序位置分配符號名稱。這大大簡化了他們的工作。我們只需雙擊這些名稱就可跳轉。
2、跳轉到地址
使用jump —>jump to address命令或在處于活動狀態的反匯編窗口按下熱鍵G,均可打開Jump toAddress對話框
3、導航歷史記錄
IDA的另一項類似于傳統web瀏覽器的功能,是它的前進和后退導航功能(基于你瀏覽反匯編窗口的順序)。每次你導航到反匯編窗口中的一個新位置,你當前的位置就會添加到位置列表中。有兩種方式菜單操作可用于遍歷這個列表。首先,Jump —>Jump to previous Position
或者使用ESC(只能在反匯編使用,其他窗口為關閉當前窗口),或者使用工具欄上的導航按鈕
搜索數據庫
在IDA中,你可以輕松導航到你知道的位置
1、文本搜索
IDA文本搜索相當于對反匯編列表窗口進行子字符串搜索。通過Search—>Text命令啟動文本搜索或者Alt+T。搜搜限制于僅查找完整的詞,并且能夠匹配反匯編行中的任何完整的詞,包括操作碼助記符或常量。最后使用Ctrl+T或者Search—>Next Text命令可重復前一項搜索,以找到下一個匹配。
2、二進制搜索
二進制搜索僅搜索十六進制視圖窗口。根據指定搜索字符串的方式,可以搜索16進制或ASCII字符串。
Search —>Sequence of Bytes或者Alt+B即可進行二進制搜索