方式一基本的打补丁方式:

  打开程序之后首先会跳出一个nag窗口,从中我们知道了可以将nag窗口作为切入点,只要找到了nag的触发点就等同于找到注册与未注册的判断的点
OD使用教程8-LMLPHP
右键-查找-所有参考文本字串
OD使用教程8-LMLPHP
拖到最上面右键查找文本,两项都选,然后输入关键字
OD使用教程8-LMLPHP
然后点击确定,找到命令OD使用教程8-LMLPHP
双击找到代码位置OD使用教程8-LMLPHP
发现nag窗口程序上面是一个跳转,给跳转下一个断点OD使用教程8-LMLPHP
找到文件头(一般以55开头)下断点OD使用教程8-LMLPHP
重新载入程序,执行。修改跳转的值使跳转实现OD使用教程8-LMLPHP
点击执行然后nag窗口就不见了
OD使用教程8-LMLPHP
虽然窗口上的未完成注册的注释已经没了。但是打开help里的about,发现还是为注册所以还是没有完全成功OD使用教程8-LMLPHP
然后以Unregistered Version(注意大小写,而且要完全一样)为关键字在参考文本字串里查找,找到之后发现不少可以Ctrl+L继续找直到找到为止OD使用教程8-LMLPHP
找到之后双击找到代码,发现它在一个跳转里面,意思就是只要跳转成功就可以跳过这个指令
OD使用教程8-LMLPHP
然后给跳转下个断点,往上找到文件头下断点,重新载入,修改跳转的值使跳转成功OD使用教程8-LMLPHP
执行程序,打开about,然后程序停在了过程的入口处
OD使用教程8-LMLPHP
然后f8往下走,路过一个关键的跳转使跳转实现,然后f8继续走观察了一下,发现程序没有问题了然后执行
OD使用教程8-LMLPHP
然后就成功了
OD使用教程8-LMLPHP
接下来就开始打补丁:
重新载入,将跳转改成无条件跳转jmp。然后执行程序
OD使用教程8-LMLPHP
打开about,跳到程序的入口处
OD使用教程8-LMLPHP
去掉断点,然后f8继续走到下一个跳转再改成无条件跳转
OD使用教程8-LMLPHP
然后不补丁就打好了,然后保存程序就成功了
方法二:
打开前面下过断点却没有修改的程序
OD使用教程8-LMLPHP
仔细观察就会发现跳转前会有判断的值,而这个值又是环环相扣的走到这条代码,发现注释内容是指向了另一个代码,很有可能这另一个代码的值才是真的值
OD使用教程8-LMLPHP
再往下走看注释,发现值为0
OD使用教程8-LMLPHP
注意看发现这一小段的两个跳转都是跳到了同一个出口,试想一下为什么药两个判断才能跳过这段程序
OD使用教程8-LMLPHP
点到下一个跳转,然后继续往下走就会发现 fld这条命令存的值为15,也就是说这个条转里面其实是岁15这个值进行校检
OD使用教程8-LMLPHP
发现其实上面的一个跳转其实是检测是否注册,回到那条指令,右键注释行,打开数据窗口中跟随数值发现60EB8C=0而且这个代码经常出现所以应该是关键点
OD使用教程8-LMLPHP
OD使用教程8-LMLPHP
然后我们就跟踪这个值,右键-查找参考-地址常量OD使用教程8-LMLPHP
为了找到初始化这个值得地方我们将所有存在这个值的命令都下断点,右键-在每个命令上设置断点
OD使用教程8-LMLPHP
OD使用教程8-LMLPHP
然后重新载入找到初始的命令。然后在注释看到这个数值的值还是610C4A
OD使用教程8-LMLPHP
往下走一步发现610C4A的值给了edx并且等于0,al又填充了610C4A都等于0
OD使用教程8-LMLPHP
最后发现判断其实就是用al和0做比较
OD使用教程8-LMLPHP
那么我们将al改成1就可以使跳转成功了
OD使用教程8-LMLPHP
OD使用教程8-LMLPHP
然后保存,右键-复制到可执行文件-所有修改-全部复制
OD使用教程8-LMLPHP
然后会跳出一个窗口说程序重定位,但目前不会影响这个程序所以忽略
OD使用教程8-LMLPHP
最后备份保存数据到文件就可以了。然后程序就自动破解了
04-24 12:19