Example 2

运行

  1. 运行要破解的程序。
    在这里插入图片描述
  • 消息框显示两条信息:
    1. 删除所有Nags
    2. 查找registration code
      在这里插入图片描述
  • 蓝色文字要求使用SmartCheck注册。

分析

  1. 第一个目标使去掉Nag消息框,要去除消息框,只要操作调用消息框的函数部分即可,Visual Basic中调用消息框的函数为MSVBVM50.rtcMsgBox。
    在这里插入图片描述
  • 点击鼠标右键,Search for - All intermodular calls命令,将会列出程序中调用的API目录,选择Destination栏目,根据函数名称排序,共有4处调用要找的rtcMsgBox函数。
    在这里插入图片描述
  • 点击鼠标右键选择Set breakpoint on every call to rtcMsgBox菜单,在所有调用rtcMsgBox的代码处设置断点。
    在这里插入图片描述
  • 按下F9运行程序,程序运行到402CFE地址处停了下来,向上翻,可以看到消息框中显示的字符串,该部分就是程序开始运行时用来显示消息框的代码。
    在这里插入图片描述
  • 继续按F9运行程序,程序会弹出消息提示框,我们点击确定,程序会显出主界面,我们点击Nag?按钮,程序再次停在了00402CFE处,可以最初显示的消息框与按主画面中“Nag?"按钮显示的消息框有相同的运行代码。
  1. 打补丁
  • 在上述代码向上翻动滚动条,可以看到402C17地址处表示函数开始的栈帧的prologue,402CFE的rtcMsgBox函数调用代码也是属于其他函数内部的代码,所以如果上层函数无法调用,或直接返回,最终将不会调用rtcMsgBox函数。
    在这里插入图片描述
  • 首先我们需要查看402C17函数的参数个数,在此处下一个断点,使程序运行到此处,确认402C17函数的起始代码存储在栈中的返回地址(7401E5A9)。
    在这里插入图片描述
  • 进入返回地址所在区域,在CALL EAX处设置一个断点,按F9使程序运行到此处,观察EAX的值。
    在这里插入图片描述
  • EAX的值为402656,进入这个地址,可以看到7401E5A7最终调用的使00402C17这个地址处的函数,CALL EAX调用前后,栈地址变得了4个字节。
    在这里插入图片描述
  • 因此我们将下面这段代码修改为:
    在这里插入图片描述
    在这里插入图片描述
  • 至此就可以成功取出消息框。
  1. 查找注册码
    在这里插入图片描述
  • 随便输入内容,弹出对话框显示错误的注册码。在OllyDbg中检索错误的字符串,Search for - All referenced text strings。
    在这里插入图片描述
  • 查看00402A69处的代码,向上拖动滚动条,可以看到402A2A地址处有"I’mlena151",其下方的402A2F地址处使__vbaStrCmp()函数调用代码,__vbaStrCmp()函数使VB中比较字符串的函数,我们猜测应该使比较用户输入的字符串与"I’mlena151"字符串,因此注册码是"I’mlena151"。
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值