乐趣区

Crackme021

Crackme021 的逆向分析

1. 程序观察

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

2. 简单查壳


程序使用 Delphi 编写,无壳。

3. 程序分析

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

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

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

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

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

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

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


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


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

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

相关文件在我的 Github

退出移动版