PE文件(五)代码节空白区添加作业

一.手动在代码空白区添加代码

我们以notepad为例

注意!!注意!!注意!!一定要用xp及xp一下的系统进行实践,否则会因为系统原因导致我们无法正常运行修改以后的程序!!本人痛的教训,花了几天都不成功一直以为是自己的问题

MessageBoxA内存地址为0x77D507EA

程序相对内存入口地址0x0000739D

文件对齐粒度 0x00000200

内存对齐粒度 0x00001000

.text节起始位置0x00000400     

.text数据大小是0x00007748

.text节结束位置0x00000400   + 0x00007748= 0x00007B48

.data节起始位置0x00007C00

两节中间空白区大小 0x00007C00- 0x00007B48=  0XB8 > 0x12(要添加的硬编码的大小)

我们通过010Editor可以清晰看到,确实有大片空白区

 我们将在0x00007B48处添加我们的代码

6A 00 6A 00 6A 00 6A 00 E8 00 00 00 00 E9 00 00 00 00

这是预备代码,现在计算MessageBoxA的相对地址

在此之前我们要计算下一指令在内存中的地址:

ImageBase = 0x01000000

.text节VirtualAddress =  0x00001000          

.text节的VirtualSize =  00007748 

因此我们添加代码在内存的位置是0x01000000 + 0x00001000  + 00007748 =  0x1008748

所以E8下一指令地址为0x1008748 + 0xD =  0x1008755

X = 0x77D507EA - 0x1008755 = 0x76D48095

在内存中 95 80 D4 76排列

现在我们E9后添加原虚拟内存中相对程序入口地址

E9指令下一条指令内存地址为:0x1008755 + 0x5 = 0X100875A

相对地址为:0x01000000 + 0x0000739D -  0X100875A = FFFFEC43

所以内存排布为 43 EC FF FF

如下图便是我们添加代码的最终版

现在我们修改原程序入口为我们添加代码的地址

添加代码虚拟内存相对地址0x00007B48 - 0x00000400 + 0x00001000 = 8748        

内存排布为 48 87

如下图便是我们修改入口的最终结果

修改完毕以后,我们打开notepad验证一下

成功了!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值