Steven_Hu 发表于 2019-6-20 11:43

逆向笔记---160CrackMe之002(AfKayAs)

本帖最后由 Steven_Hu 于 2019-6-21 09:05 编辑



上一篇:逆向笔记---160CrackMe之001(Acid Burn)


https://static.52pojie.cn/static/image/hrline/4.gif


AfKayAs
0x01 环境与工具
系统:吾爱破解XP SP3
工具:PEiD,OD(ICE版本)



0x02 程序概览

程序界面很简单,只需输入用户名和序列号即可。
(这里应该再查一下壳,因为是比较简单的程序所以忘记截图了)


0x03 暴破流程
OD中F3载入程序,运行。输入任意的用户名/序列号,如:”123123/234234”,弹出错误窗口。F12暂停,ALT +F9返回用户领空,然后点击确定,来到下图所示位置:


紧邻上方的call应该是调用MessageBox弹出提示框,继续往上翻代码,找到如下跳转:


这个跳转是跳到错误窗口。而且从下面的注释可以看出,紧邻的代码应该是弹出爆破成功的窗口。所以把je short 004025E5用NOP填充,并保存,爆破成功:







0x04 算法部分
大致思路如下:猜测输入随机用户名/注册码后,程序会生成一个正确的注册码然后与我们输入的进行比对,所以只要找到对应的生成码(这个程序中是形如 “AKA-XXXXXX”这样的字符串),然后尝试输入,如果可通过测试,则在生成的注册码上方寻找附近的call,最后逐个F7进行分析。

当然在这里,很多call都是调用的DLL,比如0040243F那里的call,进去后发现有一个主要的循环,是将EAX的值反复除以0x0A,然后得出的余数(存放在EDX)加上30,很明显是将一个十进制数转换为字符串。继续向上查看,可以发现这个算法不是很复杂,主要部分如下图:


首先获取用户名长度,然后用这个长度乘以0x17CFB,得出的结果在加上一个参数,这个参数是用户名第一个字符对应的ASCII码。


最后,得出的结果前面连接上字符串”AKA-”就得出最终注册码。

C语言代码如下:

天空藍 发表于 2019-6-21 03:15

希望留下更多160系列CM的笔记,也更盼望内容能够完整与丰富。

秀儿 发表于 2019-6-21 22:00

为啥按你说的没到用户领空的位置?

秀儿 发表于 2019-6-21 22:03

看图!按下确定没变,和你的不一样~!

boyving 发表于 2019-6-22 10:03

很厉害,每一次爆破都逆向了算法

Steven_Hu 发表于 2019-6-23 02:49

秀儿 发表于 2019-6-21 22:03
看图!按下确定没变,和你的不一样~!

刚刚用吾爱的OD试了一下是可以的。
可能我没有说清楚,在你界面左上角出现“返回到用户”之后,你需要点击一下被调试程序之前弹出的错误窗口的确定,即“You Get Wrong\n Try Again”那个窗口的确定按钮,OD的反汇编面板就会跳到用户领空了。此时注意一下你左上角的“返回到用户”也会变为“暂停”状态。

小豆丁 发表于 2020-3-18 00:42

本帖最后由 小豆丁 于 2020-3-18 00:44 编辑



楼主,我爆破之后怎么提示这个啊?咋回事               
页: [1]
查看完整版本: 逆向笔记---160CrackMe之002(AfKayAs)