kn0sky 发表于 2021-9-23 22:59

160个CreakMe系列-002-Afkayas.1

上次打算挑战这160个CM,结果做了几个就没再动了,这次补了点基础我又回来了,这次我将再一次挑战160个CM,争取今年年底之前完成攻略!加油!

## 环境准备

- Windows 10 21H1 虚拟机
- Detect It Easy
- IDA
- x32/x64dbg

## 收集信息

程序运行需要msvbvm50.dll,去网上随便下一个放到程序同目录下就ok

接下来,DIE查一下:



**32位GUI程序,用VB5.0写的,无壳**

> VB程序是我第一次遇到,搜一下VB逆向相关文章,也许会有所帮助:(https://www.cnblogs.com/bbdxf/p/3780187.html)


**用户名+序列号的登录形式**,破解方式有两种:

- 暴力破解,修改验证逻辑
- 逆向序列号生成算法,自己算序列号

本题的暴力破解太简单了,就不介绍了,在逆向程序逻辑的时候改一下跳转就行,这里以逆程序密码生成和验证为主。

## 逆向序列号生成算法

IDA 先上,因为点击OK了以后,会有对话框弹出,在IDA里导入表搜VB的对话框函数名:`rtcMsgBox`

> 由查阅资料(收集信息那里有写)可知,函数名是rtcMsgBox,函数的调用特征是,连着lea和push 总共5个参数然后call然后隔一行紧接着另一个call


然后`ctrl + x`该函数查看交叉引用,找到调用的地方:


有四个地方调用了这个函数,随便进一个看看:


嗯,找对地方了,往上找一找,找到判断逻辑上面看看:


简单分析了一下,这里大概是把一个变量拿出来和`"AKA-"`进行拼接,然后把拼接后的结果和另一个变量进行对比

接下来动态分析看看,根据搜索字符串找到函数地址,然后往上翻一翻,找到刚刚静态分析不太确定的地方下断点,窗口里随便输入点啥让程序断下来,这里是判断逻辑:


红框处是跳转判断的地方,判断用的si的值来源于上面字符串对比,如果对比成功返回0,补码是0,inc之后是1,就会不进行跳转,否则对比失败返回1,补码是FFFFFFFF,inc之后变成了0,ZF=1,会触发je跳转

这里的正确密码在之前就计算好了,这里代码只是判断逻辑,要直到正确密码是怎么来的,继续往上找。




这里的密码生成逻辑是相当简单了:

1. 获取字符串长度 length
2. 计算中间值,mid1 = length * 0x17cfb
3. 取出首字母ascii值 val
4. 再次计算中间值,mid2 = mid1 + val
5. 将mid2转换成十进制,转换成字符串
6. 拼接`AKA-`,变成`AKA-mid2`

这里我用户名的首字母是s,计算:`5 \* 17cfb + 73 = 7715A`,转换成十进制:`487770`,密码为:`AKA-487770`

测试:


## 参考资料

(https://www.cnblogs.com/bbdxf/p/3780187.html)

(https://www.ascii-code.com/)

Allen666 发表于 2021-9-24 14:21

好用,谢谢

titaz 发表于 2021-9-24 20:36

给楼主点赞

hua111 发表于 2021-10-12 10:01

moshuiNW 发表于 2022-4-21 11:11

感谢大佬分享,学到了
页: [1]
查看完整版本: 160个CreakMe系列-002-Afkayas.1