PEB结构中BeingDebugged标志的目的是什么?

时间:2013-11-25 22:35:03

标签: windows reverse-engineering

这个标志的目的是什么(来自OS方面)? 哪个函数使用此标志除了isDebuggerPresent?

非常感谢

2 个答案:

答案 0 :(得分:2)

它实际上是相同的,但读取PEB不需要通过内核模式跳转。

更明确地说,IsDebuggerPresent API已记录并且稳定;可以想象,PEB结构不会在不同版本之间发生变化。

此外,IsDebuggerPresent API(或标志)仅检查用户模式调试器;通过此函数无法检测到内核调试程序。

为何将它放入PEB?它节省了一些时间,这在NT的早期版本中更为重要。 (在执行某些运行时验证之前,有许多用户模式函数会检查此标志,如果已设置,将会中断调试器。)

如果您将PEB字段更改为0,那么IsDebuggerPresent也将返回0,但我相信CheckRemoteDebuggerPresent不会。

答案 1 :(得分:0)

如您所见,IsDebuggerPresent标志从PEB读取此信息。据我所知,PEB结构不是官方API,但IsDebuggerPresent是你应该坚持到那一层。

如果您正在进行复制保护以防止调试您的应用,则此方法的使用非常有限。正如您所发现的那样,它只是您处理空间中的一个标志。如果有人调试你的应用程序,他需要做的就是将PEB表中的标志清零并让你的应用程序运行。

您可以使用方法CheckRemoteDebuggerPresent提高级别,您可以在其中传入自己的流程句柄以获得答案。此方法进入内核并检查是否存在与您的进程相关的特殊调试结构(如果正在调试)。用户模式过程不能伪造这个,但你知道只需删除你的支票就可以解决....