160CrackMe-001
本文最后更新于:2021-08-09 晚上
初探
打开程序会弹出如下的窗口,根据标题可以看出,我们需要“杀死”这个弹窗。
程序主题界面有两部分,第一部分是序列号加名字。
第二部分是单纯的序列号,应该是比较简单。
看完大体流程,开始分析。
分析
查询程序的基本信息,可以看到未加壳,是用Delphi语言编写的。
先分析单纯的序列号。
用OD打开程序,搜索字符串,搜索错误的提示,可以看到成功与错误的提示,还有一个JNZ,这里应该是关键的判断跳转。
在函数头部下断点,开始分析。可以看到它把Hello和Dude!压入栈之后,再将其拼接起来组成新的字符串,然后再与我们输入的序列号进行比较。
那么这里的序列号就是Hello Dude!。输入正确的序列号之后,弹出正确的窗口。
再来分析序列号加用户名
还是通过搜索错误提示的字符串,即可找到关键的跳转,在最后的跳转前查看一下,可以看到栈存放着两个值进行比较,一个是我们输入的123456,另一个是CW-80360-CRACKED,那么这个应该是要输入的serial。往上开始寻找这段序列号是如何生成的。在函数头部下断开始分析。
首先是检测了输入的用户名长度,不可以小于4位。
继续往下看,可以看到CW,-,CRACKED和数字这几段,然后通过一个函数将它们拼接起来,字母都是本身有的,那么就需要寻找数字的生成。
数字是通过sub_406718生成的,而其中的参数是通过0x431750处传入的,那么这个值是从哪来的,从上分析。可以看到这里的计算过程。它是获取输入用户名第一位然后乘以0x29再乘以2。而之后的sub_406718作用是将十六进制转为十进制字符串。
到这里整个过程就分析了,开始尝试编写注册机
注册机编写
1 |
|
输入用户名b1ackie,就可以计算出正确的serial。
输入正确的值查看
弹窗的消除
先根据弹窗的提示信息,搜索字符串,可以定位到此处。
执行出来,可以看到在外部有一个JZ跳转可以跳过这个弹窗函数,我们只需要将其修改为JMP就可以无条件跳走了。
小结
第一个crackme,还是比较简单的,没有什么难度,做起来比较轻松。
还记得上次做这个还是大一的时候,那个时候也刚接触这块没多久,当时还是看着帖子一步一步学着来。学习记录还是要坚持做下去,这些crackme也要坚持争取全部都做一遍。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!