pe文件添加messagebox

本文详细介绍了如何向PE可执行文件中插入恶意shellcode,以实现程序运行时弹出MessageBox。步骤包括获取call和jump指令的编码、shellcode、 MessageBox函数地址,以及在代码区空白区域填充shellcode。通过计算E8和E9后的数值,确保程序能在弹框后返回正常入口点。最后,修改原程序入口点并保存,使得程序运行时能显示弹窗。
摘要由CSDN通过智能技术生成

最近在看滴水的逆向视频,看到如何向pe文件中添加messagebox,主要添加过程如下:

说明:
给小bug刷钻.exe程序添加一个messagebox的弹窗

1、添加思路

为了实现给目标程序添加弹框,由于程序在运行时都是二进制形式,所以先要获取添加的shellcode的编码,然后在程序的可执行区域加入恶意代码,此处的可执行区域主要是指代码区的空白区。(只有代码区才有可有可执行权限,空白区主要是指VirtualAddress补齐后的区域,如下图标注区域)


添加完后,需要执行call函数调佣恶意代码的位置,执行完毕后jump到oep,即回到程序的入口点,保证程序在弹框结束后,可以正常运行。

2、准备工作

模型如下:

恶意代码+E8 00 00 00 00+E9 00 00 00 00

(1)获取call函数 jump函数的硬编码

通过定义一个call函数,查看其返汇编代码

真正要跳转的地址=E8当前指令的下一行代码+x

由于e8当前指令占用为5位,所以该公式可变形为

真正要跳转的地址=E8当前指令+5 +x

从而可获取x数值

jump指令同样可以计算得到

(2)获取恶意代码指令shellcode

MessageBox(0,0,0,0)的shellcode

6A 00 6A 00 6A 00 6A 00

(3)获取MssageBox的函数地址

通过在od中执行bp MessageBoxA ,对MessageBox下断点,找到MessageBoxA 函数的入口通过查找发现调用该函数的位置为7754D710

(4)代码区中添加代码

查找代码区的空白区域,通过petool工具查看发现,该程序有4个节,将数据写入到.text中,因为该区域Characteristics 参数为60000020,具有执行代码权限

根据SizeOfRawData PointerToRawData两个参数可以确定,.txt节的结束位置为87000,即下一个节的开始位置

 

在空白区域进行shellcode填充 ,本次在86220开始处进行填充,首先填充shellcode

 

计算e8后面的数值,即call函数地址,利用如下公式计算

x=7754D710-(400000+8622D)=770C74E3

说明:此处需要注意文件对齐,我们要计算的是在内存中的偏移位置,由于我们的测试程序文件对齐和内存对齐均相同为1000,所以在实际内存中的偏移位置也相同;86222需要加上可选文件头中偏移地址400000即内存中地址;

计算e9后面的数值,e9即跳转到原来的入口点,即00065AF8

同样利用公式计算如下:
x=(00065AF8+400000)-(86232+400000)=FFFDF8C6

最终修改结果如下:

最后修改原来的函数入口点oep 00065AF8 为现在的地址86220,原来的oep在可选头里,如下图

修改完成后保存即可,再次打开该程序弹出messagebox窗口

点击确定后即可打开正常的程序

3、小结

简单总结下,首先应该转备好需要添加的恶意代码,并且转换为相应的机器码;

然后确定源程序中哪部分为可执行的代码节,找到其中的空白代码,进行shellcode添加;

确定E8 E9后面的值,在进行地址计算时应该注意不是文件中的地址,要转换为运行中的地址,所以要加上IMAGE BASE的地址;

在查找节的起始位置时,要注意SizeOfRawData、PointerToRawData,即文件对齐后的大小以及文件中的偏移地址,节的结束位置即下一个节的开始位置,应该是SizeOfRawData加上PointerToRawData。

还应该注意文件对齐,我们在计算E8或E9后面的数值时,实际计算的是在内存中偏移位置,所以应该注意文件偏移与内存偏移是否相同。最后,利用该种方法修改,由于软件在不同的机器上运行,地址是不同的,所以改好的文件是无法在其他机器正常运行的,只能在当前机器上运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值