1

Crackme030 的逆向分析 


1.程序观察

20191021100351.png
程序刚打开的界面是空白的,只有两个按钮。

点击 File,里面有个 Password 按钮,点击才会出现输入密码的界面
20191021100415.png

20191021100428.png

2.简单查壳

20191021100824.png

没有壳。

3.程序分析

因为程序是使用 VB5 编写的,所以我们先使用 VB Decompiler 加载程序看一下
20191021101013.png
可以看到,程序有3个面板,6个点击事件。地址 4030F0 处的代码可能就是我们需要的。

然后使用 OD 载入程序,搜索字符串
20191021101804.png

进入代码处,可以看到上方不远处有一个比较函数
20191021101959.png

运行到此处,查看函数的参数
20191021102122.png

20191021102136.png

第一个参数本应该是我们输入的密码才对,我在此输入的是 123456,但现在却是一些莫名其妙的符号。
第二个参数应该就是正确的密码。

因为第一个参数不是我们原本输入的密码,所以我们猜想程序可能对我们输入的密码进行了一些处理之后,才进行的比较。所以我们要对上面的字符串进行相应的逆处理,才能得到真正的密码。

来到代码开头,也就是上面看到的地址 4030F0 处,下断点,运行程序
20191021104512.png
程序首先获取输入的密码,然后求得密码的长度

然后建立循环,循环次数为密码的长度。在循环中,程序每次取输入密码的一个字符,求得其 ASCII 值。然后依次和字符串 "2000" 的单个字符的 ASCII 值进行异或运算。也就是说,密码的第一个字符的 ASCII 值和 2 的 ASCII 值进行异或运算,密码的第二个字符对应 0进行运算,密码的第5个字符又再次和 2相对应进行运算。
20191021105237.png

20191021105257.png

循环完成之后,才会进行比较
20191021105449.png

根据其方法,我们可以反推出其真正的密码
我们将字符串"qBQSYdXUe_BV"再一次和字符串"2000"进行异或运算即可

20191021105750.png

20191021105924.png

相关文件在我的 Github


snow
4 声望0 粉丝

多么美好!


« 上一篇
Crackme029
下一篇 »
Crackme031