PE檔案之資源講解

2021-09-08 17:20:17 字數 1559 閱讀 8344

資源是pe檔案中非常重要的部分,幾乎所有的pe檔案中都包含資源,與匯入表與匯出表相比,資源的組織方式要複雜得多,要了解資源的話,重點在於了解資源整體上的組織結構。

我們知道,pe檔案資源中的內容包括:游標、圖示、位圖、選單等十幾種標準的型別,除此之外,還可以使用自定義的型別,每種型別的資源中,可能存在多個資源項,這些資源項用不同的id或者名稱來分辨,在某個資源id下,還可以同時存在不同**頁的版本。

pe檔案中資源的組織方式

資源的組織方式

獲取資源的位置

資源目錄

資源資料入口

我們怎麼獲取資源的位置呢?

我們可以在image_optional_header32結構的資料目錄欄位中獲取,資料目錄中的第三個image_data_directory結構便是資源的定義,從這個結構的virtualaddress得到的就是資源塊位址的rva值。

什麼是資源目錄?

我們應該了解的是:不管是根目錄,還是第二層,第三層目錄,每個目錄都是由乙個image_resource_directory結構與緊跟後面的數個image_resource_directory_entry結構組成,這兩種結構一起構成了乙個目錄快。

image_resource_directory的定義如下:

在這個結構中最重要的是最後兩個字段,兩者相加的結果就是image_resource_directory_entry的數量結果。

現在來介紹一下image_resource_entry結構,每個這種結構描述了乙個目錄項,其定義如下:

當name1欄位作為id使用時,是可以存放乙個雙字的。但是,當name1欄位作為字串使用時,乙個雙字是遠遠不夠的,這樣的話,那麼,我們就只有在這裡定義乙個字串的指標了。針對這兩種情況,我們怎麼來定義呢?定義的方法是:使用該字段的最高位(第31位)來區分這兩種情況。當第31位是0時,表示欄位的值作為id來使用;當第31位為1時,欄位的低位作為字串指標來使用。但由於資源名稱字串是使用unicode來編碼的,所用這個指標並不直接指向字串,而是指向乙個image_resource_dir_string_u的結構,這個結構包含unicode字串的長度與字串本身。image_resource_dir_string_u的定義如下:

什麼是資源資料入口呢?

image_resource_data_entry結構描述了資源資料所處的位置和大小,換句話說就是:我們終於得到了某個資源的詳細資訊。這個結構就是資源資料的入口。

其定義如下:

PE檔案解析之資源表解析

根據pe檔案格式我們可以快速找到目錄表陣列位置,在目錄表陣列中我們可以找到資源表在 我們看出資源表位置為0x4000,大小為0xb20。資源表所對應資料結構為image resource directory typedef struct image resource directory image ...

PE檔案詳解之PE檔案頭

1,pe檔案頭 pe header 緊挨著 dos stub 2,pe header 是pe相關結構nt映像頭 image nt header 的簡稱。裡面包含著許多pe裝載器用到的重要字段。3,執行體在支援pe檔案結構的作業系統中執行時,pe裝載器將從 image dos header 結構中的 ...

PE檔案詳解之PE檔案頭

1,pe檔案頭 pe header 緊挨著 dos stub 2,pe header 是pe相關結構nt映像頭 image nt header 的簡稱。裡面包含著許多pe裝載器用到的重要字段。3,執行體在支援pe檔案結構的作業系統中執行時,pe裝載器將從 image dos header 結構中的 ...