【CrackMe】004-CKme.ajj.1

一、查看程序信息

这里写图片描述

二、观察程序特点

这里写图片描述
我X的了,什么鬼程序,怎么操作都没反应
亏我刚开始看到中文还一股亲切感油然而生
从程序就可以看出来,中国人就是比老外邪恶啊……

三、寻找突破口

字符串倒是能搜到,可你都不会玩,搜到了有个鸟用。
还是用delphi解剖神器吧
这里写图片描述
在DelphiDecompiler中,可以看到里面有一堆事件

(写这软件的人才是真牛逼,感慨一下)

chkcode KeyUp不知干嘛的,测试一下发现, KeyUp 用户名输入会触发,chkcode序列号输入会触发。这两触发太频繁就就先不下断了。
Panel1DblClick Panel1Click 看起来应该是图片框的双击和单击事件,感觉这俩相比应该比较好欺负,那就根据上面的RVA下两个断点。

四、收集有用信息

输入“12345”、“67890”,先单击好了。
初来乍到,先F8一遍,留意寄存器、堆,看看有没有什么关键的信息。
这里写图片描述
迅速走完一遍,程序没什么反应,但根据前面看到的KeyUp事件,暂时推测序列号是否正确是在案件抬起事件中判断的吧,所以输入错误的情况下,程序走完一遍也没反应。
但是F8的过程中,堆里出现可以信息,信息都存储在04425B**附近。
而且程序了应该有一个0x13次的循环。
数据窗口定位04425B**附近,再走一遍看看。
这里写图片描述
程序中,发现了个“注册成功”,但代码并没执行到那
向上看发现,原来是在0x13次循环后,直接跳过去了

00458031    81BE 0C030000 8>CMP DWORD PTR DS:[ESI+0x30C],0x85
0045803B    75 76           JNZ SHORT 004_CKme.004580B3

直接在内容中,将[ESI+0x30C]的值改为0x85,看看效果
呵,果然看到朱茵姐姐了
那就对[ESI+0x30C]下断,看看是什么地方修改这个值
绝望,单击、双击、KeyUp、chkcode都没断下来……或许是某些条件没符合

五、换个思路

0x85是个常量,既然有和常量的比较,那理论上应该有对他的赋值
Ctrl+B我们搜搜85 00 00 00,Ctrl+L下一个
搜了一圈还真有一个符合的,MOV
这里写图片描述
0x457EFE正好是符合我们要求的代码
它的上面是一个JNZ,怪不得我们断不下来,原来直接跳过了
我们在JNZ上面的比较处下断,看看是什么操作会出发这的代码
原来是双击会触发判断。

既然是和常量0x3E比较,和上面一样,我们看看那直接用0x3E赋值了
Ctrl+B我们搜搜3E 00 00 00,Ctrl+L下一个
这里写图片描述
0x3E的赋值也要进行判断,真够麻烦的
往上点下个断点,看看哪能影响跳转
最可恨的是双击事件竟然不到这个断点
4个事件挨个试过后,是序列号输入会触发
F8走一遍,发现两个CALL都会把ZF位置0
看来要读代码了。
这里写图片描述
好幸运,只进了一层,F8分别看两个函数的输入和返回
在第二个函数就发的现了输入的序列号和生成的序列号
换几组用户名密码,试试序列号规则

“黑头Sun Bird”+(用户名长度+5)+“dseloffc-012-OK”+用户名

能不猜就读代码,哈哈哈哈哈

六、总结一下

4个事件各有各的用处
用户名的KeyUp事件是计算了用户名的长度
序列号的chkcode事件是生成了序列号并验证,然后给个状态值0x3E
图片Panel双击事件,判断是否是0x3E,然后给个状态之0x85
图片Panel单击时间,判断是否是0x85,判断是否显示图片

猜你喜欢

转载自blog.csdn.net/chy_chenyang/article/details/80806103
004