160个carckme ---1、 Acid burn
首先使用peid查壳,发现没有壳,是Delphi的程序。
 
接下来把它载入到ollydbg里面,并运行这个程序
 
我们可以先看一下这个运行的程序,这个cm给了我们两个进行破解的模式,一个是用户名+注册码,另一个是只有注册码
先来看第一种 有用户名+注册码的
当我们输入用户名和注册码,由于注册码错误,就会引发弹框报错。
 
接下来我们用最常用,也是最快的方式找到弹出这个对话框的位置,搜索字符串,回到ollydbg右键 查找----所有参考文本字串----查找文本(搜索Sorry):我们可以看到,根据关键词搜索,有两处一模一样的,如果此时去做分析,需要对两个都进行下判断,看那个是有效的。
 
先看第一处“Sorry , The serial is incorect !” 成功搜索到关键字符,我们双击到反汇编窗口,成功定位!可以看到错误提示的call,上面有个jge跳转可以跳过错误提示,我们下断点,再次check it,停下来了,这时发现跳转是实现的!但是我们判断一下,我们应该找到执行正确的地方,然后替换这里的jge,但是在这个代码的附近并没有,说明这个报错字符串很有可能是迷惑人的,真正做判断的应该不是这里。
 
在看到下一个搜索到的“Sorry , The serial is incorect !” 这里有正确的提示信息,但是在jnz处跳过了正确提示信息。   我们大概浏览下代码,最近部分有两个可疑跳转JNZ 和JMP, JNZ会通过它上面的call 004039FC 判断我们的伪码是否正确,判断的结果存在EAX中,如果EAX不等于就跳转到错误提示信息框那里。我们的目的是无论伪码是否正确都通过验证,所以最简单的办法就是将jnz这句
使用NOP填充,我们尝试一下:选择JNZ这句,用nop进行汇编,回到原始程序,再次点击Check it baby!  
也可以修改成jmp无条件跳转,让他跳转到回显正确的地方!  
对于另外一种只有注册码的,我们的分析也是和上面一样   可以看见报错框中显示:“Try Again!” 我们将Try Again!作为关键词进行搜索,通过筛选判断,定位到了这里  
接下来可以直接使用nop代替jnz那一行
 
小结:对于做crackme,有以下几个步骤: 一、查壳,使用peid查看是否有壳(由于刚起步,自己练习的都是不加壳的) 二、进行破解: 1、先运行下程序,观察一下报错的一些关键字 2、通过搜索关键字,使用文本进行定位,此时可能会有多处,我们应该加以判断 3、利用填充nop可以使条件判断跳转je jnz等跳转取消 同理可利用jmp无条件跳转使其必须跳转达到爆破的目的 (破解的方法可能不止这些,不过目前只接触了这两个)
|