拿到程序后,习惯性的扔到IDA里看下 哟 看到了什么 Registration Succesful!
跟着走 应该就是这儿了 换OD
程序扔OD里跑起 随便输了个123456看看
加个断点再看 看来没错就是这儿了
往上翻 直到看到 GetDlgIteTextA 加个断点
看来这里就是我们要分析的起点了 开始往下逐步执行
经过第2个call后 eax变为6 我怀疑该函数为取注册码长度 用12345 试了下 发现eax变为5 由此确认该函数的功能为取注册码长度
往下分析代码看到紧接着 一个jnz 怀疑注册码的长度应该为4 跟着jnz跳过去 验证这个猜测
换了1234 跟着程序继续往下走 接下来这段代码就很直观了 判断注册码中有等于0的就跳转 第一位不等于1也跳 第二位不等于5也跳
由此可以猜出前2位为1和5 要是保持这个难度 那真是毫无难度了
我一看到f开头的汇编指令就头疼 跟着走了几步不知道它要干什么 糊里糊涂的 只好另寻它法
从关键跳jnz short 004012D6开始逆向分析
百度了下 sahf 说什么把AL赋给flag 往上找ax
fstsw不太清楚是干嘛的 反正是操作ax的 继续往上 fcomp 一个固定的值?
和一个固定的值进行比较操作 可疑大大的啊
下断点看看 384和179比较 看来有点意思 换了1511得到128 于是猜测
注册码的后两位经过种种运算得到的结果和384比较 相等的时候 注册码就应该是对的了
在该断点断住后 直接在ST0里改成384 运行成功注册 猜测验证 下面就到了 激动人心的猜验证码环节
暴力的猜验证码 猜了13次终于推出来了
智商不够 暴力来凑
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)