先用DI查下壳,VC++写的,无壳。
然后,打开软件看一下软件注册的情况
有弹窗,那载入OD看看能不能搜索到字符串
回到反汇编窗口,发现有两个JE都跳过了注册成功的代码
似乎很简单的样子,只要NOP掉这两个JE,不就可以了注册成功了。
分别下断点,F9运行,点VIP功能,程序被断下来,发现第一个JE的跳转没实现,不管它。
看下一个断点,跳转实现了,NOP掉。
再F9运行,发现虽然弹窗显示已经是VIP,但依然要求输入注册码。
看来不止这一处验证,必须得找到用来验证注册的关键CALL才行。
从下断点的JE处向上翻找,发现直到段首都没有找到关键CALL
但是有一段代码非常可疑,貌似实现了关键CALL的作用
既然这个的EAX这么关键,那就查找一下是在什么地方写入的数据
F9运行一下程序,点击VIP功能,让程序重新停在断点处。
寄存器窗口选中EAX-,右键----数据窗口中跟随
然后在数据窗口中找到的位置上点击右键---断点---硬件写入---DWord
下好断点后,禁止掉之前设置的断点,查看一下刚下的硬件写入断点
F9运行,程序被成功断了下来,下个断点,观察一下。
回车进CALL看看
既然怀疑这是关键CALL,试着修改段首,然后运行看看注册是否成功。
修改完后,F9运行,点击VIP功能,程序被断在断点处,删除所有断点,再运行程序,点击VIP功能,发现已经可以使用了
总结:
1 修改跳转不能实现破解的时候,要去寻找这些跳转调用的关键CALL。
2 如果没有发现关键CALL,要注意这些跳转上面的代码有没有赋值和比较的内容。
如果有,还是可以跟随到数据窗口来下各种硬件断点来尝试破解