考古一个16年的CM , 用最笨的方法爆破
本帖最后由 成熟的美羊羊 于 2021-5-20 12:23 编辑## 考古16年的CM
CM链接: https://down.52pojie.cn/Challenge/2016_Security_Challenge/%E3%80%90%E7%AC%AC%E4%B8%80%E9%A2%98%E3%80%91%E3%80%90%E5%90%BE%E7%88%B1%E7%A0%B4%E8%A7%A32016%E5%AE%89%E5%85%A8%E6%8C%91%E6%88%98%E8%B5%9B%20%E3%80%91.rar
解压密码:D66F78C044047C81C96A12666505C128
这个CM , 小菜只有一个思路爆破 , 逆算法就更别提了[滑稽] , 最过分的是 , 大佬都不教我破[淦] , 差评 , 必须给差评
思路{
1. push 一个参数后 , ESP寄存器的值会-4 , 下内存写入断点
2. push 一个参数 , 会修改ESP寄存器值指向的地址 (123456这个地址指向了001000 , push过后 123456这个地址指向了401000)
往死里给堆栈下断点 , 肯定会找到传参的地方(可能是最笨的方法)
}
打开软件 , 输入任意假码 , 发现"failed" 字符串
!(https://i.loli.net/2021/05/19/M43Y9xAZpaPXBck.png)
载入OD , 在MessageBoxA , MessageBoxW ,MessageBoxExA , MessageBoxExW函数下断
发现程序在MessageBoxA 这个函数断下 , 在堆栈19F6F0这个地址发现了 "failed!"字符串
!(https://i.loli.net/2021/05/19/8ybkWXdGc4LKYfw.png)
将地址转到 439012 , 发现了一条花指令
!(https://i.loli.net/2021/05/19/rPum6JexniwcDIp.png)
在43900B地址上 , 按下Ctrl+E , 将8B改成90
!(https://i.loli.net/2021/05/19/DalePKfiZuF8prm.png)
发现指令显示变正常了 , 但是没有正常函数调用的样子
如{
push xxx
push xxx
call 函数
} , 可以怀疑有个地址直接jmp过来调用MessageBoxA , 参数早就传好了.(在43900C这个地址下断点 , 就知道了)
!(https://i.loli.net/2021/05/19/Gm8j7onPDIrkcMT.png)
在ESP: 0019F6E8+194的地方 , 发现了一个返回到按下Enter , 如果没有发现OD界面里没有这个+190 , +XXXX的 , 双击一下 , 当前ESP寄存器的值就行了
!(https://i.loli.net/2021/05/19/wB3jvm5TPZLrnbE.png)
4011C5 , 判断CALL , Enter键进CALL
!(https://i.loli.net/2021/05/19/i6mMIj7l2vTba4Y.png)
一个大跳转出现了 , 继续按下Enter键
!(https://i.loli.net/2021/05/19/YU8cMaIe1DulQO6.png)
噩梦开始的地方 , F2下个断点 , 在44068A这个地址 , 并返回软件 , 点击注册按钮 ,"Register"
!(https://i.loli.net/2021/05/19/Q2DROwZFUYtBSvz.png)
发现程序断下了
!(https://i.loli.net/2021/05/19/Eylwc7sagZ1Ppki.png)
在内存窗口中Ctrl+G 转到19F6F0这个地址(这个地址在调用MessageBoxA时 , 值指向了"failed"这个字符串)
随便选几行地址 , 右键 ,下个内存写入断点 , F9运行
!(https://i.loli.net/2021/05/19/5hnZmdO9A8porTB.png)
发现程序断下 , 但有点不对劲 , 继续F9 , 直到地址对劲为止[滑稽]
!(https://i.loli.net/2021/05/19/g19ryuRILjZtXGw.png)
一直F9发现 程序跑起来了 , 没有断下 , 静静等待 , 直到他断下为止, 当前05点48分 , 这可能要跑几分钟 ,(可能是我下断点的姿势有问题 , 但是 , 有个十分明显的问题 , 就是OD跟踪的太慢了! , 换个调试器肯定是嗖嗖嗖嗖的)
!(https://i.loli.net/2021/05/19/D9kqWmKSzNnP28V.png)
在程序跑起来的途中 , 可以在堆栈发现程序调用GetDlgItemTextA获取了编辑框内容
!(https://i.loli.net/2021/05/19/p2Ehm5fRtzJDwMQ.png)
05点52分 , 程序终于再次断下 , 继续一路F9!
!(https://i.loli.net/2021/05/19/v84E2OZF37IkJVB.png)
在4012BF , 按F9之后 , 程序跑飞了 , 下个断点 , 重新来
!(https://i.loli.net/2021/05/19/Wm9FxJIonDp6fLM.png)
这次下个硬件访问断点 , 继续F9
!(https://i.loli.net/2021/05/19/ZSNijUqbcnEel9J.png)
发现在43F879跑飞 , 重新按下F2在这个地址 , 这次 下个内存写入断点
!(https://i.loli.net/2021/05/19/U6AjTzgnZ3SIkVx.png)
!(https://i.loli.net/2021/05/19/dv1QNOAf4Xo7pjc.png)
重新注册 , 按下F9 , 发现程序跑到了 443CCB , 出现错误提示了!!!(https://i.loli.net/2021/05/19/TLKzdBtySA5RlsU.png)
OD右键分析!(https://i.loli.net/2021/05/19/OZmwSF92n8Ubjgs.png)
发现 443349这个地址 , 跳到了错误代码(failed)
!(https://i.loli.net/2021/05/19/mqisv3MxPDrNJRF.png)
改成NOP , 重新测试~~
!(https://i.loli.net/2021/05/19/mqUgwWz4yNnX3ML.png)
OHHHHHHHHHHHH~~~~
!(https://i.loli.net/2021/05/19/IGdoHOEkj5ZN4fi.png)
试试 , 官方提供的Key ,提示和这个一样不一样 , 发现一样~~~
时间: 06点01分
!(https://i.loli.net/2021/05/19/e2NzaXyW4AIOQxb.png) 其实你这弄得繁琐了,这玩意算法有点复杂,爆破很简单,下GetDlgItem断点,获取到输入的数据后,硬件数据访问断点即可到达验证函数,函数返回1即可验证成功。。另外说一点,这玩意貌似是写dll到内存,抹去pe头,所以关键点应是dll,exe花指令只是障眼法。 本帖最后由 成熟的美羊羊 于 2021-5-20 22:24 编辑
lichunfeng 发表于 2021-5-20 20:05
其实你这弄得繁琐了,这玩意算法有点复杂,爆破很简单,下GetDlgItem断点,获取到输入的数据后,硬件数据访 ...
函数返回1 , 这个返回值不敢乱搞[滑稽] , 这样一路跟踪哪个地址调用了MessageBoxA , 看到了cmp AL ,1 这条指令,我才敢改函数的返回值[滑稽] , 不过这样确实快速+1
这个Dll , 确实没有发现 膜拜大佬+1
{:301_974:} 花指令 难道你不知道od有个去花指令的插件吗? byh3025 发表于 2021-5-19 06:49
花指令 难道你不知道od有个去花指令的插件吗?
不知道x32dbg有没有。 非常好的实习资料,支持分享 厉害了楼主!学习了! 非常详细呀。希望能有更多的作品,一起学习一起进步。 学习了感谢分享 jy04468108 发表于 2021-5-19 08:42
不知道x32dbg有没有。
尴尬了,用OD的插件没能去除所谓的花指令{:301_1004:} byh3025 发表于 2021-5-19 11:05
尴尬了,用OD的插件没能去除所谓的花指令
那大佬要研究下,看看为啥会这样 学习学习!~~ 但是感觉挺复杂的。 不是灌水!~~~~