这是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