失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【exe加壳:修改可执行文件的PE头 增加一节 修改程序入口地址为该节】

【exe加壳:修改可执行文件的PE头 增加一节 修改程序入口地址为该节】

时间:2020-07-21 02:27:20

相关推荐

【exe加壳:修改可执行文件的PE头 增加一节 修改程序入口地址为该节】

一:PE中增加节

使用工具为:LordPE、010Editor、CFF、OD

List item

先用 010Editor 查看节表部分是否足够长度加入新的节表目录

从图中看出,节表后面还有空余地方,可存放新增目录项

用 LordPE 查看PE头部信息,增加一节,在 setions 中修改新增节表的属性

原始PE头信息:可得原始节表中有9项

修改节表项数为10节

然后点击Setions按钮,在里面修改新增节的相关属性(这里的相关原理有兴趣可自行了解)

进去后可看见最后一节表项名字和其他相关数据均为 0 ;

右键进入修改,修改项目为 Flags

修改后记得Save

用 CFF 修改新增节的节名,和相关的偏移,偏移量的大小需要参照PE头中规定的内存对齐和文件对齐(节名等信息也可以在LordPE中的Setions修改,这里使用CFF软件,界面更清晰)

·这里定义新增的节名为 .liang

·节大小为0x200(为了方便展示,0x两百刚刚好为文件的最小对其,内存的对其为0x1000,对其信息在PE头信息的SectionsAlignment 和 FileAlignment 中)

·根据前面的信息可得.liang节的相关偏移量:

例如:

.reloc节大小为65C ,虚拟地址:22000

该节最后偏移地址为 22000 + 65C = 2265C

内存对其为1000,得:最终.liang节开始地址为23000(也是.reloc 的最后位置)

·其他数据同理可的

从上一步得:新增节的大小为0x200,则需要用010Editor 在文件的末尾加0x200的0字符(节表相当于目录,文件末尾的添加内容相当于目录对应的内容)

举例:

添加节表项内容,相当于在书本目录最后,增加了书本中的目录项,但是真实书本的最后,却还没有增页。

这一步我们要做的就是在书本最后增加页

使用工具 010Editor:

上图得文件末尾地址为:C400

具体步骤:

编辑 -> 插入 -> 插入字节(这里选择填入全为 0 的数据)

成功插入0x200个 0的数据

用 LordPE 修改映像大小(SizeofImage),手动修改,原大小+新增0x200;

(自动修改,在LordPE中,点击Setions,如果新增节中的地址偏移已经算好并且填入,退出Sections时,会自动修改的映像大小)

原映像大小为0x23000,新增后,大小为0x23200

保存并且退出,至此,PE增加节部分的工作已经完成。

二:修改程序入口地址

此程序为开启了随机地址的模式;

(固定地址模式的修改较为简单,可自行推导)

LordPE 查看原程序的入口地址(OI)

打开OD 找到原程序入口地址(OE)

在OD中拉到最后,找到一连串的ADD指令,因为填充的0x200个 0,汇编指令机器码刚好对应于ADD;

OD中第一条ADD指令地址 (A1),A1 - OE = E1

在LordPE中把原入口地址修改为:OI + E1

注意上述地址的符号

保存并退出后,可再次打开 .exe,发现程序运行了一会儿后,出现错误

三:在新节中把控制权交回给原程序

分析第二部分最后的原因得:程序打开后,运行了一堆的ADD指令后,不再有其他的操作,导致程序崩溃;

使用OD:

我们可以修改第一条ADD指令,使用 jmp 跳转指令直接跳转到原程序入口点(OE)

大功告成,可在新增节中增加很多其他操作,此部分即为程序的壳。

后续更新…

如果觉得《【exe加壳:修改可执行文件的PE头 增加一节 修改程序入口地址为该节】》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。