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/) 好用,谢谢 给楼主点赞 感谢大佬分享,学到了
页:
[1]