如何调试一个自调试过程?

逆向工程 调试 登录
2021-06-15 12:44:15

如何在 Windows 中交换调试器?

就我而言,我有一个进程 A,它创建了自己的副本:

CreateProcessA("XXX.exe", NULL, 0x0023f560, 0x0023f560, TRUE,      
               **DEBUG_ONLY_THIS_PROCESS**, NULL, NULL, 0x0023f5f8, 0x0023f550)

然后,它调试它的子进程(进程 B),WaitForDebugEvent(50ms)用于修改B的控制流。在高度活跃的启动WaitForDebugEvent后将超时(返回 false),除非我单击 B 中的按钮。

问题:如何摆脱调试器(进程 A)并将我自己的调试器附加到 B ?

我尝试DebugActiveProcessStop通过将代码注入 A(DLL 注入)以及调试 A 并从调试 B 的线程调用它来调用它。(内联代码注入)两种方式我都得到了ACCESS_DENIED

如果您尝试附加第二个调试器,则会得到Error 87 (ERROR_INVALID_PARAMETER).

环境:Win 7 x64

2个回答

使用 ProcessHacker 暂停父进程,然后尝试从 Processhacker 停止 deattach 调试器

首先,您必须找到 call IsDebuggerPresent 并将 EAX 寄存器中的返回值修改为 0。然后您必须找到 call GetCurrentProcessId 并使用您的虚拟进程 ID 修改输入参数。您必须在启动新线程之前完成的第二个过程,然后才能将调试器附加到该子进程。我在多合一键盘记录器中获取了相同的情况