修改PE文件,在空白处添加代码(添加messagebox)#笔记

如标题,exe启动时添加messagebox。

思路:修改程序入口地址,改为调用messagebox地址,再jmp回去原来的程序入口地址。

需要注意的是,在文件中的地址和在内存中的地址是不一样的。

以dev c++为例,

Imagebase:100000         OEP:16D320

准备在第一个节的空白区添加。因为可写可读可执行

 messagebox调用,有四个参数。call 调用的硬编码E8,jmp 的硬编码为E9。push 的硬编码为6A

所以这个添加的代码雏形:6A 00 6A 00 6A 00 6A 00 E8 00 00 00 00 E9 00 00 00 00 (因为为测试messagebox所以参数为0,0,0,0)

在 400 ——16C800+400 之间的空白处添加

现在就是简单的换算,如果我要得到call的目的地址,即 764F1160,当前地址为 16CBC8

 那么E8 后的地址为 :764F1160 - [(16CBC8 + 5) - 400 + 1000](该地址在内存中的偏移) + 100000 = 76283993       小端序:93 39 28 76  则:E8 93 39 28 76

OEP(想jmp目的地址):16D320 在内存中 16D320  + 10000 = 26D320

jmp当前地址:(16CBCD  + 5)- 400 + 1000 + 10000 = 26D7D2

那么E9 后的地址为 :26D320 - 26D7D2 = 74E  小端序:4E FB FF FF 

则:E9 4E 07 00 00 

修改后:

 

 

 最后一步,修改OEP,将程序入口地址改为写入代码的地址.

在文件中地址 16CBC0  ,在内存中地址 16CBC0 - 400 + 1000 = 16D7C0

 保存即可。

本次操作需要注意一点,就是在文件中和在内存中的位置是不一样的。除了 sizeofheader 换算简单一点。其他地方的换算需要考虑每个节的文件偏移和内存偏移。

结果:

 先弹出这个界面在,在正常运行软件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值