使用异常进行反调试是利用异常处理的机制对调试器进行一些操作。
原理是自己处理了异常就会走正常流程,如果没有接收到自己的异常,就说明异常被调试器接收了,无法正常处理。那么就可以判断是在调试器中运行的。
我们先来创建一个DLL项目。步骤如下:
选择新建项目
![点击并拖拽以移动]()
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没有弹窗,是因为被记录下来了)

![点击并拖拽以移动]()
利用异常进行反调试的正常情况下,在这一步识别到调试器之后

![点击并拖拽以移动]()
会做一些误导分析者这里是正常执行位置的假象,从而达到利用异常进行反调试的目的。