首页 > 技术文章 > 逆向破解之160个CrackMe —— 001(中)

ndyxb 2020-03-05 14:24 原文

CrackMe--001(中)

前置知识介绍:

  • 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合,一共160个待逆向破解的程序

  • CrackMe:一些公开给别人尝试破解的小程序,制作crackme的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位cracker,想挑战一下其它cracker的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。

  • CrackMe简称CM,cracker是以破解各种加密或有限制的商业软件为乐趣的人。

程序信息:

编号作者保护方式
001 Acid burn Name/Serial,Serial

工具:

  • ollyDbg(简称OD)

  • Exeinfo PE

开始破解:

1.今天完成第二个目标,只需要序列号的验证机制,打开上篇完成修改后的程序,没有了烦人的提示窗口,是不是心情也愉快的很多。接下来我们点击Serial按钮来到序列号验证窗口,随意输入一个序列号,然后点击验证按钮

 

 

 

2.显然我们随意输入的序列号是正确的可能性是极低的,一般友好的程序会在你验证过后给用户一个提示,告诉用户序列号是否正确,果然,程序以窗口的形式给了用户提示,又是窗口,如果你还记得昨天的方法,你应该可以找到创建该窗口的关键代码(不妨试试)

 

 

 

3.今天我们用一种新的方法,字符串定位法,上面验证错误后,会弹出一个窗口,显示Try Again(再来一次),我们用OD打开程序,右键->中文搜索引擎->智能搜索(这里需要插件,会在文末给大家),在弹出的界面中右键->查找,输入刚刚提示的信息Try Again,然后回车

 

 

 

 

 

 

4.现在就会定位到输入的字符串那行(如果存在),按N或B键查找下一个,发现一共有三个,还行(如果太多,这个方法就不好用了),我们在三处都下断点(双击或按回车就会跳回到反汇编窗口并停留在选中的地址处,然后按F2键下断点),然后按程序运行,输入一个序列号,进行验证

 

 

 

 

 

 

5.会发现程序停在0x42F4F8处,我们向上看,很容易就发现了关键跳转,同时发现了序列号正确的提示信息,所以只要0x42F4D5处的跳转指令不执行,验证就一定会通过,我们可以将jnz改为jmp,然后保存修改后的内容就行了,这样无论你输入什么都能正确(这就是爆破,可以参考上一篇试试)。

 

 

 

6.但是我们今天要找到正确的序列号,jnz指令的上一条指令是call一个函数,也就是当函数返回值是1就会实现跳转,我们在call指令所在地址0x42F4D0下断点,然后F9运行程序,再次输入一个序列号(1234,方便观察),点击验证按钮,会断在0x42F4D0处,同时我们会发现函数两个参数一个是我们输入的序列号,另一个也是一串字符串,所以这个函数的功能可能是比较两个字符串,相同就返回0,不相同就返回1。经过测试,的确如此。那么Hello Dude!就是真正的序列号

 

 

 

7.我们重新运行程序,输入序列号Hello Dude!,验证通过。

 

 

 

8.第二个目标达成,明天完成最后一个目标

 

OD中文搜索插件

链接:https://pan.baidu.com/s/1uCs_1ImM7gvAmtBbe2g4vQ 

提取码:hxz3 

推荐阅读