1. 程式人生 > >靜態分析:IDA逆向代碼段說明 text、idata、rdata、data

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

align PE size XP perm 都在 ada 全局常量 自己

靜態分析: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段

這個段存放程序的全局數據、全局常量等。

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