【CrackMe 实战】逆向破解实战之 001 Acid burn.exe

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wenxuhonghe/article/details/95638925

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

最近迷上了逆向脱壳破解,玩的不亦乐乎。

于是我在吾爱破解(https://www.52pojie.cn/)网站,下载了一些破解专用工具,以及 160 个练手用的 CrackMe 小程序。

网站上大神很多,也有很多破解的详细教程。

我跟着大神们的讲解一步一步的学,同时也会在这里将我学习的过程记录下来,既是对自己成长的见证,也可以为后来者提供一些帮助。

 

第一步  预先善其事 必先利其器

首先需要准备两样东西,1. 需要的破解的 CM 程序,2. 破解工具。

这两样东西在吾爱破解论坛里都可以找到,为了方便,我这里上传了一份,大家可以放心下载使用。

链接:https://pan.baidu.com/s/1MiK1oGrLA-gVAPNbXvDQ_w  提取码:ng8w 

注意:CM 程序跟 OllyDbg 容易被杀毒软件报毒误删,需要添加信任。

160 个 CrackMe 程序是在一个 chm 文件中,点击作者那一栏里的名称,可以下载到对应的 CM 程序。

逆向破解工具,我使用的是 OllyDbg,简称 OD,运行界面如下。

为了方便大家学习,我将自己搜集的一些入门教程分享出来,供大家一起学习,共同进步。

1. 软件逆向是通过反汇编和调试等手段,分析计算机程序的二进制可执行代码从而获得程序的算法细节和实现原理的技术。因为是要进行反汇编,所以了解一些常见的汇编指令,读懂简单的汇编程序是非常必要的。《逆向分析之常见的汇编指令

2. OllyDbg,简称 OD,是一款具有可视化界面的用户模式调试器,结合了动态调试和静态分析,具有强大的反汇编引擎,功能强大且容易上手。软件的操作教程了解一下《逆向动态调试之Ollydbg的使用

3. 吾爱破解官方出的入门教学培训教程,已经更新到十期,大家可以去下载教学视频学习,《吾爱破解官方教程》。

第二步  动手操作

我们今天要逆向破解的是第一个 CM 程序 《Acid burn.exe》,首先双击打开先来运行看看。

先是弹出一个欢迎界面,大意就是作者说这个程序是我整的欢迎来搞。我们不管它,点确定。 

进入了主界面,我们可以发现,程序提供了两种类型的验证方法,一种是用户名+序列号,另一种是序列号。

 序列号(和用户名)输入之后,点击 Check it Baby!按钮可以进行验证,如果验证失败的话,会弹出对话框提示。

如果验证通过的话,弹出的对话框中会显示  Good job dude =)  字样。

我们本次逆向破解的目标,就是找到正确的序列号,使其可以验证通过,出现验证成功的界面。


 了解了 CM 程序的大概运行流程之后,我们把它放到 OD 中进行调试分析。

 打开 OllyDbg 软件,File  -->  Open ,找到我们要破解的程序,打开。

 OD 的操作界面就不过多介绍了,不熟悉的朋友可以去看看文章开头推荐的教程。

点击 Debug  -->  Run,运行程序,也可以直接点击工具栏中的蓝色三角形按钮,运行程序。

这样,CM 程序就在 OD 中运行起来了。


我们先来破解 Name + Serial 模式。就正常操作,在输入框中随便输入一个用户名和序列号,如 Name 填的是123456789,Serial 填的是 abcde12345,点击 Check it Baby!按钮进行验证(结果当然不会通过,随便输入的怎么可能这么巧猜中)。

在弹出的 Try Again 界面不要动(不要关闭这个对话框),我们要从这里开始调试了。

这里讲一下为什么要这样做。因为我们知道程序后台肯定是由一个正确的序列号的(不管是代码写死的,还是动态生成的,反正在点击验证按钮的时候,这个序列号肯定是生成好的),验证过程就是我输入的序列号跟后台生成的正确的序列号比较的过程。而验证的过程肯定是在弹出这个窗口之前发生的。

所以,思路就来了,我们可以找到弹出对话框的代码处,从此处入手向前寻找,只要找到验证过程发生的位置,程序基本上就可以破解了。

思路讲到这里,下面我们接着操作。

保持 Try Again 的窗口不要关,然后切换到 OD 界面,按 F12 ,可以暂停程序,进入调试状态。

 点击 Window  -->  7 call stack of main thread ,或者直接点击工具栏中的 K 按钮,打开堆栈窗口。

 观察其中的 MessageBox 字样(我的经验是,最好从下往上找,因为下面的是新弹出的),我们找到了图中箭头所指的那一行(结合那一行下面的 Text 和 Title 里的文字,我们基本上可以确定,这个 MessageBox 就是我们之前弹出没关的那个窗口)

鼠标选中这一行,右键,show call(显示调用),点击之后会跳转到 main thread 窗口。

图中选中的这一行,就是反汇编之后,程序中控制弹出提示框的语句。

根据我们之前的分析,序列号验证的逻辑肯定就在这句前面不远处,范围缩小了,我们把代码往上翻一翻找一找。

如图中所示,没翻多远,我们找到了  push ebp  这句代码,这句代码在汇编语言中,一般在程序入口会出现,我们在这里 F2 打个断点,待会儿可以从这儿开始逐行调试看看。

不要问我为什么知道该在这儿打断点,我也不知道,我也是一步一步慢慢摸索出来的,可能熟悉了汇编语言的基本指令的话,会容易一点(我刚开始找的时候,采用了一种简单粗暴的笨办法,从 MessageBox 那一行往上连着几十行都打了断点,然后调试运行,看程序是触发哪一行的断点,慢慢的就找到了)

打完断点之后,我们按 F9 继续运行程序,然后重新按 Check it Baby!按钮验证,此时没有直接弹出错误的提示框,而是触发了断点程序暂停,停在了我们之前打断点的那一行。

按道理,我们应该按 F8 逐行运行,观察程序运行过程中代码跳转情况,同时观察下方堆栈窗口的情况。

不过啊,我们这次的运气实在时有点好,在触发断点的时候,我们可以看到下方出现了四行很可疑的字符串。

0019F658   024A0F78  ASCII "4018"
0019F65C   024ABE48  ASCII "123456789"
0019F660   024ABEA8  ASCII "abcde12345"
0019F664   024ABE8C  ASCII "CW-4018-CRACKED"

第一行 4018 不知道是什么,先不去管它,第二行和第三行,我们惊讶的发现,这不正式我们之前手动输入的用户名和序列号嘛。那第四行呢?看上去挺奇怪的一串字符,又感觉跟其他乱码不一样,这个不会就是真正的序列号吧?

不管是不是,先试试再说,重新运行程序,输入刚才找到的那串字符,点击按钮验证。

居然真的成功了,我们就这样找到了它真的序列号,把它给破解了!

是不是有点神奇啊!自己快去试试吧!


别忘了这个程序还有一种 Serial 模式。

其实这种模式的破解方式跟前面我们讲的那种,方法和操作是一样的,这里我就不再赘述一遍了,正好也留着可以给大家练手,巩固一下,熟悉熟悉操作和原理。

如果你成功破解了的话,请把你破解得到的序列号留在评论里给我看一下哦。

 

刚开始学,能力比较菜,工具用的也不熟,虽然破解成功了,但是有些地方还是看不特别懂,尤其是汇编语言的那部分.

不过没关系,慢慢学,慢慢进步嘛,加油。

猜你喜欢

转载自blog.csdn.net/wenxuhonghe/article/details/95638925