从前有160个CreakMe,后来….
不积跬步,怎么能至千里之外呢?所以我们从第一个开始破解
从最后修改时间可以看出来,是一个在1997年被前辈写出来的一个程序。然而20年过去了,我才开始膜拜前人的作品。惭愧惭愧
一共有三个选项,一个 账号/注册码,一个退出,还有一个注册码
这个就是 账号/注册码 的界面,正确输入账号和注册码应该就可以解开这道题
第一个编辑框输入“1234567”,第二个编辑框输入“qqqqqqq”,点击 Check it Baby! 弹出一个窗口,上面写着“Sorry, The serial is incorect!”,至此我们已经知道,输入错误的账号和注册码后会弹出一个窗口,还有一个字符串
既然我们知道了有字符串可以查找,就用最简单的方法找到关键函数,查找字符串一定要进入到主模块才可以,不进入主模块查找的就是别的模块的字符串
我们查到了这些,虽然没有“Sorry…”,但是我们似乎找到了什么意外的收获! “Good Job dude !! =)” 是什么鬼,你干嘛夸我~ 难道是我破解了他? 哈哈哈,从这里进去就能找到账号/注册码输入正确的时候的程序的位置了,再往上回溯肯定就能找到验证账号/注册码的地方
我们找到这个函数的起始位置下一个断点
我们就找到了验证账号/注册码的函数了,接着我们详细的分析一下这个函数中的代码
我们看到这个函数内部是这样的,一直对账号进行操作,请忽略我上次写的垃圾注释
我们找到弹出成功窗口的地方
直接从这个函数开始的地方一个 JMP 跳到 0x42FB05 这个地址,就完成了暴力破解
暴力破解之后,不管输入什么账号和密码都会弹出成功的窗口
我们接下来看一下他的算法,试着写出一个注册机之类的东西
点开程序输入各种账号密码熟悉程序流程
然后找到弹出成功窗口的位置,从那里开始往上回溯
这是成功弹窗上的第一个函数,都是一些跳转,和设置标志位的代码,推断出这里应该是设置函数外判断是否跳转的依据,所以我们继续往上找
求出了一个“CW-4018-CRACKED”这样一个字符串,这次我们测试的账号是:132456,注册码是:qqqqqq
我们把这个字符串代入试试
成功破解,这里可以知道程序会求出一个注册码让我们通过检测
从上面的程序已知 CW 和 CRAKED 这两个字符串是存在在内存中的,那我们就要找一下4018这个数是怎么求出来的
总之。。。太麻烦了,就是通过输入的账号的第一位乘16进制的29,再和自己相加,就得到CW 和 CRAKED 这两个字符串中间的那个数字
(31h * 29h)*2 = FB2=4018