修改程序入口地址来添加提示框

我们要添加的代码段为:

#include<windows.h>
int main() {
	MessageBox(0,0,0,0);

	return 0;
}

 功能类似于:

 窗口弹出后继续执行程序其他的功能。在已经编译过的exe直接加入上述代码是不可能的,所以我们通过UltraEdit文本编辑二进制代码加入该功能。并且 不影响原程序的运行,代码可添加到节数据之前的空白区。

分析可知,1000H是节数据开始的地方:在此之前找一片空区域添加,

 Messagebox函数有四个参数,先进行压栈操作,

6A 00        push 0

6A 00        push 0

6A 00        push 0

6A 00        push 0

E8 00        CALL  ...

E9 00         JMP  ...

 call指令(E8)用于调用user32.dll中的窗口函数,jmp指令(E9)用于跳回到程序入口地址(因为要在开头执行我们的代码段已经修改了程序入口地址)。

6A 00 6A 00 6A 00 6A 00 
E8 8D F9 94 77 
E9 8A 33 04 00

E8 后面跟的不是跳转地址,其值为:

要跳转的地址-E8指令所在的内存地址-5

E9 同理;

用OD打开程序,给函数添加Messagebox断点,发现断在77D507EA,即我们要跳转的地址

 我们将代码添加在00000E50H:E8所在的地址为400E58(400000+E58),400000是内存中的偏移。

 77D507EA-400E58-5=7794F98D

 

 程序入口地址是004441EC,E9所在的地址为400E5D.

4441EC-400E5D-5=4338A

此时代码写入完成,开始修改程序入口地址为我们添加代码的地址,随后正常跳转 ,程序入口地址存储在扩展PE头中第16位,占4字节。

 填入E50,此时我们的任务已经完成,程序另存为creakme_修改入口.exe,打开程序:

 程序已经正常运行:

至此,入口提示框添加完成。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值