160个CRACK_ME系列 第一弹

这是160crackme系列的第一个,下载链接我会放在文章末尾,有兴趣的朋友可以玩玩看。
我们先打开文件

上来就是一个明晃晃的挑衅,等会一定也要把他干掉

有三个按钮,看起来右边这个简单点,就点他好了


这时候对软件的大体结构一定要有思路,虽然不能直接得出flag但是会对程序的分析有很大的帮助。那么来分析一下这个程序,左边那个按钮的部分大概就是根据输入的Name字段来生成Serial,而这个部分应该就是一个固定的注册码。
按照惯例,先拉到PEID里查查壳

不认识,没关系,百度一下看看是啥玩意

幸好,不是壳而是一种语言,那就不用脱壳了,拉倒ODB里看看

这种界面比较复杂的crackme一般难点就在如何找到主要函数,我们来右键->中文搜索引擎->智能搜索,ctrl+f来找一下serial字符串

就这样我们找到了我们需要的部分字符串,从结果来看有两个当输入错误时的提示信息,分别是42FA5E和42FB21,那我们在这两处下断点,然后把程序跑起来

这个对话框先弹了出来,我们先忍他一会

还是点右边的选项,随便输点什么

emmm 并没有断到,这次我们以Failed为准再下一次断点在42F4F3处

这次我们断到了,那么我们一开始断的两个Try again应该就是左边按钮的了,先不管他,我们来分析一下这段代码:其实也没什么好分析的,只有一个关键跳转我们需要注意,那么我们想让它”恭喜”我们的话,只要把位于42F4D5的关键跳转Del掉就ok了,

然后重新运行一下

当然我们想做的远不止这些,在软件的更新中,注册码常常会改变,但是软件注册码的加密算法一般是不会变的,所以通常的做法是继续查找他的加密函数。对于右边按钮这部分而言,应该只是一个固定字符串,所以我们的任务就简单多了,我们先把这部分还原,然后向上查看代码,看看是什么让这个跳转执行了

可以看到,我们输入的字符串就存在EAX处,那么EDX应该就是我们要寻找的固定字符串了,

我们把断点取消,让程序跑起来,看看这个字符串是否正确

所以这部分我们就完成了!我们在返回主界面来看一下左边的按钮。


断在了之前两个断点的位置,两个断点都有”Try again”字段,我们依次来分析这两个位置的跳转,首先是第一个断点:

我们看到这个只会返回错误的提示而没有正确时的提示,且在42FA5A处跳转的前面有一个cmp指令,将EAX与0x4进行对比,所以这应该就是对字符串的长度进行限制,若长度不足4就直接返回Try again,那么我们再看看第二个断点内容。

这个部分就很熟悉了,和之前右边的按钮部分一模一样,再来看看42FAFB处的内容

这就很明显是我们在找的注册码了,我们重新开一个进程来试验一下

正确,那么我们就来找他的加密部分吧,在这之前我们先来猜一下这部分的流程:
输入->检测长度->加密->对比->输出结果
所以假如和我们想的一样的话,加密部分就应该在两个断点之间,我们来找一下

就在第一个断点下不远,我们找到了一段很可疑的代码,他对我们输入的字符串进行了运算,而且与我们之前找到的注册码的部分字符串有联系,那这就很有可能是我们要找的加密部分了,我们在42FA87处下个断点,重新运行程序以便来分析这段代码,

这样我们就完成了对这段加密代码的解析,再写一段python脚本来重现这段代码


这样我们就完成了这个程序的解析,我们再来做点其他事情,比如最开始的对话框
右键->中文搜索引擎->智能搜索 来找对话框上的字符串

很轻松的我们就找到了,我们来想办法把这个提示框干掉,这时候我们有两种思路,一种是把调用这个函数的代码del掉,另一种是把调用这个函数的代码修改一下,调整到42f79c,让它一进入函数就跳出去,不管哪一种操作,都一定要小心保持堆栈平衡,不然程序会崩掉。那我们在42F784处下个断点,把程序跑起来,

这时候栈里就有了调用这个函数的代码的地址,

就是这里了,因为这一处没有进行压栈操作,所以我们直接del掉就可以了,然后右键->复制到可执行文件->选择 会弹出这样的东西

再右键->保存文件 将他保存下来,我们再打开试一下效果

直接就弹出来了,消灭对话框成功!

链接:https://pan.baidu.com/s/1PxBttyWn_6ZZNIe9bqJrnQ
提取码:z14n

END

转载于:https://blog.51cto.com/13992485/2404530

你可能感兴趣的:(160个CRACK_ME系列 第一弹)