IDA是什么
交互式反匯編器專業版(Interactive Disassembler Professional)簡稱為IDA。IDA Pro是一款支持交互、可編程的、擴展插件、支持多種處理器的逆向工程利器。
用到的軟件IDA PRO http://www.zjkweiqi.cn/pcdown/1830.html
作為一個初學者,盡量讓本文也從一個初學者的角度講一些比較適合的內容,對於高手而言,價值深淺就見笑了。
IDA打開一個Win32的EXE后,會出現一系列窗口,默認定位到“IDA View”窗口中的入口函數處,即VC程序的WinMain,
到這里,最重要最艱難的反編譯工作已經被IDA這個工具完成了,但逆向工程,遠不止這些。
接下來要來進行跟蹤調試、修改 ,這就必須先學習如何使用這個IDA工具,不過同時進行也是最好的學習方法。
在正式開始前,有2個實用的瀏覽快捷鍵需要記住,就是前進后退:
前進:Ctrl+Enter
后退:Esc
當然也可以使用工具欄的按鈕:,
或菜單:
提示:若工具欄沒有按鈕則在主菜單View-Toolbars-Jump勾上即可:
1.主要窗口介紹:
IDA作為一個具有強大核心引擎和靈活輔助插件的組合型工具,有太多地方需要去研究熟悉的,但是學習是一個循序漸進、
由淺到深的過程,因此,本文從入眼就接觸到的窗口開始介紹,應該是條正確的道路。
1)IDA View
該窗口可通過View-Open subviews-Disassembly調出:
該窗口有2種模式,一種是Text View,另一種是Graph View,2種大同小異, 關於兩種瀏覽模式的轉換, 可在右鍵菜單
中切換:
·Text View切換到Graph View:(注意:在 Text View中有時右鍵菜單不是這樣的,這時換個有代碼的位置點右鍵就可以了)
·GraphView切換到Text View:
以下采用比較通用的Text View為例來介紹,如下圖:
主要是三個區域:地址區、OpCode區(操作碼區)、反編譯代碼區
A.地址區
該處地址以PE文件加載到內存后的虛擬地址為准,即鏡像基址+偏移地址,如例子的程序基址是0x00400000,
如圖中.text:0048FEEC位置數據如下:
該處地址是基址0x00400000 + 偏移地址8FEEC,假如我們使用WinHex打開查看,可以看到偏移地址8FEEC 處的數據
如下:
可以看出,兩處數據是相同的,因此在WinHex中修改 8FEEC 處的數據將會影響到IDA中.text:0048FEEC處的數據。
這里順便轉一下,虛擬內存空間地址表:
高2G空間 (Ring0級能訪問區域) :
0xFFFFFFFF-0xC0000000:1GB用於VxD、存儲器管理和文件系統;
0xBFFFFFFF-0x80000000:1GB共享的WIN32 DLL、存儲器映射文件和共享存儲區;
低2G空間(Ring3權限區域)
0x7FFFFFFF-0x00400000:約2GB為每個進程的WIN32專用地址;
0x003FFFFF-0x00001000:為MS-DOS系統 和 WIN16應用程序;
0x00000FFF-0x00000000:為防止使用空指針的4,096字節;
同時順便提醒一下,不管EXE或DLL基址都是可變的,但一個DLL加載到EXE后,基址會被重定向,但偏移地址是不變的;
而對於PE文件,PE頭的長度並不是固定的,當然有着同樣的解析標准,可也導致IDA中偏移地址-基址不一定等於文件地址,
判斷代碼在文件中的基址很容易,通常PE頭在WinHex中可以清晰的看到“This program cannot be run in DOS.....”,之后就是
一些段名稱:如.text,.rdata。接着就是一小段00,之后出現數據的地方就是代碼基址,大部分是55 8B或56 8B等。
B.OpCode區
該區域默認不會顯示出來,需要打開菜單Options-General,
在“Disassembly”頁中的“Display Disassembly line parts”中,設置”Number of opcode bytes“,例子中設置 8,默認為0則不顯示。
OpCode區字面上看是操作碼區的意思,當然這是一個以16進制字符顯示二進制數據的形式,這樣結合反編譯代碼會更具直觀性,
但也使界面復雜化,仁者見仁。
C.反編譯代碼區
該區域是IDA的主要功能區域,具有很多特性,如相同字符串高亮、雙擊函數名或引用變量名可調整到對應的跳轉地址等,這里功能快捷鍵繁多,留待以后慢慢學習熟悉。同樣介紹幾個快捷鍵:
·字符串搜索: 搜 索:Alt+T 下一個:Ctrl+T
·反編譯為C代碼: 在反匯編代碼中按F5即可。
D.跳轉指引區
該區域主要是顯示一些跳轉地址指引箭頭,作用簡單明了。
2)Hex View
該窗口如下圖所示,與一般的16進制編輯器類似。
默認為只讀狀態,可使用快捷鍵F2對數據區域(綠色字符區域)在只讀/編輯二種狀態間切換,也可以使用patch program功能來編輯(后面會介紹該功能)。
3)其他窗體
IDA的窗體均可在主菜單View-Open subviews中打開/關閉,其他如pseudocode為反編譯C代碼窗體、strings為程序字符串列表窗口,均為十分有用的輔助窗口,以后再慢慢介紹
附:
1.啟用patch program(修改代碼)菜單:
idagui.cgf中DISPLAY_PATCH_SUBMENU改為YES,即可將修改二進制代碼的菜單,
當然修改代碼的窗體中仍是以16進制字符顯示,這個修改於Alt+F2不一樣,可以將修改於原文件的不同地方保存到一個dif文件里。
2.快捷鍵:
在IDA View中按F5可以生產C代碼查看, 也可以將整個保存為C文件進行查看。
在Hex View中按F2可直接編輯16進制數據。
IDA顯示字節機器碼
菜單
Options >> General
Disassembly選項卡Number of opcode bytes寫上非0,寫1好像沒啥用,只顯示1位根本沒用,16就差不多了