Crackme021 的逆向分析
1.程序观察
可以看到,name 其实是让输入英文的,输入数字就会出现像图1那样的弹窗。
只有输入英文字母的时候,程序才会真正开始验证输入的是否正确,而且一个用户名是有两个验证码的。
2.简单查壳
程序使用 Delphi 编写,无壳。
3.程序分析
使用 OD 载入程序,搜索字符串。
进入代码,来到代码块开头,下断点,点击 Try 按钮,程序就断了下来
程序会比较内存42F714和内存42F718处的值,如果是0,就会弹窗报错
如果都不为0,才会进行接下来的验证程序。
- 程序获取三个输入框的值,比较是否为0
- 再次比较两个内存处的值是否为0
- 依次将内存42F714 和内存42F718处的值转化为字符串,再和两个序列号进行比较,全部相同,就会提示正确
那么内存 42F714 和内存 42F718 处的值从哪里来的呢?
其实是在我们输入用户名的时候,程序就计算出来的。
使用 IDR 载入程序,可以看到有一个键盘输入事件
程序会得到输入的字符,然后进行比较,是否为非法字符串,如果是,就跳转走;如果不是,就来到给内存 42F714 和内存 42F718 赋值的地方
根据输入不同的字母,给两处内存加上不同的值。
因为程序内有固定的表,所以也不用写注册机了,自己算一算就行了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。