api - 如何在进程环境块中触发“BeingDebugged”字段
问题描述
我想了解 API“IsDebuggerPresent”是如何工作的。据我目前了解,API 检查 TEB 结构,然后转到 PEB 偏移量,然后检查其中的“BeingDebugged”标志。
我找不到是什么触发了操作系统核心中的这个标志。
解决方案
由于我们知道 IsDebuggerPresent 只能检测用户模式调试器,而不能检测其他类型的调试器(例如内核调试器),因此很可能意味着该标志设置在DebugActiveProcess函数中的某个位置。
要验证这一点,您可以进行快速设置。打开以下
- 记事本(我们将调试此应用程序)
- Ollydbg 或其他 dbger(附加到记事本)
- 内存查看工具,例如HeapMemView(将此附加到记事本以查看 peb 标志)
- 附加到 ollydbg 的第一个实例上的另一个调试器实例。
所以如果你断点DebugActiveProcess
并跟踪它,你会看到它最终到达 NtDebugActiveProcess。在它进出内核空间后,BeingDebugged 标志被设置。
如果您想更深入,您将需要能够使用内核调试器,并且知道如何正确设置它,否则您最终只会使您的机器崩溃。
以后有时间我可能会写一个更详细的回复
推荐阅读
- reactjs - 为什么 Redux 自定义中间件无法访问 store 的 getState 和 dispatch?
- php - PHP 中的正则表达式看起来像 ABC-1234
- angularjs - 如何访问 AngularJS 组件控制器中的嵌入内容?
- javascript - 大异步 ajax 请求冻结 UI
- spring - Docker Spring Boot oauth
- java - 无法使用存储库 findAll() 读取数据,也没有出现错误
- reactjs - 如何在material-ui v.1.3中使用图标?
- visual-studio - 如何更改用于导入/比较数据库的文件夹结构模板?
- php - 如何为每个文件编写单独的 error_log
- list - NETLOGO:存储列表供以后使用