唐凌 发表于 2018-7-6 13:08:10

一种简易的反调试手段

本帖最后由 tangptr@126.com 于 2018-7-6 13:08 编辑

原理很简单,就是利用调试陷阱中断(int 2d指令)结合SEH异常捕获实现。
只需要把
__asm int 0x2d
这行代码放进try-catch块里即可,代码如下:
void Main()
{
        __try
        {
                __asm int 0x2d
                printf("Debugger detected!\n");
        }
        __except(1)
        {
                printf("Debugger not detected!\n");
        }
        system("pause");
}
当执行到int 2d的时候,发生调试陷阱异常,若有调试器则被调试器捕获,若无调试器则被SEH捕获。当调试器捕获调试陷阱异常时,恢复执行后不会进入SEH异常处理,从而实现检测调试器。
经测试成功检测到了windbg,但无法测试OD,打开OD全是乱码233333
这种方法对VS调试器无效,因为它不捕获这个异常。

元始天尊 发表于 2018-7-6 13:11:50

善哉,善哉:lol

Golden Blonde 发表于 2018-7-6 15:33:58

传统反调试手段基本都被研究透了。你说的这个我记得10年前的一个『反反调试插件』就已经把它ANTI了。
页: [1]
查看完整版本: 一种简易的反调试手段