调试与反调试系列丨使用异常进行反调试

发布者:极安御信
发布于:2022-06-16 23:34

使用异常进行反调试是利用异常处理的机制对调试器进行一些操作。

原理是自己处理了异常就会走正常流程,如果没有接收到自己的异常,就说明异常被调试器接收了,无法正常处理。那么就可以判断是在调试器中运行的。

我们先来创建一个DLL项目。步骤如下:


  1.  选择新建项目


2.创建win32控制台应用程序->点击确定


3.勾选空项目,完成


4.新建源文件entry.cpp


5.配置

5.1 选择属性


5.2修改运行库,应用


6. 添加#include、#include、主函数和默认循环


7. 要创建一个线程,先写一个线程回调


8.在主函数里创建线程


9.填入检测调试器用的代码


9.1在try触发异常,通过EXCEPTION_EXECUTE_HANDLER(异常处理常量)判断要自行处理异常,进入到异常处理的代码执行


9.2手动写一个异常语句_asm int 3 (软件断点)


9.3如果被调试器接收没有处理,就会崩(int 3触发异常,调试器识别为自行下的断点)


9.4自行处理加continue(跳出去,进行下一个循环)


9.5声明是一个已知的异常,已知异常的处理代码就是continue,没有调试器附加,这个代码就会一直运行(内部其实触发了异常,不过异常已经被自行处理掉了)


10. 在调试器里打开,

没有处理的情况下,调试器一直在暂停

处理的情况下

在od打开,出现弹窗(在x32dbg没有弹窗,是因为被记录下来了)

利用异常进行反调试的正常情况下,在这一步识别到调试器之后

会做一些误导分析者这里是正常执行位置的假象,从而达到利用异常进行反调试的目的。



声明:该文观点仅代表作者本人,转载请注明来自看雪