精髓:找到关键验证方法或者关键跳转,将其修改
未注册
用OllyDbg将其载入,F9运行,ALT+E选择本程序模块
发现为如图样子
解决方法为:右键--分析--从模块中删除分析
变成如下代码
我们通过找软件的关键提示语句来找关键CALL或者跳转
右键中文查找Unicode
发现如下语句:
双击点进去,看到的代码是注册成功时要运行的代码
好了,现在该仔细考虑一下了,如果我们在写一个保护的时候,步骤是我先验证一下注册是否合法,如果合法会跳到注册成功的地方,否则跳到别处,所以我们猜测他的关键跳转应该在注册成功的代码上面。
往上找找到:
发现这三行代码影响成功与否,而最后的je跳转会跳过成功注册的代码,好了,我们在CALL处下断,运行程序执行到此,F8单步,CALL的返回值返回给EAX=0,test al,al之后,ZF标志位为1,影响到JE跳转,我们把ZF标志位置0,JE不跳转后,单步向下,提示注册成功:
好了,关键跳转找到了,第一想法是把JE跳转语句NOP掉,重启软件之后发现并不起作用。
由此想到JE的跳转是因为TEST al,al将标志寄存器更改,AL的值又是受刚才的关键CALL影响,所以我们去该这个关键CALL
右键---跟随 进去CALL的内部代码
我们想让此CALL返回1,可以在短尾也可以在段首更改代码:
在段首修改成这样,因为短尾市retn 0X4 故这里也是
好了,复制到可执行文件即可完成破解
成功如下,注册变为灰色按钮: