今天的程序比较大,听说还是比较牛的程序,不过破解它的一个比较老的版本的。打开程序看看。
点击about 然后点enter registration code 输入name 以及密钥之后,会出现以下情况。

那我们先查看一下有没有加壳,发现是用vc6编写的,对我们来说比较熟悉~

那就先用OD加载进来

在编辑框里获取字符串,一般使用getwindowtext这个API函数进行获取,我们有两种方法,



3个断点
getwindowtextA就是以ascii码的形式获取,我们可以在每个命令上设置断点
还有一种方法 ctrl+n

还是一样三个断点,那我们可以运行起来,看看正在哪里断下,断下又有没有用

发现断下了,但并没有让我们输入什么,所以不要这个断点,去掉
一个一个试过去,终于能输入了

然后我们一直F8,看看有没有什么跳转的地方发现两个跳转


这两个跳转是检测是否有 没有填的框的 并没有什么卵用,我们放过它们。继续找,发现一个通向成功的跳转!


那我们会发现一个有趣的现象

两段代码竟然完全一样,我们重新载入程序,跟进去都看看

发现它把1mov给了al 可能就是成功的标志

那然后就可以继续F8了,既然找到了标志。

发现一个跳转直接跳出了成功的标志,我们当然不要它跳,改标志位看看先

修改了之后,成功了。。。。虽然成功了,但是发现了问题

竟然还是not been registered!!!看来还是不行啊
好了,我又来了。我们可以右键查找字符串,找到这个“this xoftspy license has not been registered”,双击进入

是上面 je 跳转 跳过来的

在验证的call前面加个断点,以防万一,在这段代码的开头也加个断点,然后重新载入
发现程序点一下about就触发了这个断点,我们可以F8单步走走看看。之前有加断点的call肯定有问题,我们可以F7进去看看


来到一个关键点,test al,al 下面有一个跳转,

跳转如果实现的话,bl的值就会变成1,那下面的al也会变成1,那么当程序返回的时候应该就是成功了;但是如果跳转未实现的话,就会经过jmp直接绕过了bl为1,把bl清零了。

意思就是al为1就可以 我们可以把这个代码 直接改为 mov al,1就OK了

改过之后就成功了,has been registered !