考古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 , 小菜只有一个思路爆破 , 逆算法就更别提了[滑稽] , 最过分的是 , 大佬都不教我破[淦] , 差评 , 必须给差评
思路{
- push 一个参数后 , ESP寄存器的值会-4 , 下内存写入断点
- push 一个参数 , 会修改ESP寄存器值指向的地址 (123456这个地址指向了001000 , push过后 123456这个地址指向了401000)
往死里给堆栈下断点 , 肯定会找到传参的地方(可能是最笨的方法)
}
打开软件 , 输入任意假码 , 发现"failed" 字符串
载入OD , 在MessageBoxA , MessageBoxW ,MessageBoxExA , MessageBoxExW函数下断
发现程序在MessageBoxA 这个函数断下 , 在堆栈19F6F0这个地址发现了 "failed!"字符串
将地址转到 439012 , 发现了一条花指令
在43900B地址上 , 按下Ctrl+E , 将8B改成90
发现指令显示变正常了 , 但是没有正常函数调用的样子
如{
push xxx
push xxx
call 函数
} , 可以怀疑有个地址直接jmp过来调用MessageBoxA , 参数早就传好了.(在43900C这个地址下断点 , 就知道了)
在ESP: 0019F6E8+194的地方 , 发现了一个返回到按下Enter , 如果没有发现OD界面里没有这个+190 , +XXXX的 , 双击一下 , 当前ESP寄存器的值就行了
4011C5 , 判断CALL , Enter键进CALL
一个大跳转出现了 , 继续按下Enter键
噩梦开始的地方 , F2下个断点 , 在44068A这个地址 , 并返回软件 , 点击注册按钮 ,"Register"
发现程序断下了
在内存窗口中Ctrl+G 转到19F6F0这个地址(这个地址在调用MessageBoxA时 , 值指向了"failed"这个字符串)
随便选几行地址 , 右键 ,下个内存写入断点 , F9运行
发现程序断下 , 但有点不对劲 , 继续F9 , 直到地址对劲为止[滑稽]
一直F9发现 程序跑起来了 , 没有断下 , 静静等待 , 直到他断下为止 , 当前05点48分 , 这可能要跑几分钟 ,(可能是我下断点的姿势有问题 , 但是 , 有个十分明显的问题 , 就是OD跟踪的太慢了! , 换个调试器肯定是嗖嗖嗖嗖的)
在程序跑起来的途中 , 可以在堆栈发现程序调用GetDlgItemTextA获取了编辑框内容
05点52分 , 程序终于再次断下 , 继续一路F9!
在4012BF , 按F9之后 , 程序跑飞了 , 下个断点 , 重新来
这次下个硬件访问断点 , 继续F9
发现在43F879跑飞 , 重新按下F2在这个地址 , 这次 下个内存写入断点
重新注册 , 按下F9 , 发现程序跑到了 443CCB , 出现错误提示了!!
OD右键分析
发现 443349这个地址 , 跳到了错误代码(failed)
改成NOP , 重新测试~~
OHHHHHHHHHHHH~~~~
试试 , 官方提供的Key ,提示和这个一样不一样 , 发现一样~~~
时间: 06点01分