使用OllyDbg从零开始Cracking 第二十七章-Visual Basic程序的破解.doc

使用OllyDbg从零开始Cracking 第二十七章-Visual Basic程序的破解.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用OllyDbg从零开始Cracking 第二十七章-Visual Basic程序的破解

第二十七章-Visual Basic程序的破解-Part2 Visual Basic程序破解续 本章我们继续讨论VB应用程序破解的话题,上一章我们解决的是一个带NAG窗口的CrackMe。我们是用那个patch过的OD来弄的,本章我们也会用到,但是本章我们还会介绍另一种更加简便,更加省时的方法。首先我们还是用那个patch过的OD来分析,弄清楚了具体原理以后,我们再来介绍那种简便的方法。 本章我们实验的对象名称叫做killme,这个程序启动的时候会弹出一个烦人的NAG窗口,我们需要想办法把它剔除掉。 我们直接运行起来的话,可以看到弹出一个NAG窗口。 我们可以看到Continue按钮是灰色的(不可用),当定时器由5减少到0后,Continue按钮就被激活了,我们单击Continue按钮。 NAG关闭了,并且弹出主程序窗口,我们用OD加载该程序。 我们按F9键运行起来。 定时器时间到了后,Continue按钮就被激活了。 我们可以想象一下,NAG窗口关闭后,代码中应该会有一个无条件跳转到主窗口代码执行,所以我们给代码段设置内存访问断点(该内存访问断点实际上只是内存执行断点),接着单击Continue按钮。 单击Continue按钮后,我们断在了这里。 我们可以看到404B60处JMP指令会跳转到40D090地址处开始执行,也就是说主窗口程序实际上是从40D090处开始执行的,这里说主窗口程序可能不太准确,因为我们可以看到这里有好几处JMP分支会跳转到程序的不同部分执行。我们给这几处JMP指令分别设置断点,然后来看看每个分支跳转分别在什么情况下被触发。 我们重新启动该程序。 刚刚我们看到了单击NAG窗口上的Continue按钮后,会执行JMP 40D090这个分支。现在我们重新启动程序后,断在了JMP 40D250这个分支处。NAG窗口还没有显示。我们继续运行起来。 我们可以看到断在了JMP 40D4F0这个分支处。这个时候NVG窗口已经显示出来了,上面显示了数字5。 我们继续运行。 又断在了JMP 40D4F0这个分支处。这个时候NVG窗口上的数字变为了4。我们会发现JMP 40D4F0这个分支一共会断下来5次。也就是说,这个分支过程与定时器相关。 让我们来跟进到这个分支中一探究竟。 没看出什么特别的地方,我们继续按F8键跟踪。 我们跟到了一处条件跳转JE 40D64F处。我们来分析一下看看这个条件跳转是不是决定定时器停止并激活Continue按钮的关键跳转。 上面是一个浮点比较指令,由于上下文的线索并不太多,所以我们暂时还看不出它的作用是什么。我们给这个JE 40D64F设置一个断点,接着运行起来。 断在了JE 40D64F这个分支处,并且该跳转将成立,我们多运行几次会发现,计时器减至0之前这个跳转一直都是成立的,只有当定时器显示为0时,该跳转才不成立。所以我们可以得知,该条件跳转是用来判断定时器是否为0的。我们将这一行NOP掉看看会发生什么。 好了,已经NOP掉了,这样这里就不会跳转到40D64F处了,我们运行起来。 我们可以看到,定时器并没有减至0,而Continue按钮已经被激活了。所以我们对于该条件跳转是用来判断定时器是否为0的假设是成立的。好了,现在我们这个NAG窗口关闭,当当前这个函数返回到VB的DLL中时,那么该NAG窗口将继续显示,所以我们需要定位该函数何时返回到VB的模块中,定位到返回指令后,我们可以将返回指令指定返回到显示主窗口程序的分支40D090即可,这样NAG窗口就会主动关闭而不需要人为的单击Continue按钮了。 现在我们重新启动程序。 我们来到刚刚NOP掉的那一行。 我们删掉之前设置的所有断点,接着给TEST AH,40这一行设置一个断点,运行起来。 断了下来,我们按F8键往下跟踪,看看哪里会返回到VB的DLL中,返回到了VB的DLL中的话程序就会运行起来。这样NAG窗口就会显示出来并等待我们按Continue或者Exit键。 我们到达了40D713处的RETN指令处,但是我们会发现该处会返回到紧接着的下一行40D714处,并不是返回到VB的DLL中,所以我们继续跟踪。 我们跟踪到了40D730处的RETN 4指令处,从解释窗口中我们可以看出来这里将返回到MSVBVM60.DLL中。接着程序将运行起来了。NAG窗口将继续显示,为了剔除掉NAG窗口,这里我们可以尝试将该RETN 4修改为JMP指令,让其直接跳转到显示主窗口的代码处(40D090)。还有一点需要注意,这里RETN 4占3个字节,但是JMP 40D090占5个字节。我们还可以注意到40D738起始处有几个字节的NOP空间可以利用。所以我们可以先跳转到40D739处。 接着我们在40D739写入J

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档