(简称逆向工程核心原理第十七章)
EXE形式的.reloc节区对运行没什么问题,对DLL/SYS比较重要
删除.reloc节区
理一下步骤
- 把.reloc节区头全部变0(不能删,我就在这卡了一会)
- 删除.reloc节区
- 修改文件头的Number of Sections
- 修改可选头的Size of Image
1. 删除.reloc节区头
这片区域变0,且注意一下节区的文件偏移地址
2. 删除.reloc节区
跳转到C000直接删到底
3. 修改IMAGE_FILE_HEADER
将此值修改成4,因为要减少一个节区
4. 修改IMAGE_OPTION_HEADER
减少了那么多东西,这里的内存映像也会减少,之前的图可得知.reloc的内存映像为E40,这里将根据Section Alignment扩展为1000,所以减1000
选中位置改成 00 00 01 00
(于是就全部删完了,程序能正常运行就代表删成功了,这里我就因为删除了节区头卡住了一会)
添加.P.Z节区
1. 添加.P.Z节区头
.P节区头
Name我观察了一下其他节区头,好像都是8个字节,我这边填完就直接前八个字节都当Name用
再后4个字节是内存大小,我直接填了10,根据Section Alignment会扩展成1000
于是RVA也就是VirtualSize我往后顺了1000,根据观察.rsrc到.reloc的区别,填了11000
磁盘文件大小填了10的大小,根据File Alignment会变成200
RAW就在文件结尾D000
再后面就是空了12个字节的0
最后是节区属性,还没细究直接复制了.text的属性
再后面就是.Z节区头,记录下不一样的
RVA又往后顺,变成12000
本来应该File Alignment扩展成200,但我这直接往后顺了10,RA2变成D010也没事(算个小坑?)
(刚刚实验了一下填成200也可以,这样也可以需要注意的就是大小填多少,就会读取指定地址的多少个地址)
2. 添加.P.Z数据
直接加了20h的数据,可能加200h更正式点(其实也是现在写才注意到)
(注意在Size of Raw Date那填了多少,就会在指定偏移地址读多少到节区)
3. 修改IMAGE_FILE_HEADER
老地方,直接改成7
4. 修改IMAGE_OPTION_HEADER
还是老地方,由于Section Alignment,加了两个节区,所以加2000变成13000
坚持就是胜利!
程序解析无误且能运行
About this Post
This post is written by P.Z, licensed under CC BY-NC 4.0.