调试-在调试器下进行CreateProcess

问题描述 投票:0回答:1

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

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

谢谢劳伦。

编辑:

  1. 我也尝试附加其他调试器,并且所有调试器都产生相同的消息

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

c windows debugging reverse-engineering ollydbg
1个回答
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并记录这些参数,以查明是否正在使用其中任何一个。

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

© www.soinside.com 2019 - 2024. All rights reserved.