首页 > 解决方案 > 如何在进程环境块中触发“BeingDebugged”字段

问题描述

我想了解 API“IsDebuggerPresent”是如何工作的。据我目前了解,API 检查 TEB 结构,然后转到 PEB 偏移量,然后检查其中的“BeingDebugged”标志。

我找不到是什么触发了操作系统核心中的这个标志。

标签: apireverse-engineering

解决方案


由于我们知道 IsDebuggerPresent 只能检测用户模式调试器,而不能检测其他类型的调试器(例如内核调试器),因此很可能意味着该标志设置在DebugActiveProcess函数中的某个位置。

要验证这一点,您可以进行快速设置。打开以下

  1. 记事本(我们将调试此应用程序)
  2. Ollydbg 或其他 dbger(附加到记事本)
  3. 内存查看工具,例如HeapMemView(将此附加到记事本以查看 peb 标志)
  4. 附加到 ollydbg 的第一个实例上的另一个调试器实例。

所以如果你断点DebugActiveProcess并跟踪它,你会看到它最终到达 NtDebugActiveProcess。在它进出内核空间后,BeingDebugged 标志被设置。

如果您想更深入,您将需要能够使用内核调试器,并且知道如何正确设置它,否则您最终只会使您的机器崩溃。

以后有时间我可能会写一个更详细的回复


推荐阅读