用OllyDbg反汇编静态分析破解VB程序

注:本文仅做破解技术学习交流之用,请勿用于商业用途!使用本文所介绍的技术手段产生任何法律后果由使用者承担,与本文作者无关!另:请大家多多支持国产共享软件,支持正版!——Candura

  关于用VB编写的程序的破解,网上搜索到的最常用的一种解决方案是使用“OllyDbg”给“MSVBVM60.dll”文件内几个常用的比较函数(比如“vbaStrCmp”“vbaStrComp”)下断点来进行动态分析,从而找出注册码。或者用“SmartCheck”来跟踪出错找出注册码,这些基本上都是属于动态分析的一个范畴。

  但是我本人比较懒,而且由于本人技术实在是有限,今天要破解的目标程序(为保护软件作者在此隐去所破解的软件名称,一律用“目标程序”代替,下同)动态追踪怎么也追不到注册码,所以只好用静态分析的方式来进行暴力破解了~

  今天要用到的软件主要是:PEiD(查壳)、OllyDbg(进行反汇编静态分析)、GetVBRes(修改VB资源的小工具)。

  首先用“PEiD”来对目标程序查壳(如下图),很好,没有加什么壳,省掉了脱壳的步骤。

  接下来先运行软件随便输入一个错误的注册码,唔,当然是不能注册的,弹出来一个对话框说“对不起,您输入的注册码有误!”

  唔,就根据这句提示来找跳转好了,进入“OllyDbg”载入目标程序,用“Ultra String Reference”插件来检索注册错误的提示,结果不管是用ASCII还是Unicode,都检索不到,不仅检索不到,更是连一个中文都没看到。

  好吧,面对这个问题就该轮到“GetVBRes”软件出场了,让你丫的找不到中文,我就把注册错误的提示信息改成英文,看你还搜不到!用“GetVBRes”载入目标程序,唔,这下找到注册失败的提示了,把注册失败的提示替换成英文字符(我把它改成了“CanduraCandura”,字符长度刚好跟原来一样,不过这不是必须的,因为软件会自动帮你补空格到原来长度)。

  修改完成之后再输入错误的注册码就提示我刚才替换的字符串了。

  现在替换完了重新用“OllyDbg”来载入目标程序查找,好家伙,竟然找到了四个地方!以前我破解过这款软件的1.01版本,只有一个地方进行注册码验证,果然作者更新版本的时候,在增加功能的同时也增加了一些防破解的处理。

  那么现在先从找到的第一个地方开始吧,在第一个“canduracandura”那一行按回车键进入它所在的汇编源码当中,我们来到了地址“00435915”,然后一边观察信息窗口一边按方向键“↑”来找关键跳转。没按几下,到达地址“004358AE”的时候信息窗口给出提示“跳转来自 00433B6E”,这就是我们要找的关键跳转了!

  按下“Ctrl+G”输入刚才找到的“00433B6E”地址之后确定,代码来到该地址的位置,发现它是使用“je”来进行跳转的。

  在这里先普及一下暴力破解时候用到的一些汇编小常识,汇编代码里面用来做跳转的一般有“je/jne、jz/jnz、jmp”等等,“je”的作用是上一条汇编指令执行完后标志位“ZF”如果为1则进行跳转,“jne”的作用是“ZF”为0则进行跳转,“jz/jnz”的作用基本相同。一般情况下他们的上一条语句是做减法或者是做cmp(比较命令)操作,这个很好理解,通过比较判断输入的注册码是否正确,如果正确则跳转到成功注册,如果错误则跳转到注册失败。

  在这个程序的例子中,我们通过静态分析发现它用“je”来进行跳转,那么我们可以理解为如果输入错误的注册码就跳转到注册失败。这样理解清楚了之后就好办了,只要把“je”改成“jne”,变成如果输入错误的注册码就不跳转到注册失败,那么既然无法跳转到注册失败,最后当然是能够跳转到注册成功的地方咯。

  说改就改,双击刚才找到的关键跳转那一行,把“je”改成“jne”之后回车,会发现代码并不是变成了“jne”而是变成了“jnz”,这刚好侧面印证了“je/jne”和“jz/jnz”在一定条件下是通用的。修改好了之后如下图。

  当然光修改这里还不行,忘了我们之前是搜索到了四个“canduracandura”么,要把那四个找到的地方都用这种方法找到关键跳转来进行修改。全部修改完成后,在汇编代码部分那里点击鼠标右键选择“复制到可执行文件”→“所有修改”,把我们做好修改的程序保存起来。运行新修改好的程序再进行注册看看,还是输入错误的注册码,这下能成功注册了!

  而且注册完成之后那个输入框自动会显示正确的注册码,所以之前也懒得动态追踪注册码算法来自己计算注册码了,直接暴力破解搞定多好~试一下原本注册之前不能用功能,现在都能一一使用了,破解完成!

  为了以后使用方便,再用制作补丁的软件来制作生成一个破解补丁,整个破解过程就圆满结束了~

  最后再要重新郑重声明一下,本文仅做技术的学习交流,不承担任何由此项技术造成的任何法律问题!然后还是希望大家多多支持正版,特别是国产的一些共享软件。这些软件给我们带来了很多方便,作者编写和维护很艰辛,而且很多很好用的小软件并没有漫天要价,而是那么几块十几块的价格,如果试用觉得合适并且想长期使用,并且口袋能够支持的话,最好还是尽量购买正版支持正版吧~

文章目录
|