天天看點

靜态分析:IDA逆向代碼段說明 text、idata、rdata、data靜态分析:IDA逆向代碼段說明 text、idata、rdata、data

靜态分析:IDA逆向代碼段說明 text、idata、rdata、data

通常IDA對一個PE檔案逆向出來的代碼中,

存在四個最基本的段text、idata、rdata、data,分别為代碼、外部引入、資源包、變量。

四個段為PE檔案的結構中對應的段。

一、text段:

該段位程式代碼段,在該段一開始就可以看到:

.text:00401000 ; Segment type: Pure code

.text:00401000 ; Segment permissions: Read/Execute

這裡的段類型跟權限說明很清楚: 分别為代碼段和可讀可執行。需要注意的是,borland這裡叫做code,而不是text 

二、idata、rdata、data段

從命名上可以看出,三個段全為存放特殊資料的段,但IDA根據PE檔案的格式将資料段中不同類型的資料區分開來。

VC開發工具将INC,LIB,RES放在資料段,DELPHI也類似,同時由于Delphi的窗體檔案*.dfm在源代碼中使用編譯指令{$R *dfm}作為res資源放在資料段中,是以像delphi的反彙編工具dede就根據這些窗體資源資料,分析出相當清晰的源代碼與窗體事件的對應位址,當然實作代碼還是彙編代碼。

1) idata段:

該段在一開始一般有類似下面的說明:

.idata:0049B000 ; Section 2. (virtual address 0009B000)

.idata:0049B000 ; Virtual size : 0001717E ( 94590.)

.idata:0049B000 ; Section size in file : 00018000 ( 98304.)

.idata:0049B000 ; Offset to raw data for section: 0009B000

.idata:0049B000 ; Flags 40000040: Data Readable

.idata:0049B000 ; Alignment : default

.idata:0049B000 ;

.idata:0049B000 ; Imports from ADVAPI32.dll

.idata:0049B000 ;

.idata:0049B000 ; ===========================================================================

.idata:0049B000

.idata:0049B000 ; Segment type: Externs

.idata:0049B000 ; _idata

明顯是一個Imports函數的代碼段,這裡集中所有外部函數位址,代碼中會先跳到該位址後再執行,PE檔案加載器在開始會擷取真實的函數位址來修補idata段中的函數位址。

與之對應的exports是edata,

表面上看PE檔案對該段的定位是特殊資料段。

2)rdata段

名字上看就是資源資料段,程式用到什麼資源資料都在這裡,資源包括你自己封包的,也包括開發工具自動封包的。

3)data段

這個段存放程式的全局資料、全局常量等。