如何在 Windows 中挂钩所有新进程

Vic*_*orV 3 windows dll hook monitor dll-injection

我想编写一个程序,通过为所有进程创建一个监视器线程来分离 dll 注入或漏洞利用。我想在用户级别执行此操作,而不是插入驱动程序。

我尝试使用 AppInit_DLLs 在 DllMain 创建一个线程,但如果程序不加载 user32.dll,它就不起作用。

我尝试侦听新进程创建事件并挂起新进程以加载我的监视器 dll,但效果不佳。

是否有任何方法可以在所有新进程开始运行之前挂钩?

dev*_*v65 5

大多数程序通过双击运行,因此 explorer.exe 是使用 CreateProcess 启动它们的进程

挂钩 explorer.exe 并使 CreateProcess 和 ShellExecute/Ex 也挂钩创建的进程等等

一旦您的注入器打开,您可以通过使用相同的技术挂钩所有正在运行的进程来做更多事情,因此您绝对是在挂钩所有用户模式进程

如果您不是以管理员身份运行,请确保拥有适当的权限,您将无法挂钩以管理员身份运行的进程

需要hook的函数通常是CreateProcess NtCreateProcess ShellExecuteInfo/Ex

您将使用 NtSuspendProcess 和 NtResumeProcess 在进程有机会保护自己之前设置您的钩子,但可能已经调用了 tls 回调,并且在 NtCreateProcess 和 CreateProcess 的情况下,您可以使用 CREATE_SUSPENDED 然后 ResumeThread 与您从函数中获得的线程句柄

如果你想更深入,你可以挂钩 NtCrateFile 因为任何尝试执行 exe 或加载 dll 都需要打开文件以在内存中分配图像