PE檔案解析 資源中的版本資訊結構

2021-09-11 06:41:13 字數 2108 閱讀 6873

想要獲取乙個可執行檔案(pe檔案)裡包含的資源檔案,首先要解析可執行檔案,得到資源儲存的位址及大小,可參考 。然後,根據資源儲存方式,得到各資源的資料內容及其大小,可參考 。

pe檔案的資源中,版本資訊的資源型別id=16。在rc檔案中,版本資訊的定義方式如下:

vs_version_info versioninfo

fileversion 1,0,0,1

productversion 1,0,0,1

fileflagsmask 0x3fl

#ifdef _debug

fileflags 0x1l

#else

fileflags 0x0l

#endif

fileos 0x4l

filetype 0x1l

filesubtype 0x0l

begin

block "stringfileinfo"

begin

block "080404b0"

begin

value "companyname", "\0"

value "filedescription", "pe檔案資源提取 microsoft 基礎類應用程式\0"

value "fileversion", "1, 0, 0, 1\0"

value "internalname", "pe檔案資源提取\0"

value "legaltrademarks", "\0"

value "originalfilename", "pe檔案資源提取.exe\0"

value "productname", "pe檔案資源提取 應用程式\0"

value "productversion", "1, 0, 0, 1\0"

endend

block "varfileinfo"

begin

value "translation", 0x804, 1200

endend

相對應的程式版本資訊,可以通過右鍵->屬性->詳細資訊檢視,如下:

版本資訊在資源中的儲存是以順序儲存的多叉樹式資料結構,同時,4位元組對齊儲存。每個樹節點包括資料頭和資料內容兩部分,都是4位元組對齊,其中資料頭的資料結構如下:

struct versioninfo

;

wlength:以該樹節點為起點的所有節點的位元組大小,包括本節點;

wvaluelength:本節點的資料內容大小;

wtype:本節點的資料型別(1-字串,0-二進位制);

szkey:unicode字串,標識該節點的key值,以'\0'為結束符。

資料頭後緊跟著的就是資料內容,資料型別以wtype(1-字串,0-二進位制)區分。注意:如果是字串的話,資料位元組數=wvaluelength*2,因為是unicode字串,該字串中間可能包括'\0'。如果wvaluelength=sizeof(vs_fixedfileinfo),則說明是跟節點。vs_fixedfileinfo結構體定義如下:

typedef struct ta**s_fixedfileinfo

vs_fixedfileinfo;

資料內容後如果還有資料,則該資料為本節點的子節點資料,可以通過遞迴實現。

以下程式展示了如何從pe檔案的版本資訊資源流中讀取並輸出成rc檔案形式的**。

void copyout(const char *str, int n)

} else if(head->wvaluelength == sizeof(vs_fixedfileinfo))

else print("\", %#x, %d\n",value[0],value[1]);

//遞迴輸出子資訊塊

if(i < head->wlength)

copyout("\t", lay-1);

puts("end\n");

} return buf + head->wlength;

}

PE檔案解析之資源表解析

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

實驗 得PE檔案的版本資訊

實驗的原因 做cab打包實驗,需要指定cab包內的檔案版本.參考資料 檔案拖放到cedit 接受拖動效果的cedit codeproject上的這個實現了edit上拖放檔案和資料夾的效果,頭2個資料沒有效果,沒有工程示例.通過比較發現,定義了cedit的繼承類ceditdropfiles之後,還要完...

驅動中解析pe檔案之pdb

驅動中解析pe檔案的pdb,一切盡在 中,本部落格不負責科普,能立即用的 你都有了,標頭檔案 結構體 注釋都整理好你還想要啥?include include include ntimage.h define nb10 sig 01bn define rsds sig sdsr typedef str...