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
至此,扩大节已完成。 直接新建一个节更好,因为有时需要配置访问权限。
更方便二次开发的方法则是 dll 注入,例如在导入表插入自己的 dll,在启动时加载。不需要全部用汇编来实现自己想要的功能,也能更方便的调用 API。
另外可以适当的用 pe 编辑器简化手动扩容/新增节,或写个脚本自动化。手动改比较容易出错。 爱飞的猫 发表于 2022-12-4 11:52
直接新建一个节更好,因为有时需要配置访问权限。
更方便二次开发的方法则是 dll 注入,例如在导入表插入 ...
谢谢提醒{:1_919:},学习阶段,想熟悉一下底层的数据结构,就手动扩容了,下一次更新新增节:handshake 学习中,静等下集更精彩 感谢分享,收藏了慢慢学习{:301_1003:} 学习了,谢谢分享!
感谢分享,收藏了慢慢学习 32和64可以通用吧? 学习了,谢谢分享 感谢分享,很有用
页:
[1]
2