1. 程式人生 > >逆向中靜態分析工具——IDA初學者筆記

逆向中靜態分析工具——IDA初學者筆記

.... 映射 鏡像 ner 列表 都是 not 判斷 2gb

逆向中靜態分析工具——IDA初學者筆記

//******************************************************************************
//IDA初學者筆記

//******************************************************************************
//作者:Cai
//日期:2011-10-18
//******************************************************************************

本人作為一個初學者,盡量讓本文也從一個初學者的角度講一些比較適合的內容,對於高手而言,價值深淺就見笑了。

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就差不多了

技術分享圖片

技術分享圖片

逆向中靜態分析工具——IDA初學者筆記