【CrackMe】002-Afkayas.1

昨天搞了第一个CrackMe,一星的就如此变态,好吧,硬着头皮开搞第二个,相信有一天我也能轻松搞定。

一、查看程序信息

这里写图片描述

嗯,VB程序,没壳,希望逻辑不要太变态。

二、熟悉程序

这里写图片描述

看起来很简单很无害的界面。
无论输入数字、字母、超长信息,都是一样的提示

三、分析程序

1.先从提示信息下手

运行程序,搜索字符串。
竟然没有You Get Wrong之类的字符串,应该是加密了。
换一条路。

2.查找消息框

不顺啊,找MessageBox找了半天,找完了下断还停不下来,正好在花指令里。
此处省略一千步
换其他方法

3.字符串比较函数

重新加载一下程序,运行弹出主界面
Ctrl+N,弹出导入表界面。
浏览导入函数,发现有vbaStrCmp函数
这里写图片描述
VB再不会,英文再烂,也能猜出来这是字符串比较函数
推断序列号比较那地方应该会用到这函数,试试吧……

4.跟踪字符串比较函数

这里写图片描述

本想查看调用树,看看谁用了这个函数,不知为什么不好使
还是选择了反汇编窗口跟随

这里写图片描述

扫描二维码关注公众号,回复: 1794049 查看本文章

下断。执行程序。
F8走你。

这里写图片描述

可以在堆中看到,两个数据。
一个是我们输入的序列号“67890”。
另一个貌似生成的序列号”AKA-487704”。

5.序列号验证

这里写图片描述

单跑一遍程序,用户名”12345“,序列号”AKA-487704“,顺利通过。
可以确定,“AKA-487704”是根据用户名生成的序列号无误。

6.暴力破解

这里写图片描述

F8向下执行,发现下面有个JE跳转。
JE跳转点上方和下方各有个msvbvn52.rtcMsgBox,应该是消息框
推测此处应该就是关键调整。
将该行代码NOP掉,dump出新的exe文件。
运行,暴力破解成功。

7.系列号算法

根据上面的内容我们知道了用户名”12345“会生成序列号”AKA-487704“。
那我们把它的算法找到,就可以写注册机了。

这里写图片描述

原来我们在字符串比较函数的位置下过断点。
序列号生成肯定在它的上面。往上看。
貌似0x402310这位置是整段代码的起始。
下个断点,走起,果然能断下。
那就分析0x402310到比较函数间的代码就好了。

先黑盒F8到比较函数看看会不会有收获再说。

这里写图片描述

运气还不错哦,执行完0x0040245,寄存器就出现目标序列号了

0040243E      57              PUSH EDI
0040243F      FF15 E0404000   CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrI4>]    ; msvbvm50.__vbaStrI4

OD已经标识出此处调用的是系统函数__vbaStrI4
那就不往里跟了,百度一下就知道原来这函数是字符串转化的
先PUSH传里个参数,是“0x77118”
执行完毕EAX返回“487704”

转化过程应该类似这样
0x77118转十进制487704
487704每位加0x30变成对应的ASCII码

接下来继续向上,找“0x77118”的来源

这里写图片描述

所以最终算法如下:
用户名长度 * 0x17CFB + 用户名第一个字符ASCII
将上面的值转成十进制字符串

猜你喜欢

转载自blog.csdn.net/chy_chenyang/article/details/80785014