今天的程序比较大,听说还是比较牛的程序,不过破解它的一个比较老的版本的。打开程序看看。
点击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 !