使用异常进行反调试是利用异常处理的机制对调试器进行一些操作。
原理是自己处理了异常就会走正常流程,如果没有接收到自己的异常,就说明异常被调试器接收了,无法正常处理。那么就可以判断是在调试器中运行的。
我们先来创建一个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没有弹窗,是因为被记录下来了)
利用异常进行反调试的正常情况下,在这一步识别到调试器之后
会做一些误导分析者这里是正常执行位置的假象,从而达到利用异常进行反调试的目的。