如何附加调试器或开始分析调试本身的进程?

逆向工程 视窗 反调试
2021-06-19 08:28:13

我需要关于如何开始分析、将调试器连接到已经在调试自身的进程的建议。是否有任何工具/插件/技术可能在分析过程中有所帮助?

更新 如果我使用调试器连接到父进程,那么我将能够看到正在处理的调试事件。我怎样才能看到/监控子进程(debug-gee)中发生的事情?

2个回答
  1. 调用NtSuspendProcess()子进程。
  2. 将代码注入父进程以调用DebugActiveProcessStop()子进程。
  3. 将调试器附加到子进程。
  4. 调用NtResumeProcess()子进程。

经过这里的一些实践经验后,我可以提出有关调试自调试过程的建议。这里我假设自调试是基于 Windows Debug API 实现的。所以,这是我的发现:

在“调试器”过程中:

  • 使用您的调试器附加/运行您要研究的进程
  • 使用标志DEBUG_ONLY_THIS_PROCESSDEBUG_PROCESS查找对 CreateProcess API 的调用
  • 跟随最接近WaitForDebugEvent 的调用通常这将是一个循环,用于处理来自 debug-gee 的所有调试事件。
  • 找到事件处理区域后,只需检查正在处理的事件究竟是什么。根据MSDN检查您的活动
  • 在某些情况下,会有对 Get/SetThreadContext 的成对调用。因此在调用 SetThreadContext 之前分析结构,实际上可以看到调试对象的哪个区域被更改(如果您还不知道)。
  • 在所有的交替之后,将最终调用 ContinueDebugEvent/ZwContinue。在它被调用之前,debug-gee 处于冻结状态以进行检查。

在“debug-gee”过程中:

  • 以非侵入性模式将 WinDbg 附加到它以检查更改的内容。
  • 在继续之前做笔记。

希望这会有所帮助。非常欢迎您提出意见。