IDA PRO新手學習教程


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM