绕过 IsDebuggerPresent

逆向工程 艾达 反调试
2021-06-12 15:44:01

我有一个地址,我认为它不允许我在 IDA 中运行调试器,我需要帮助来阻止它。

还有,是什么kernel32_IsDebuggerPresent意思?

在此处输入图片说明

1个回答

我们来看看MSDN中对函数的描述

确定调用进程是否正在被用户模式调试器调试

如您所料,此函数通常用作反调试技巧,目的是在程序检测到正在调试时中断进程。IsDebuggerPresent检查PEB(进程环境块)中BeingDebugged标志,如果确实正在调试,将返回一个非零值。

您有多种选择可以绕过此技巧,其中一些是:

运行时修补:

  • IsDebuggerPresent被调用后将EAX 设置为零
  • 通过注入以下代码修改 PEB 本身:

    mov eax,dword ptr fs:[18]
    mov eax,dword ptr ds:[eax+30]
    mov byte ptr ds:[eax+2],0
    

    这将修补BeingDebuggedPEB 中标志,确保IsDebuggerPresent始终返回 0。

  • 您可以使用像idastealth这样的插件

永久补丁:

  • 您可以使用 NOP 或类似内容填充对 IsDebuggerPresent 的调用以跳过检查