反调试——IsDebuggerPresent

本文详细介绍了如何通过查询进程环境块(PEB)中的IsDebuggerPresent标志来判断进程是否在调试器环境下运行,并提供了两种函数调用方式,包括直接调用和动态加载实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:查询进程环境块(PEB)中的IsDebugged标志。

如果进程没有运行在调试器环境中,函数返回0;如果调试附加了进程,函数返回一个非零值。

直接调用实现样例:

BOOL CheckDebug()  
{  
    return IsDebuggerPresent();  
}  

看到过的一种函数动态调用实现:

BOOL CheckDebug()  
{         
       HANDLE hKernel32 = NULL;
       DWORD dwCallResult = 0;
       char szModuleName[MAX_PATH] = { 0 };
       PVOID pIsDebuggerPresent = NULL;

       lstrcpy(szModuleName, "kernel32.dll");
       hKernel32 = GetModuleHandleA(szModuleName);
       if (hKernel32)
       {
              char szTempBuffer[40] = { 0 };
              szTempBuffer[0] = 'I';
              szTempBuffer[1] = 's';
              szTempBuffer[2] = 'D';
              szTempBuffer[3] = 'e';
              szTempBuffer[4] = 'b';
              szTempBuffer[5] = 'u';
              szTempBuffer[6] = 'g';
              szTempBuffer[7] = 'g';
              szTempBuffer[8] = 'e';
              szTempBuffer[9] = 'r';
              szTempBuffer[10] = 'P';
              szTempBuffer[11] = 'r';
              szTempBuffer[12] = 'e';
              szTempBuffer[13] = 's';
              szTempBuffer[14] = 'e';
              szTempBuffer[15] = 'n';
              szTempBuffer[16] = 't';
              szTempBuffer[17] = '\0';
              lstrcpy(szModuleName, szTempBuffer);
              pIsDebuggerPresent = GetProcAddress((HMODULE)hKernel32,  szModuleName);
              if (pIsDebuggerPresent)
              {
                     __asm
                     {
                           mov eax, pIsDebuggerPresent
                           call eax
                           mov dwCallResult, eax
                     }
              }
       }
       return dwCallResult;
}  

欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值