[我试图将调试器(Ollydbg v1)附加到由CreateProcess
在另一个正在调试的进程中创建的子进程,并且出现以下错误:“进程已经处于调试模式”。
我的问题是为什么我不能将调试器附加到该进程,为什么子进程仍处于调试模式,尽管我还没有附加调试器,以及在常规模式下可以做什么来创建该进程。
谢谢劳伦。
编辑:
我也尝试附加其他调试器,并且所有调试器都产生相同的消息
此外,我尝试创建子进程的内存转储,并且procdump
实用程序失败,因为“ ReadProcessMemory和/或WriteProcessMemory失败,因此产生了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并记录这些参数,以查明是否正在使用其中任何一个。
最后想到的是,他们注册了自己的调试器,以防止人们附加自己的调试器,这听起来像是个不错的反调试技巧。