用OllyDbg插入代码弹出对话框

本文介绍如何使用OllyDbg在代码中插入对话框显示关键信息的方法,并解决了因ASLR导致的MessageBox调用失败问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写过一篇用OllyDbg做破解, 但是为了获得信息,需要通过OllyDbg调试,在适当的地方设断点,并查看内存,非常麻烦,不要说不懂的人,就算是我刚做过,没过几个礼拜就忘的差不多了。所以如果这个工具要经常性使用,最好还是能做成一个工具:比如能弹出一个对话框显示需要的信息。 

这次花了两个晚上搜索、研究、实践了一下,终于搞了出来。

首先,在网上找到一篇非常靠谱的文章,正是exactly我想要的:How to inject code into an exe file, 照其步骤走一遍,弹出一个对话框应该不是问题了。其基本做法是:

  1. 在空白代码段(操作码为00, 一般在最后)插入对MessageBoxA的调用 - 可通过双击指令逐行修改添加。
  2. 在需要的信息产生之后的某处,加一行JMP到MessageBoxA调用的地方,当然,MessageBoxA传入的参数是重要信息的地址
  3. 因为在2出插入代码是实际上是覆盖了原有代码,一般是将被覆盖的代码放到MessageBoxA调用之后,并在最后加一个JMP,跳回其接下来指令的地址。

下面是几个值得注意/记录的地方:

  • 传给MessageBoxA的message地址,能不用常量地址就尽量不用,因为其可能是动态算出,在不同的session值是不一样的 - 比如这里,授权码的地址是在寄存器EBX中,那么直接传EBX即可
  • 如何保存修改过的exe? RMB->Edit->Select all; RMB->Edit->Copy to executable; In the new window, RMB->save file
  • 有时打开后代码格式不是很正常,比如明明是正常的指令,却为解析为数据,可以RMB->Analysis->Remove analysis from module
  • 右键jmp指令可以Follow到目标地址
  • exe的断点、注释等信息存在:OllyDbg2.1\udd\*.udd文件中

 

修改代码后直接debug,发现信息是在弹出对话框中显示了出来。但是,当我保存后执行修改过的exe,却怎么也无法工作。Debug进去看了一下,是call MessageBoxA这个函数时出的错,事实上,这个函数调用是针对某个函数地址的,比如:CALL 754DE055, 但检查发现这个地址却是错误的,并不对应到MessageBoxA的加载地址。

为什么?

一番搜索与思考后,觉得这是ASLR的问题,ASLR=Addresss Space Layout Randomization, 他是Windows vista依赖引入的一个新的机制,其使得系统dll在进程中加载的基地址不再是固定的,从而防止用户恶意在exe中插入对windows api的调用 - 而它也确实成功了,对于windows xp与windows 2003, 没有ASLR这个特性,自然也不会有这个问题。

我用的是Windows7的系统,怎么办? 禁掉ASLR!

你需要下载一个叫做Enhanced Mitigation Experience Toolkit(EMET)的工具,安装并运行:

如图所示把ASLR disable掉并重启即可。

 

然后,插入MessageBoxA并保存,然后运行破解后的代码,一切ok!

 

转载于:https://www.cnblogs.com/baiyanhuang/archive/2012/08/07/2627347.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值