X86逆向11:F12暂停法的妙用

本节课将介绍F12暂停法的使用技巧,F12暂停法的原理其实很简单,当我们点击OD中的暂停按钮时,OD会将当前的堆栈状态保存起来,并暂停当前窗体的线程执行,直到我们点击运行按钮OD才会唤醒全部线程并继续执行程序,我们可以在OD暂停的时候得到一些有价值的东西,这在软件破解中也是一个很不错的技巧。

------------------------------------------------------------
本章难度:★★★☆☆☆☆☆☆☆
课程课件:CM_11.zip
------------------------------------------------------------

1.在实战之前先来用一个CM程序来演示F12暂停法的使用技巧,OD直接载入CM程序,然后运行程序点击关闭按钮,会弹出一个提示框,我们将使用F12暂停法把这个弹窗去除掉,好了直接开搞。

2.出现弹窗后,直接点击暂停按钮或按下【F12】,程序在暂停后有时会弹出一个窗口,提示是否等待5秒,这里我们选择否,不然又会等5秒。

3.紧接着我们按下【Alt+K】,会出现以下提示信息,这个就是堆栈的当前状态,只不过被暂停了,以下我们可以看到MessageBox提示框。

4.直接右键,选择显示调用,回来到反汇编窗口。

5.直接在这个调用位置,下一个F2断点,然后重新载入程序。

6.运行后,我们直接关闭程序,然后回到OD,会发现OD被断下了,直接接单步【F8】出这个CALL。

7.出CALL后,会发现这一层并没有能跳过弹窗的关键跳转,不要犹豫【Ctrl + F9】执行到程序返回,【F8】直接出CALL。

8.出CALL后发现一个关键跳转,默认是没有跳转的所以弹窗了,我们这里强制它跳转直接改成JMP,然后保存,OK去弹窗成功。

实战:破解HyperSnap 7专业版

免责声明:该教程仅用于技术交流,并无任何商业目的,您不得将下述内容用于商业或者非法用途,否则后果自负,如果您喜欢该程序,请支持正版软件,购买注册 ,得到更好的正版服务,如有侵权请邮件联系作者!

1.直接OD载入程序,然后运行,运行后会弹出如下窗口,我们直接按下【F12】让程序暂停。

2.暂停后,直接按下【Alt + K】,然后直接在【GetMessageW】函数上,右键,选择【显示调用】。

3.然后会看到如下代码,这里是系统领空无法直接修改,所以直接在断尾下断,并重新载入程序。

4.重新载入后,运行程序,程序会断在【retn】的位置,然后我们单步【F8】出这个CALL。

5.这个位置还是系统领空,我们直接在断尾直接下一个断点,然后重新载入程序。

6.重新载入程序后,回到程序点击【继续】按钮,回到OD中,我们直接出这个CALL,然后会看到如下,依然是系统领空,直接单步出CALL。

可能会出现程序跑飞的情况,直接在跑飞的call的下面下断,然后激活所有线程,然后继续单步出这个CALL。

7.出CALL后,终于回到了程序领空了,我们向上找,看看有没有能够跳过这个CALL的关键跳转吧。

8.这里第二个JNZ能够跳过验证CALL,但有跳转进来了就是第一个JNZ。

9.直接把第一个JNZ改成NOP,然后把第二个JNZ改成JMP无条件跳转,就可破解完成,直接保存文件即可。

原文地址:https://www.cnblogs.com/LyShark/p/11183481.html