0
点赞
收藏
分享

微信扫一扫

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

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

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

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

  1. 选择新建项目
    01.png
    2.创建win32控制台应用程序->点击确定
    02.png
    3.勾选空项目,完成
    03.png
    4.新建源文件entry.cpp
    04.png
    5.配置

5.1 选择属性
05.jpg

5.2修改运行库,应用
06.png

  1. 添加#include<stdio.h>、#include<Windows.h>、主函数和默认循环
    07.png

  2. 要创建一个线程,先写一个线程回调
    08.png

8.在主函数里创建线程
09.png
9.填入检测调试器用的代码
10.png

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

9.2手动写一个异常语句_asm int 3 (软件断点)
12.png
9.3如果被调试器接收没有处理,就会崩(int 3触发异常,调试器识别为自行下的断点)
13.png
9.4自行处理加continue(跳出去,进行下一个循环)

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

  1. 在调试器里打开,

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

处理的情况下
17.png
在od打开,出现弹窗(在x32dbg没有弹窗,是因为被记录下来了)

18.png
利用异常进行反调试的正常情况下,在这一步识别到调试器之后
19.png
会做一些误导分析者这里是正常执行位置的假象,从而达到利用异常进行反调试的目的。

举报

相关推荐

0 条评论