Windows PE 文件 ---------------资源节的解刨

本文探讨了如何在PE文件中添加和修改资源节数据,包括理解PE文件的结构,如IMAGE_DOS_HEADER、IMAGE_NT_HEADERS和IMAGE_SECTION_HEADER。通过调整资源节头部信息并添加资源数据,可以在原有PE文件中添加资源,同时确保文件结构的完整性和正确性。
摘要由CSDN通过智能技术生成

时间总是太匆忙,项目总是太多,一直看CSDN,却从来没有写过一篇像样的文章,今天因为一个项目要自定义PE的资源节,我们要改变一个PE文件的已有资源节数据,在里面添加任何资源,这样不得不改变原来PE文件中关于资源节的数据。好了,废话少说,下面开始转入正题!

这里只讨论PE文件的资源节,其他格式大家自己去研究吧。PE文件的格式,网上多的是,这些知识简单的T一下:

------------------------------------IMAGE DOS  HEADER---------------------------------------------

------------------------------------IMAGE NT HEADER-------------------------------------------

------------------------------------SECTION HEADER--------------------------------------------

------------------------------------SECTION DATA------------------------------------------------

------------------------------------SECTION DATA------------------------------------------------

------------------------------------SECTION DATA------------------------------------------------

上图有点丑陋,但是简单的说明了一个PE文件的组成部分,PE文件的各个数据块(上面所画的一行)之间是紧密排列的,当然每个数据块必须对齐。


1IMAGE DOS HEADER

这是一个PE文件的第一个头部,比较重要是 e_magic 和 e_lfanew。如果是一个PE文件的话,e_magic 的值为 0x4D5A,对应的ASCII值为"MZ",e_lfanew 是 IMAGE NT HEADER的OFFSET。


2  IMAGE NT HEADER

IMAGE_NT_HEADERS 是PE文件的核心头部,里面有很多重要的信息,包括我们讲的RS(资源)文件。Signature是NT文件的签名,值为0X00005045.所有可以通过DOS HEADER 的 e_magic 和 NT_HEADER 的Signature来判断一个合法的PE文件。

         

IMAGE_FILE_HEADER 和我们本文讲的关系不大,这里就略去。稍微有关系的是NumberOfSections,这是用来表示PE文件有几个Sections。

IMAGE_OPTIONAL_HEADER 中我们感兴趣的是SizeofInitializeData这个只代表已经初始化数据的大小,这里面如果你新加入了一个资源,这个大小是会跟着变化的。


下面就是IMAGE_DATA_DIRECTORY这个数组,对于资源 他对应的数组索引是2,当新加入一个资源的时候,Size这个成员变量也会变化。VirtualAddress代表的资源节相对于文件头的RVA,不懂RVA 去看看别的PE文章,这里就不解释了,一般加入新的资源,这个值不需要改变。


据我观察,资源节一般都加在PE文件的末尾,所以当需要再添加资源数据的时候,只需要改变资源节的头,指明新加资源节的ID号,大小,偏移,然后在指定的偏移处加上对应的资源数据,后续用0进行s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值