首页
社区
课程
招聘
添加.rsrc节数据

咨询个技术问题,功能目的是从一个pe文件获取rsrc节数据,然后把这个获取到的数据添加到一个没有rsrc节的pe文件里,我是这样修改的,首先从有rsrc节的pe文件里获取.rsrc节的数据和rsrc节头的VirtualSize,然后在没有rsrc节的pe文件添加一个rsrc节头和在rsrc节头中指定的磁盘位置写入rsrc数据,其他节头的磁盘位置的信息和VirtualAddress都重新计算无误,OptionalHeader header中的IMAGE_DATA_DIRECTORY_ARRAY DataDirArray数组也重新计算了,遇到一个问题只有当新增的rsrc节头中的VirtualAddress和原本就有rsrc节头的pe文件中的rsrc节头中的VirtualAddress保持一样,才能在文件的属性中查看到版本信息和图标信息等信息,这是什么原因导致的啊?

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

pe文件中新增的rsrc节头的VirtualAddress需要与原rsrc节头在pe文件中的VirtualAddress相同的原因是windows操作系统使用rsrc节头虚拟地址来定位资源数据。如果 VirtualAddress 不同,操作系统将无法定位资源数据,版本信息和图标信息将不会显示在文件属性中。

回复
Xiaofeixiang 2023-4-3

在你的修改中,你将原有PE文件中的.rsrc节数据添加到了一个没有.rsrc节的PE文件中,并且重新计算了各个节头的信息以及OptionalHeader中的IMAGE_DATA_DIRECTORY_ARRAY DataDirArray数组。

 

你遇到的问题可能是由于以下原因:

 

1.新增的.rsrc节头中的VirtualAddress与原有PE文件中的.rsrc节头中的VirtualAddress不一致,导致资源数据无法正确加载。由于资源目录表中存储了资源项的相对偏移,如果新增的.rsrc节的VirtualAddress改变了,那么相对偏移也会改变,就会导致资源数据无法正确加载。

 

2.资源目录表的结构被修改了。如果你新增的.rsrc节数据中的资源目录表结构与原有PE文件中的不一致,那么就会导致资源数据无法正确加载。资源目录表结构包括了资源目录表的数量、资源项的数量等等。

 

所以,你需要确保新增的.rsrc节头中的VirtualAddress和原有PE文件中的.rsrc节头中的VirtualAddress保持一致,并且保证资源目录表的结构不被修改。你可以使用PE文件编辑器,例如PE Explorer等工具来查看和编辑PE文件中的.rsrc节数据,确保你的修改是正确的。

回复