冰凌汇编

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 68|回复: 0
收起左侧

[原创] 160Crackme--02 Afkayas 爆破算法分析

[复制链接]
Helpful 发表于 2022-4-22 19:19:13
我是刚入门不到一个月,最近刚开始刷160Crackme,第二个是我自己做出来的,包括爆破和算法分析,所以很开心.就想写下来,记录自己的破解过程和思路.
1.爆破
打开软件,输入假码,点击ok
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

出现错误提示窗口
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

我们使用F12暂停法:
不点击确定,直接F12,然后程序暂停,使用alt+k进入"调用堆栈"窗口
发现有一处调用是来自程序领空,我们右键,选择,显示调用,来到程序领空
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

之后,我们向上一翻,发现有一处跳转,跳向了一处错误提示:
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

我们来到这里,选中该行,在提示窗口发现,这个跳转来自0040258B,右键"转到来自":
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

我们发现此处跳过了正确提示:
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

那我们试着将这个跳转直接nop掉
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

F9运行,点击确定,关闭刚才提示的错误窗口,再次输入假码,直接提示" You Get it",我们爆破成功!
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

2.算法分析
(以下算法分析都是我的个人片面见解,如有错误,敬请指正!)写在前面:在这之前我没有接触过VB的程序,所以分析的时候就有点憨,把一个简单的东西,复杂化了
我们撤销刚才的nop,并在这个关键条下断点,在堆栈窗口并没有发现类似真码的东西.
索性从段首下断,运行程序
一直运行,观察堆栈,发现可疑数据:

160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编


我们猜测,AKA-是前缀,585235是后缀,拼接字符串得"AKA-585235",验证,果然123456得密码就是AKA-585235
我们查看程序,能够发现"AKA"
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

但是却不知道585235是从哪来,我们寻找这串数字最先出现的地方.
断点还是位于段首,运行程序,点击"OK",程序暂停在段首,我们F8单步运行,仔细查看堆栈,看没有有与585235相似的数据产生.
我们发现,当程序运行完这个call之后,eax出现了585235,eax一般做为程序返回值的寄存器

160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

我们再从这个call网上看,发现运行这个call之前,程序将edi入栈,那么edi中的数据应该就是这个函数的参数,使用堆栈的方法进行传参.
那我们开始分析,edi中的数据是什么东西,向上一翻,我们发现赋值edi的核心代码:
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

我们可以看出edi=账号长度*0x17CFB+账号的第一位数据的ascii码=8EE13
找到参数来源之后,我们走进关键call,去看看他用我们edi中的数据做了什么:
我们用同样的方法,找到使得堆栈中出现585235的关键call
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

我们跟进分析
进入call之后呢我们发现ecx=8EE13,就是我们的edi,我们看他用ecx中的数据来做什么

160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

走完这个循环之后,我们发现:
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

结果是:35==>堆栈 33==>堆栈 32==>堆栈 35==>堆栈 38==>堆栈 35==>堆栈
然后从后面算法分析得,他又逆着把数据从堆栈中取了出来
这时我突然发现,35 38 35 32 33 35 这正是585235的ascii码
得出他们的过程也就是8EE13不断的除以10(十进制),得出的余数
这不正是十进制转换!!
我用计算器验证了一下
8EE13的十进制:

160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

然后我就顿悟了,在程序领空的时候,我进入的关键call,是16进制转10进制的函数,这个vb函数我记住他了:
160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编


总结一下,真码的计算方法:
"AKA-"+"(账号长度*0x17CFB+账号的第一位数据的ascii码)的十进制"
为了验证是否正确,我们先算一下账号12345的真码

160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编


所以真码应该是"AKA-487704"
算法破解成功:

160Crackme--02 Afkayas 爆破算法分析 - Helpful_冰凌汇编

本帖最后由 Helpful 于 2022-4-22 22:43 编辑
冰凌汇编免责声明
以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|站点统计|Archiver|小黑屋|RSS|冰凌汇编 ( 滇ICP备2022002049号 滇公网安备 53032102000029号)|网站地图

GMT+8, 2022-9-25 06:16 , Processed in 0.129951 second(s), 7 queries , Redis On.

冰凌汇编 - 建立于2021年12月20日

Powered by Discuz! © 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表