【问题标题】:Debugging - CreateProcess under a debugger调试 - 调试器下的 CreateProcess
【发布时间】:2016-08-26 22:55:52
【问题描述】:

我正在尝试将调试器 (Ollydbg v1) 附加到由 CreateProcess 在另一个正在调试的进程中创建的子进程,我收到以下错误:“进程已处于调试模式”。

我的问题是为什么我不能将调试器附加到此进程以及为什么子进程处于调试模式虽然我还没有附加调试器以及我可以做些什么来在常规模式下创建进程。

谢谢,劳伦。

编辑:

  1. 我也尝试附加其他调试器,它们都产生了相同的消息

  2. 此外,我尝试创建子进程的内存转储,procdump 实用程序失败,因为“ReadProcessMemory 和/或 WriteProcessMemory 失败”,因此生成了一个 0 字节的转储文件。

【问题讨论】:

  • 调试器的功能集通常不同。有些调试器只能调试单个进程,有些可以自动附加到子进程。我不太了解 Ollydbg,它有什么限制,但您可能想尝试 Visual Studio 或 WinDbg。您还可以将系统配置为自动将调试器附加到特定进程(有关说明,请参阅How to: Launch the Debugger Automatically)。
  • @IInspectable,谢谢,我编辑了我的问题,你能看一下吗?
  • 可能是哪个调试器已经附加到父进程,比您尝试在子进程上使用哪个调试器更重要。根据父进程的创建方式,子进程可能会自动附加到与父进程相同的调试器。我不确定为什么procdump 不起作用;也许进程被暂停了?
  • 您正在将 OllyDbg 附加到子进程。但是哪个调试器附加到父级?还有 OllyDbg 还是别的什么?

标签: c windows debugging reverse-engineering ollydbg


【解决方案1】:

CreateProcess 的第 6 个参数是 dwCreationFlags,可以是 DEBUG_ONLY_THIS_PROCESS 或 DEBUG_PROCESS

DEBUG_ONLY_THIS_PROCESS 0x00000002

调用线程启动并调试新进程。它可以使用 WaitForDebugEvent 函数接收所有相关的调试事件。

DEBUG_PROCESS 0x00000001

调用线程启动并调试新进程和新进程创建的所有子进程。它可以使用 WaitForDebugEvent 函数接收所有相关的调试事件。 使用 DEBUG_PROCESS 的进程成为调试链的根。这一直持续到使用 DEBUG_PROCESS 创建链中的另一个进程。 如果此标志与 DEBUG_ONLY_THIS_PROCESS 结合使用,则调用者仅调试新进程,而不调试任何子进程。

lpProcessAttributes 参数还接受一个指向 SECURITY_ATTRIBUTES 结构的指针,该结构也可以为创建的进程定义特殊的安全权限。

我会挂钩 CreateProcess 并记录这些参数,以确定是否正在使用其中任何一个。

最后的想法是,他们注册了自己的调试器以防止人们附加自己的调试器,这听起来像是一个很好的反调试技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多