我有一个进程A,它创建自身的副本:
,然后使用
WaitForDebugEvent(50ms)
修改其B的控制流来调试其子级(进程B)。在高度活跃的启动之后,除非我单击B中的按钮,否则WaitForDebugEvent
将会超时(返回false)。问题:如何摆脱调试器(进程A)并将自己的调试器附加到B?
我试图通过将代码注入A(DLL注入)以及调试A和A来调用
DebugActiveProcessStop
从调试B的线程调用它(内联代码注入),两种方式都会得到ACCESS_DENIED
!如果尝试连接第二个调试器,则会得到
Error 87 (ERROR_INVALID_PARAMETER)
。赢得7 x64 #1 楼
使用ProcessHacker暂停父进程,然后尝试停止从Processhacker移除调试器#2 楼
首先,您必须查找要调用的IsDebuggerPresent并将EAX寄存器中的返回值修改为0。然后,必须找到调用GetCurrentProcessId并使用您的虚拟进程ID修改输入参数。在启动新线程之前必须执行的第二个过程,然后才能将调试器附加到该子进程。我在多合一键盘记录器中遇到了相同的情况
评论
第二次附加失败应导致错误0xc000048而不是错误0n87该进程可能无法调试自身的确切副本,因为这将导致连锁反应。 (每个副本都会复制自己并生成一个孩子,直到资源耗尽为止)@blabb,代码可以创建一个互斥锁以防止这种情况发生,请参阅G.i节。 “最终”反调试参考中的内容