单步跟踪寻找关键call

对于载入OD后一调试就跑飞的程序,可以尝试一下单步法。

今天所用到的示例程序仍然是《Shark恒零基础百集VIP破解教程》中的示例程序:

发现每次打开软件都会弹出提示安装软件的消息框:

载入OD前先查壳:

Delphi的程序,无壳,下面载入OD:

发现只要开始单步调试,程序就弹出前面的安装软件的提示框:

关闭提示框后程序结束运行,这里就是程序跑飞的现象。

发现载入OD后,程序入口点是一个call:

F7进入这个call,然后单步调试(调试的时候对运行后会弹出消息框的call(关键call)语句下断,同时观察是否有跳转跳过该关键call):

遇到向上跳转的语句,可以选中该语句下面最近的非跳转和非CALL的语句(如果是跳转或者call可能会漏掉重要信息),F4运行到指定位置:

经过N次单步调试后找到第一个关键call:

下断后重新载入程序,运行程序,来到下断的call处,向上溯源并未发现可以跳过的跳转,那么删除该断点(防止下一次运行时又在此处断下)F7步入这个call:

接着继续单步调试,重复上面的步骤,找到第二个关键call:

重新载入OD,运行至该call,发现没有跳转跳过,删除断点,F7单步进入该call:

接着继续单步运行,寻找三个关键call:

没有跳转跳过,继续重复上述步骤,直至找到有跳转跳过的关键call:

接下来是更改跳转,达到破解目的:

先在跳转处下断,删除call处的跳转,重新载入,测试一下:

果不其然,运行后程序在此处断下,但跳转并未实现,修改标志位Z,让跳转实现,运行程序,发现提示框不再弹出,目的达到,接着就是将jnz跳转修改为无条件跳转jmp:

打开保存后的文件,发现目的达到:


 
 
 

猜你喜欢

转载自blog.csdn.net/song_10/article/details/84567895