160个CrackMe 是新手学习逆向破解的CrackMe系列,我尝试一步步将160个CrackMe破解,帖子记录学习过程。
由于百度云现在分享不了这160个crackmed程序,说什么有敏感内容,如果需要,回复邮箱,我邮箱发过来。
这是我在看雪的第一个帖,若有错误,还望指正谢谢。
WinXP SP3 + 52专用OD + PEID
由于win7系统对于程序开启了地址随机化,会给分析带来不必要的麻烦,所以我的分析环境是WinXP SP3
想要分析一个程序,首先,需要运行一下程序,这一步很重要,它帮助我们理解作者的意图以及为我们提供一些有用的信息,比如字符串,弹窗等等。
运行程序,发现程序的注册分为两种方式,一种是Serial/Name,用户需要输入用户名和注册码,另外一种是Serial,用户只需输入一个注册码。
我们随便选一种方式,就比如选只要求用户输入注册码的看似稍简单的第二种方式:
随便输入一个注册码:999
点击Check it Baby!
弹出一个对话框提示:Try Again!
现在我们将其拖入exeinfo查壳,无壳,程序由Delphi写的。然后拖入ollydbg查看,搜索字符串Try Again!
这里面搜索出来两个Try Again!字符串,我们先查看第一个(我们的运气比较好,第一个Try Again!字符串就是我们要找的,第二种方式的Try Again!的字符串)
那么我们可以推测,第二个Try Again!字符串将会出现在第一种方式的报错当中
可以看到此处就是第二种注册方式的代码领空,这里面有注册成功后的congratz!和注册失败的Try Again!而且,这上面只有一个跳转,也就是jnz,
我们若是把jnz给nop掉,程序便可以直接走到注册成功的提示信息congratulatz!处,也出现了注册成功的提示信息,这样我们便实现了对程序的爆破。
同时,我们注意到栈当中有个字符串,Hello Dude!我们没有理由不怀疑,这就是注册码,拿来尝试一下,果不其然,这就是注册码,而且是不变的。
现在我们来看看第一种方式如何破解这个程序。随便输入:
Name:99999
Serial:11111
点击Check it Baby! 弹出一个对话框:Sorry,The Serial is incorrect!
现在我们还是在od里面看看这个程序,搜索字符串 Sorry,The Serial is incorrect!我们可以看到程序当中有两个Sorry,The Serial is incorrect!字符串,
我们先去第一个字符串的代码领空看看:
我们将断点设在42FA4D然后单步运行程序,在42FA57时,EAX的值是5,也就是说,函数的返回值为5,然后再与4比较大小,5>4,jge跳转实现。
这个地方的字符串并没有输出!刚才输出的是第二个Sorry,The Serial is incorrect!字符串。奇怪,现在也不知道为什么,继续向下面单步运行。
在下面我们可以看到堆栈出现奇怪的字符串CW-4674-CRACKED,并且也出现了我们的Name:99999。我们完全有理由怀疑这个由CW-
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-9-16 17:11
被VEhl编辑
,原因: