基于win32 api的反调试
说白了就是使用 windows 提供的api函数来检测是否被调试
1. IsDebuggerPresent()
底层原理:
检查进程环境块(PEB)的BeingDebugged标志。
微软说明:
反制调试方法(c++)
if (IsDebuggerPresent())
ExitProcess(-1);
2. Check/Remote/Debugger/Present
底层原理:
查询进程环境块(PEB)中的IsDebugged标志。
如果进程没有运行在调试器环境中,函数返回0;如果调试附加了进程,函数返回一个非零值。
它不仅可以探测系统其他进程是否被调试,通过传递自身进程句柄还可以探测自身是否被调试。
反制调试方法(c++)
BOOL bDebuggerPresent;
if (TRUE == CheckRemoteDebuggerPresent(GetCurrentProcess(), &bDebuggerPresent) &&
TRUE == bDebuggerPresent)
ExitProcess(-1);
技巧
直接创建一个线程实时监控(dog)
_beginthread(TheadDebug, 0, 0);
void TheadDebug(void*) {
while (!IsDebuggerPresent());
exit(1);
}