初识PE结构:如何对程序加料

我们如果想对已有的程序做手脚,就要在原有的结构中添加自己的代码,这样当用户在打开这个做过手脚的程序时就会自动运行其中我们加进去的代码,至于这些代码能做什么,你懂得。这个实验的目的是在一个EXE可执行文件中手动修改其中的一些地方,使它在被运行时先运行一个MessageBox的提示框再运行程序的主页面。

写一个MessageBox显示的小程序。将其在OD中运行。
在编辑框中输入bp MessageBoxA,回车下断点,在断点查看对话框就能看到刚才下的断点。



找到MessageBox的函数地址,按运行也就是那个小三角符号。找到 MessageBox的地址75E5FD1E

这里会用到三个硬编码:E8,E9,6A,E8对应汇编CALL指令,E9对应汇编JMP指令,6A对应汇编PUSH指令。
E8 X
这里的X并不是真正要跳转的地址,真正要跳转的地址还要经过计算可得。
真正要跳转的地址=E8的地址+5+X;
X=真正要跳转的地址 - E8的地址-5;
计算出X后注意大小端排列。如果得到的值为123456时,指令应该写成E8 563412
E9 X的计算类似

看代码区的节能不能容纳18个字节
使用PEtools查看目标exe文件
2400h-221Ch>18够用
文件中的偏移是400,说明2400到之后的400字节都是空的字节,我们可以在里面添加我们想加的代码。

使用PEtool查看目标exe文件,这里我们查看的是PEtool.exe(也就是查看它自己 ^ ^)

从对齐后长度1c000h位置开始找空白的区间。添加6A006A006A006A00E800000000E90000

E8的地址为1CAA8,E9的地址为1CAAD;
由于这个exe文件的imageBase为400000h,所以它们加载到内存后的 实际地址分别为41CAA8,41CAAD

MessageBox的地址是 75E5FD1E

E8后面跟的值X=75E5FD1E-41CAA8-5=75A43271
所以E8后面跟的值为 75A43271,在ultraEdit中要注意排列: 7132A475

而E9要跳到OEP,程序真正的入口地址。

真正要跳转的地址=400000+193BE = X+E9的地址+5
E9后面跟的值 X=4193BE-E9的地址-5=4193BE-41CAAD-5=FFFFC90C
所以E9后面跟的值为 FFFFC90C,在ultraEdit中的排列: 0CC9FFFF

然后修改程序入口OEP的地址,由PEtool可以看到当前为193BE 改成E8的相对偏移地址1CAA0






保存即可
双击刚刚生成的文件,就会发现先弹出一个MessageBox的提示框

点击确定之后才进入到程序的正常页面。

这样我们对这个程序“加料”就完成了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值