Crackme021 的逆向分析

1.程序观察

clipboard.png

clipboard.png

可以看到,name 其实是让输入英文的,输入数字就会出现像图1那样的弹窗。
只有输入英文字母的时候,程序才会真正开始验证输入的是否正确,而且一个用户名是有两个验证码的。

2.简单查壳

clipboard.png
程序使用 Delphi 编写,无壳。

3.程序分析

使用 OD 载入程序,搜索字符串。
clipboard.png

进入代码,来到代码块开头,下断点,点击 Try 按钮,程序就断了下来
clipboard.png

程序会比较内存42F714和内存42F718处的值,如果是0,就会弹窗报错
clipboard.png

如果都不为0,才会进行接下来的验证程序。

  1. 程序获取三个输入框的值,比较是否为0
  2. 再次比较两个内存处的值是否为0
  3. 依次将内存42F714 和内存42F718处的值转化为字符串,再和两个序列号进行比较,全部相同,就会提示正确

clipboard.png

那么内存 42F714 和内存 42F718 处的值从哪里来的呢?
其实是在我们输入用户名的时候,程序就计算出来的。

使用 IDR 载入程序,可以看到有一个键盘输入事件
clipboard.png

clipboard.png
程序会得到输入的字符,然后进行比较,是否为非法字符串,如果是,就跳转走;如果不是,就来到给内存 42F714 和内存 42F718 赋值的地方

clipboard.png
根据输入不同的字母,给两处内存加上不同的值。

因为程序内有固定的表,所以也不用写注册机了,自己算一算就行了。

相关文件在我的 Github


snow
4 声望0 粉丝

多么美好!


« 上一篇
Crackme019
下一篇 »
Crackme022