首頁(yè)
社區(qū)
課程
招聘
添加.rsrc節(jié)數(shù)據(jù)

咨詢個(gè)技術(shù)問(wèn)題,功能目的是從一個(gè)pe文件獲取rsrc節(jié)數(shù)據(jù),然后把這個(gè)獲取到的數(shù)據(jù)添加到一個(gè)沒(méi)有rsrc節(jié)的pe文件里,我是這樣修改的,首先從有rsrc節(jié)的pe文件里獲取.rsrc節(jié)的數(shù)據(jù)和rsrc節(jié)頭的VirtualSize,然后在沒(méi)有rsrc節(jié)的pe文件添加一個(gè)rsrc節(jié)頭和在rsrc節(jié)頭中指定的磁盤(pán)位置寫(xiě)入rsrc數(shù)據(jù),其他節(jié)頭的磁盤(pán)位置的信息和VirtualAddress都重新計(jì)算無(wú)誤,OptionalHeader header中的IMAGE_DATA_DIRECTORY_ARRAY DataDirArray數(shù)組也重新計(jì)算了,遇到一個(gè)問(wèn)題只有當(dāng)新增的rsrc節(jié)頭中的VirtualAddress和原本就有rsrc節(jié)頭的pe文件中的rsrc節(jié)頭中的VirtualAddress保持一樣,才能在文件的屬性中查看到版本信息和圖標(biāo)信息等信息,這是什么原因?qū)е碌陌。?/p>

收藏
2條回答
凨少 2023-3-24

pe文件中新增的rsrc節(jié)頭的VirtualAddress需要與原rsrc節(jié)頭在pe文件中的VirtualAddress相同的原因是windows操作系統(tǒng)使用rsrc節(jié)頭虛擬地址來(lái)定位資源數(shù)據(jù)。如果 VirtualAddress 不同,操作系統(tǒng)將無(wú)法定位資源數(shù)據(jù),版本信息和圖標(biāo)信息將不會(huì)顯示在文件屬性中。

回復(fù)
Xiaofeixiang 2023-4-3

在你的修改中,你將原有PE文件中的.rsrc節(jié)數(shù)據(jù)添加到了一個(gè)沒(méi)有.rsrc節(jié)的PE文件中,并且重新計(jì)算了各個(gè)節(jié)頭的信息以及OptionalHeader中的IMAGE_DATA_DIRECTORY_ARRAY DataDirArray數(shù)組。

 

你遇到的問(wèn)題可能是由于以下原因:

 

1.新增的.rsrc節(jié)頭中的VirtualAddress與原有PE文件中的.rsrc節(jié)頭中的VirtualAddress不一致,導(dǎo)致資源數(shù)據(jù)無(wú)法正確加載。由于資源目錄表中存儲(chǔ)了資源項(xiàng)的相對(duì)偏移,如果新增的.rsrc節(jié)的VirtualAddress改變了,那么相對(duì)偏移也會(huì)改變,就會(huì)導(dǎo)致資源數(shù)據(jù)無(wú)法正確加載。

 

2.資源目錄表的結(jié)構(gòu)被修改了。如果你新增的.rsrc節(jié)數(shù)據(jù)中的資源目錄表結(jié)構(gòu)與原有PE文件中的不一致,那么就會(huì)導(dǎo)致資源數(shù)據(jù)無(wú)法正確加載。資源目錄表結(jié)構(gòu)包括了資源目錄表的數(shù)量、資源項(xiàng)的數(shù)量等等。

 

所以,你需要確保新增的.rsrc節(jié)頭中的VirtualAddress和原有PE文件中的.rsrc節(jié)頭中的VirtualAddress保持一致,并且保證資源目錄表的結(jié)構(gòu)不被修改。你可以使用PE文件編輯器,例如PE Explorer等工具來(lái)查看和編輯PE文件中的.rsrc節(jié)數(shù)據(jù),確保你的修改是正確的。

回復(fù)
  參與學(xué)習(xí)     人
  提問(wèn)次數(shù)     100 個(gè)
我的問(wèn)答 領(lǐng)取收益
0
我的提問(wèn)
0
我的回答
0
學(xué)習(xí)收益