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:https://github.com/UnreachableLove/160-Crackme/tree/master/Crackeme021

2019-09-23 21:55:50

 

posted @ 2019-09-23 21:56  随风而逝的白色相簿  阅读(96)  评论(0编辑  收藏  举报