这是一个输入注册码的小程序,查过无壳之后,首先使用OD加载程序,F8单步运行,停在了这个call,弹出弹窗,说明是输出函数:
我们先使用查找字符串的方法,进行定位:
观察上下文,在可能是关键跳转的地方下断点:
输入我们的字符串点击OK,此时来到了我们下的断点处
可以看到跳转未实现:
尝试修改一下让他实现:
实现之后继续运行来到第二个判断,可以看到实现了跳转:
单步执行之后发现弹出了错误提示:
于是我们回到上一个断点,让他不要实现跳转:
单步执行,可以看到弹出了正确提示框:
到此,修改关键跳转,nop掉,就实现了爆破:
在这里插入图片描述
保存,运行:
到此结束。接下来我们再来分析一下这个真正的序列号是什么:
刚刚我们已经找到了判断序列号的代码,一步一步分析:
在这里我们重点关注的是eax的走向 ,可以看到他是每次从我们的输入序列中取出一个字符,然后+A,最后把他拼接到一个字符串中,存放在eax中,紧接着调用比较函数,使用eax和ecx中的UNICODE "kXy^rO|yXom\kMuOn*+"作对比。所以我们可以编写反推函数:
运行成功!