lisir1 发表于 2022-12-4 00:35

PE文件扩大节

本帖最后由 lisir1 于 2022-12-4 00:43 编辑

扩大节的目的
上一篇 修改程序入口来添加提示框 我们通过在节数据之前添加一段二进制代码实现弹窗功能,但是实际情况不只是添加一个没有句柄、内容的窗口,或者实现更多功能,所以我们需要自己添加空白区来容纳更多的代码。
扩大节的思路
即扩大节数据所占的内存空间,一个PE文件往往不只是一个节,如.text,.data,.rsrc,.reloc等…我们通常选择最后一个节来扩大,因为扩大前面的节需要把后面的数据后移,且要修改很多值,选择最后一个节就比较省事。
流程
1.确定要扩大空间的大小并添加

2.修改节表参数中的VirtualSize(节的实际大小)和SizeOfRawData(节在文件中对齐后的大小)其值为:

VirtualSize=SizeOfRawData=节内存对齐后的大小+要扩大的大小
3.修改SizeOfImage(内存中整个PE文件映射尺寸,在扩展PE头部分)的值

SizeOfImage=SizeOfImage+要扩大的大小
实现步骤
1.扩大1000h
https://img-blog.csdnimg.cn/199e1002dcd141158190fcf5ecf4ad01.png#pic_center


用UItraEdit打开文件,选中最后一个字节,右击插入十六进制(1000h=4096)

2.修改VirtualSize和SizeOfRawData
https://img-blog.csdnimg.cn/48660b617f574549bfff8ead9e34105a.png#pic_center


009968是VirtualSize,00A000是SizeOfRawData

https://img-blog.csdnimg.cn/d5c95ec261414adebd972f6ac3f09dab.png


则VirtualSize=SizeOfRawData=A000+1000=B000

https://img-blog.csdnimg.cn/1373cccc45294a59be0620cc704cc284.png#pic_center

3.修改SizeOfImage
https://img-blog.csdnimg.cn/ad1320be3d914b688645d5e3239d7c34.png#pic_center


6E00+1000=6F00

https://img-blog.csdnimg.cn/b4c5f3f32ffe4fe4a478b3f09cb2ed88.png


保存即可。

结果
https://img-blog.csdnimg.cn/433544e0644447789c96d29bb0faccee.png


至此,扩大节已完成。

爱飞的猫 发表于 2022-12-4 11:52

直接新建一个节更好,因为有时需要配置访问权限。
更方便二次开发的方法则是 dll 注入,例如在导入表插入自己的 dll,在启动时加载。不需要全部用汇编来实现自己想要的功能,也能更方便的调用 API。
另外可以适当的用 pe 编辑器简化手动扩容/新增节,或写个脚本自动化。手动改比较容易出错。

lisir1 发表于 2022-12-4 12:20

爱飞的猫 发表于 2022-12-4 11:52
直接新建一个节更好,因为有时需要配置访问权限。
更方便二次开发的方法则是 dll 注入,例如在导入表插入 ...

谢谢提醒{:1_919:},学习阶段,想熟悉一下底层的数据结构,就手动扩容了,下一次更新新增节:handshake

dujiu3611 发表于 2022-12-4 18:48

学习中,静等下集更精彩

lfordch 发表于 2022-12-4 22:45

感谢分享,收藏了慢慢学习{:301_1003:}

ttyylfd 发表于 2022-12-4 22:47

学习了,谢谢分享!

a8511816 发表于 2022-12-5 04:53


感谢分享,收藏了慢慢学习

luckysky 发表于 2022-12-5 07:09

32和64可以通用吧?

shinco20 发表于 2022-12-5 08:13

学习了,谢谢分享

hemingway111 发表于 2022-12-5 08:52

感谢分享,很有用
页: [1] 2
查看完整版本: PE文件扩大节