调试 - 调试器下的CreateProcess

时间:2016-05-02 08:18:09

标签: c windows debugging reverse-engineering ollydbg

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

我的问题是为什么我不能将调试器附加到此进程以及为什么子进程处于调试模式,尽管我还没有附加调试器以及如何在常规模式下创建进程

谢谢,劳伦。

修改

  1. 我也试过附加其他调试器,所有调试器都生成了相同的消息

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

1 个答案:

答案 0 :(得分:0)

CreateProcess的第六个参数是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并记录这些参数,以查明是否正在使用这两个参数。

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