一、破解过程
1、输入假码,得到提示:
2、载入OD中,查找字符串“注册码”,从结果中找到和提示中一样的“您输入的注册码不正确”
3、输入假码,继续运行程序,发现已经是注册版了
保存修改后运行,却出现了问题
对于这个问题的分析,在下面再详细说。
4、既然只是nop掉一个关键跳不行,那么就在找别的地方是否还得修改。
在关键跳上面,找到了关键call
0042E5CA . E8 91EBFFFF call 0042D160
就是这个call算出真码的。所以进入这个call看看去:
我们很容易发现有两个地方调用了这个call:其中一个就是上面找到的关键跳附近的0042E5CA,另一个是什么呢?
5、来到了428A0E处
又找到了一个关键跳,再次nop掉。
把所有修改保存出来,运行程序,发现就是注册版了,也不会像第3步中出错了。
二、对于第3步中出错的分析
1、把第3步中保存处理的程序载入OD中,发现一旦运行就会报错。
根据以前的经验,我就从开始就F8单步,可是刚运行了两句就报错了。
既然是运行到
004017A5 . E8 EEFFFFFF call <jmp.&MSVBVM60.#100>
报错的,那我就F7步入,看看到底是哪里导致的报错。结果就来到了系统空间
推测:系统空间肯定是不能够单步跟踪的,因为代码量太大,而且系统代码不应该是引发报错的地方。如果是系统空间代码出现的问题,运行原来的程序也会报错的。
实际:此时,运行原来的程序,也是会报错的。
但是仍然认为是程序的问题,而不是系统代码的问题。
2、在系统空间中,使用”Alt+F9“,想从系统空间跳回到用户代码。结果却是照样报错。
3、至此,我已经不知道再如何分析了。