IDA pro簡介

IDA pro介紹

本週分享的工具是IDA Pro 7.0。IDA Pro全稱是交互式反彙編器專業版(Interactive Disassembler Professional),簡稱IDA,它是一種典型的遞歸下降反彙編器。IDA並非免費軟件,但Hex-Rays公司提供了一個功能有限的免費版本。IDA是Windows,Linux或Mac OS X託管的多處理器反彙編程序 和調試程序,它提供了許多功能,是一款很強大的靜態反編譯工具。支持很多插件和python,利用一些插件可以提供很多方便的功能大大減少工作量,在CTF中,逆向和pwn都少不了它,更多強大的功能等待童鞋們自己去學習挖掘,三言兩語講不完。它支持數十種CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。
IDA pro 7.0(綠色英文版)部分插件+《IDA Pro權威指南 第2版 》已經上傳至羣文件,來源於:吾愛破解論壇。論壇也有漢化版,英文原版本習慣了都一樣。看雪有一個IDA pro插件收集區,大家有需要也可以去那找https://bbs.pediy.com/forum-53.htm

IDA pro常用功能介紹

IDA pro安裝很簡單,沒什麼難度,這個還是綠色版直接解壓運行即可,就是大家需要什麼插件自己裝,這樣比較乾淨整潔,挺好的。
IDA表情包.jpg

IDA文件目錄簡介

1.png
ida.exe32位的,大部分CTF中windows上可執行程序逆向用這個就可以了;
ida64.exe顧名思義是64位,一般CTF中ELF文件中都是用這個打開,32位版本支持不好的都可以用這個。

啓動

打開以後首先顯示IDA的介紹和註冊信息等
2.png
3.png
New(新建空白的工程),Go(運行工程),Previous(運行過的工程記錄)
4.png
選擇File菜單下的Open,打開要逆向的文件,彈出一個Load a new file的界面。可以選擇:

  1. 程序的類型;
  2. 處理器的類型;
  3. 加載的段地址和偏移量;
  4. 是否允許分析;
  5. 一些加載選項;
  6. 內核和處理器的一些選項;
  7. windows系統dll所在的目錄。

5.png
默認選擇第一個PE文件就可以,一些其他格式的文件可以使用第三個選項Binary file以二進制文件的形式記載,自己解析。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3mRkASp1-1572424879647)(https://i.loli.net/2019/02/20/5c6d2463a8dc2.png)]
各窗口的功能:

  1. IDA view: 定位要修改的代碼段在哪裏。
  2. Hex view: 用來修改我們的數據
  3. exports: 導出函數表窗口
  4. import: 導入函數表窗口
  5. names: 函數和參數的命名列表
  6. functions: 樣本的所有函數窗口
  7. strings: 字符串顯示窗口,會列出程序中的所有字符串

8.png
頂部是工具欄其中包括一些逆向分析過程中經常使用的工具,基本工具欄能滿足普通用戶的需要,當然還可以通過菜單欄View->Toolbats->Advanced mode選項切換到高級模式工具欄,高級模式工具欄包含更加豐富的工具。切換回基本模式方法一樣,在上面有個Basic mode
9.png
工具欄下面是導航欄,加載文件地址空間的線性視圖,不同的顏色代表不同類型的文件內容,在導航欄下方列出了不同顏色所代表的文件內容。可以放大或縮小導航帶,點擊導航欄可以在反彙編窗口或十六進制窗口中跳轉到對應選中的位置。

反彙編窗口也稱IDA view窗口,顯示了被加載文件的反彙編代碼,是我們靜態分析過程中最主要的窗口。該窗口有兩種顯示格式,分別爲文本視圖和圖形視圖。很多時候我們會根據分析的需要在文本視圖和圖形視圖之間切換可以使用快捷鍵:空格鍵
11.png
圖形視圖能夠清晰地顯示一個函數的控制流程,可以通過」CTRL +鼠標滑輪」來縮放圖形顯示的大小。但對於大型或者複雜的函數可能會導致圖形視圖變得極爲雜亂,此時可以通過IDA在圖形視圖下默認打開的圖形概況窗口來定位需要查看的圖形區域。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-05TnQrYe-1572424879650)(https://i.loli.net/2019/02/20/5c6d2eb7f17fc.png)]
文本視圖中,左邊顯示了所在段名稱+文件地址,如圖中光標所在處爲.text:00401091表示地址0x00401091處代碼位於.text段,右邊顯示反彙編出來的彙編指令。

把鼠標移到某些標識符上IDA Pro會有一些提示,雙擊能自動跳到相應的位置。把一個函數逆向的方法很簡單,只要光標在函數區域按F5鍵(需要安裝Hex-Rays Decompiler插件,這裏安裝包已經自帶,這是IDA最nb的插件)就轉換顯示出僞代碼。

用戶還可以通過菜單欄View->Open Subviews選項打開需要的其他窗口。
下面將逐一介紹在靜態分析過程中經常使用的一些次要顯示窗口。
13.png
這是通過F5轉換出的僞代碼,方便用戶更快速理解分析,大大降低了逆向工程的門檻,不再讓人看彙編代碼看到頭禿。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7L5qEOUh-1572424879651)(https://i.loli.net/2019/02/20/5c6d30633bf47.png)]
Hex_View窗口也稱十六進制窗口,相當於一個十六進制的編輯器,可以直接對代碼和數據進行修改,用戶可以同時打開多個十六進制窗口。
14.png
Exports窗口爲導出函數窗口,列出了被載入文件的所有導出函數,若載入文件沒有抹去符號,很多時候用戶可以直接在導出函數列表中找到入口函數。
15.png
Imports窗口爲導入函數窗口,它會列出被分析的二進制文件導入的所有函數。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LtSkDTlk-1572424879652)(https://i.loli.net/2019/02/20/5c6d32a9f2595.png)]
Structures窗口,在分析階段,IDA會查詢它的函數類型簽名擴展庫,設法將函數的參數類型和程序使用的內存匹配起來。但在實際分析過程中經常會遇到IDA無法自動識別的數據結構,此時就需要用戶自己判斷內存結構的類型,若該數據爲結構體,可以在Structures窗口創建一個自定義結構體,然後將對應內存數據解析成該結構體,方便後續地分析。如下圖所示爲Structures窗口中列出的一些快捷鍵用來創建結構體。在創建結構體後,可以在需要應用該結構體的數據地址處,使用ALT + Q快捷鍵列出 創建的自定義的結構體。更加詳細地創建和使用結構體 的方法可以參見《IDA Pro權威指南 第2版 》的第8章。
17.png
Enums窗口,枚舉窗口與結構體窗口類似,用戶同樣可以創建自定義聯合體。如下圖所示爲Enums 窗口中列出的一些快捷鍵用來創建聯合體。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mQFAS5ft-1572424879653)(https://i.loli.net/2019/02/20/5c6d33635a15b.png)]
Strings窗口顯示了從被分析的二進制文件中提取出的字符串以及字符串所在的地址。在靜態分析過程中,分析人員經常使用的一種方法就是字符串定位法,通過在Strings窗口中搜索一些特定的字符串,然後通過字符串的引用能夠快速定位到關鍵的代碼邏輯。
19.png
functions窗口列舉出了IDA識別出的所有函數,雙擊選定函數條目,反彙編窗口會跳轉到選定函數所在的起始地址處,在分析過程中能夠快速定位到指定函數。
20.png
輸出信息窗口,輸出窗口將輸出你所執行的各種操作的狀態。

輸出窗口下面的輸入框在舊版本的IDA pro裏是用於執行IDC腳本命令,新版開始支持python,如果你想用IDC語法,點擊一下左下角python按鈕切換到IDC模式即可。

在關閉IDA程序或者打開其他數據庫時,IDA都會彈出下圖所示的保存數據庫的對話框。
21.png
若勾選Pack database (Store),會將之前分析過程中生成的四個數據庫組件文件打包生成一個idb文件,並且刪除四個數據庫組件文件,若原目錄下已有該分析文件對應的idb文件,會直接覆蓋。在下次繼續分析該文件時可以直接用IDA打開該idb文件
當用戶不需要保存數據庫時,可以勾選DON’T SAVE the database選項,此時仍然會刪除四個數據庫組件文件,但不會生成或者覆蓋idb文件

IDA常用快捷鍵功能

空格鍵:反彙編窗口切換文本跟圖形
Esc:在反彙編窗口中使用爲後退到上個操作的地址處
Shift +F5:打開簽名窗口
shift+F12:自動分析出參考字符串
ALT+T:搜索字符串(文本搜索)
ALT+L:標記(Lable)
ALT+M:設置標籤(mark)
ALT+G:轉換局部變量爲結構體
ALT+Enter:跳轉到新的窗口
Alt+B:快捷鍵用於搜索十六進制字節序列,通常在分析過程中可以用來搜索opcode
CTRL+M:列舉出當前已經添加的標籤
CTRL+S列舉出二進制程序的段的開始地址、結束地址、權限等信息
F9:動態調試程序(其實IDA主要用作靜態分析用的)
F5:將一個函數逆向出來(生成c僞代碼)
G:跳轉到指定地址
A:將選擇的信息轉換成ASCII(轉換成可讀性跟強的字符串)
X(ctrl+X):交叉引用,類似於OD中的棧回溯操作
N:對符號重命名
:&;(冒號&分號):光標所在位置添加常規註釋和可重複註釋
P:創建函數
T:解析結構體偏移
M:轉換爲枚舉類型常量
Y:設置變量類型
H:轉換16進制
C:光標所在地址處的內容解析成代碼
D:光標所在地址處的內容解析成數據
A:光標所在地址處的內容解析成ascll碼字符串
U:光標所在地址處的內容解析成未定義內容。

總結

IDA是一款功能很豐富很複雜很強大的工具,應用十分廣泛。逆向工程的難點除了工具使用,更多的是分析方法和調試技巧。童鞋們如果想進一步深入學習,建議可以先了解常見的彙編指令和C語言,可以多嘗試自己寫寫程序並鍛鍊動態調試能力。對於分析方法的訓練,建議大家可以自己對照着源碼和反彙編以後的代碼去理解。更深層次的就是需要了解微機原理和程序設計方法,熟悉win api這些,這兩年在CTF中linuxELF文件的逆向居多,win可執行程序較少,對於脫殼等也較少,更多傾向於算法逆向分析對於逆向技巧減少了很多。但是實際應用中,這些都是必備技能。希望大家能在2019學到更多知識,變的越來越牛逼。相關工具資源大家可以去看雪吾愛破解論壇去找,也歡迎各位大佬在評論區留言分享經驗技巧和資源。

這篇文章是之前寫的,給小白簡單介紹,大概對IDA有個認識,之後會把IDA進階的使用發出來,如何快速定位關鍵函數地址,靜態分析惡意代碼。

歡迎加入安恆萌新粉絲羣:928102972交流學習!!!
安恆萌新粉絲羣
博客原文地址