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

时间:2018-03-06 11:06:23

标签: windows dll hook monitor dll-injection

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

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

我尝试收听新的流程创建事件并暂停加载我的监视器dll的新流程,但它运行不正常。

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

1 个答案:

答案 0 :(得分:2)

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

钩住explorer.exe,并使CreateProcess和ShellExecute / Ex也钩住创建的进程,依此类推

注入器打开后,您可以用相同的方法挂接所有正在运行的进程,从而做更多的事情,因此您绝对要挂接所有用户模式的进程

如果您没有以admin身份运行,请确保拥有适当的权限,您将无法挂接以admin身份运行的进程

您需要挂钩的函数通常是CreateProcess NtCreateProcess ShellExecuteInfo / Ex

您将使用NtSuspendProcess和NtResumeProcess在进程有机会捍卫自己之前设置钩子,但是可能已经调用了tls回调,如果是NtCreateProcess,则可以使用CreateProcess来创建CreateProcess,您可以使用CREATE_SUSPENDED然后使用ResumeThread和线程句柄从功能上

如果您想更深入一点,可以挂接NtCrateFile,因为任何执行exe或加载dll的尝试都需要打开该文件才能在内存中分配图像