從記事本了解PE結構的匯入表

2021-06-02 07:31:14 字數 2014 閱讀 5890

匯入表是防毒軟體廠商非常關注的部位尤其是啟發式掃瞄。所以,了解匯入表的結構對免殺技術是必不可少的。

下文我們從大家最常用的notepad.exe的分析來揭開匯入表的神秘面紗。

首先用loadpe工具載入notepad.exe。檢視其區段表和目錄表資訊。

第一步:計算轉換因子

從目錄表的輸入表的rva(相對虛擬位址)查詢在區段表中的位置。這裡的rva是0x7604對應的是區段表的.text區段。

轉換因子 =  voffeset - roffset

1000 - 400 = c00 (注意這裡顯示的都是十六進製制,以下同,不再贅述)

c00就是記事本的匯入表對應的轉換因子。轉化因子就是記憶體位址和檔案位址的轉換差。

記憶體位址-轉換因子 = 檔案位址

檔案位址+轉換因子 = 記憶體位址

第二步:了解image_import_descriptor結構

計算匯入表的檔案位址為

7604 - c00 = 6a04

我們用ue檢視6a04處的內容如下:

紅框部分代表了乙個image_import_descriptor結構。

typedef struct _image_import_descriptor ;

dword   timedatestamp;        

dword   forwarderchain;         // -1 if no forwarders

dwordname;

dwordfirstthunk;             // rva to iat (if bound this iat has actual addresses)

} image_import_descriptor;

這裡我們主要關心是加粗的內容,對應內容如下表:

字段相對記憶體虛擬位址

檔案位址

內容originalfirstthunk

6d90

指向匯入函式名字結構體陣列指標

name

00007aac

6eac

指嚮導入庫名字

firstthunk

000012c4

6c4指向iat匯入位址表偏移

第三步:分析originalfirstthunk欄位

這裡紅色框起來的資料是乙個指向image_thunk_data32結構體的指標資料。全0也就是綠色框起來的部分代表乙個導入庫的結束。由於陣列元素是指標 所以,這裡第乙個導入庫的陣列元素有9個,所以匯入的函式也有9個。

首先我們檢視記憶體偏移6e7a(00007a7a-c00)處的image_thunk_data32結構體資料。

該結構體的第乙個元素(2位元組)代表匯出的函式的序號0f。後邊是匯出函式名,不定長,但必須以0結尾。這裡代表的函式名是pagesetupdlgw。我們可以依次找出這個導入庫的所有匯出函式資訊。

下面我們驗證一下。用loadpe檢視匯入表資訊如下圖所示:

由此可以確認我們找的完全正確。

第四步:分析name欄位

首先用ue檢視位址為6eac(7aac-c00)的資料如下

由此可見6eac指向的是乙個字串comdlg32.dll。與loadpe中顯示的dll的名稱相符。

第五步:分析firstthunk欄位

firstthunk是與iat表關聯的。

匯入位址表(iat):import address table 由於匯入函式就是被程式呼叫但其執行**又不在程式中的函式,這些函式的**位於乙個或者多個dll 中.當pe 檔案被裝入記憶體的時候,windows 裝載器才將dll 裝入,並將呼叫匯入函式的指令和函式實際所處的位址聯絡起來(動態連線),這操作就需要匯入表完成.其中匯入位址表就指示函式實際位址。

我們可以看到這裡指向的也是9個函式位址。其中第乙個函式位址是76344906

下面我們檢視該程式在od中載入起來的這個位址是什麼。

由此可見這個位址正是pagesetupdlgw的載入位址。

至此,關於匯入表與iat和一系列的匯入函式之間的關係都已非常清晰。

小型記事本的VB實現

上面是程式執行的介面!程式執行介面已上傳到相簿的vb6欄目 以下就是 vb6的源 依次新增 5個按鈕控制項,乙個 timer 控制項和乙個 microsoftcommondialogcontrol6.0控制項 private sub command1 click 輸入文字 dim n on erro...

C 對記事本的讀寫

using system using system.collections.generic using system.text using system.io namespace anshield autofutures.baseclase public static string fileread...

小型記事本的VB實現

上面是程式執行的介面!程式執行介面已上傳到相簿的vb6欄目 以下就是vb6的源 依次新增5個按鈕控制項,乙個timer控制項和乙個microsoft common dialog control 6.0控制項 private sub command1 click 輸入文字 dim n on error...