1. 程式人生 > >IDA使用初探-1.啟動IDA

IDA使用初探-1.啟動IDA

鼠標拖動 roc blog 一個數 後綴 逆向 容易 class 右鍵

在傳統的軟件開發模型中,通過編譯器、匯編器和鏈接器中的一個或幾個創建可執行程序。為了回溯編程過程(對程序進行逆向工程),使用各種工具撤銷匯編和編譯過程,這些工具就叫做反匯編器和反編譯器。反匯編器撤銷匯編過程,可以得到匯編語言形式的輸出結果;反編譯器則以匯編語言甚至是機器語言作為輸入,將高級語言結果輸出。

但是反編譯有幾點困難至今還沒有完美解決:編譯過程造成損失;編譯屬於多對多操作;反編譯非常依賴語言和庫。

反匯編算法:線性掃描(linear sweep)和遞歸下降(recursive descent)兩種主要的反匯編算法。

線性掃描:反匯編從第一個代碼段的第一個字節開始,以線性模式掃描整個代碼段,逐條反匯編每條指令,直到遍歷全部字節。此方法對於長度固定的指令集(MIPS)反匯編會更加容易,因為可以方便的的定位到隨後的指令。缺點就是無法正確的將嵌在代碼中的數據分離出。

遞歸下降:根據一條指令是否被另一條指令引用來決定是否對其進行反匯編。

交互式反匯編器專業版,常常稱其為IDA Pro,屬於遞歸下降反匯編器。上周看書有一些心得,在這裏一篇篇分享一下。

1.為了準備逆向用的實例,先用VC生成一個release版的Hello World。

1 #include <windows.h>  
2 INT WINAPI WinMain(HINSTANCE hInstance,  
3                    HINSTANCE hPrevInstance,  
4                    LPSTR lpCmdLine,  
5 int nShowCmd) 6 { 7 MessageBox(NULL, "IDA Pro", "IDADemo", MB_OK); 8 ExitProcess(0); 9 }

2.打開IDA 6.8,為進入IDA界面提供三種選項,分別是New(新建),Go(運行),Previous(上一個)。

技術分享

3.對於沒有進行過逆向分析的,點選New,新建一個工程,進入IDA界面。

技術分享

4.選擇File菜單下的Open,打開想要逆向的可執行文件,會顯示一個Load a new file的界面。

技術分享

這裏可以選擇

(1).程序的類型;

(2).處理器的類型;

(3).加載的段地址和偏移量;

(4).是否允許分析;

(5.)一些加載選項;

(6).內核和處理器的一些選項;

(7).windows系統dll所在的目錄。

默認選擇PE文件就可以,對於一些網絡數據包或者其他格式的文件,可以使用二進制加載,自己進行解析。

5.加載完畢之後就進入逆向工作界面了。

技術分享

6.初始是圖形視圖,有一個Graph overview窗口,可以在裏面用鼠標拖動定位到程序的某個位置。也可以在IDA View-A中點右鍵選擇Text view改成文字視圖,這樣能看到段和偏移量,快捷切換為空格鍵。

技術分享

7.整個界面內容很豐富,但是一開始使用不到這麽多功能,把不用的子窗口關閉。

工作區有多個子窗口,IDA View-A是反匯編窗口,HexView-A是十六進制格式顯示的窗口,Exports是導出表(這個程序中能讓外面調用的函數),Imports是導入表(程序中調用到的外面的函數),Functions是函數表(這個程序中的函數),Structures是結構,Enums是枚舉。

8.IDA很智能,鼠標移到某些標識符上會自動有適當的提示,雙擊還能自動跳到相應的位置。把一個函數逆向的方法很簡單,只要按F5鍵就會出來逆向出的C語言程序了。

技術分享

9.退出IDA時,會進行文件保存確認,如果需要繼續進行分析,將IDA中間數據庫打包,下次繼續打開就可以進行分析;如果不需要繼續分析,選擇不要打包,不要存儲數據庫。

技術分享

IDA打開應用程序時,會為其創建一個數據庫,後綴為IDB。IDB由4個文件組成,後綴為id0的二叉樹形式的數據庫,後綴為id1的程序字節標識,後綴為nam的Named窗口的索引信息,後綴為til的給定數據庫的本地類型定義的相關信息。

一旦IDA為某個可執行程序創建數據庫,它本身就不再需要訪問這個可執行文件,除非使用IDA的Debug功能。

IDA使用初探-1.啟動IDA