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

3

我想写一个程序来监控所有进程,以分离dll注入或漏洞利用。我想在用户级别完成这项工作,而不是插入一个驱动程序。

我尝试使用AppInit_DLLs在DllMain中创建线程,但如果程序不加载user32.dll,则无法正常工作。

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

是否有方法在所有新进程开始运行之前挂钩它们?

1个回答

5

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

钩取 explorer.exe 并使 CreateProcess 和 ShellExecute/Ex 钩取创建的进程,等等。

一旦您的注入器打开,可以通过相同的技术来钩取所有正在运行的进程,这样您就绝对可以钩取所有用户模式进程。

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

需要钩取的函数通常为 CreateProcess、NtCreateProcess 和 ShellExecuteInfo/Ex。

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

如果您想深入了解,可以钩取 NtCrateFile,因为任何尝试执行 exe 或加载 dll 的尝试都需要打开文件以在内存中分配映像。


我认为这可能是一个好建议,我可以通过遍历所有现有进程来注入所有用户进程,然后钩取CreateProcess以注入新进程。因此,我可以钩取所有新进程。 - VictorV
感谢您回答我关于explorer.exe的旧问题。它是大多数进程的父进程的原因是,当您双击exe或其他扩展名文件时,Windows会发出操作此文件的消息,并且Windows shell(默认为资源管理器,您可以更改它)始终处理此消息队列,因此如果它是exe,则将执行它,或者查找注册表以查找打开此文件格式的程序(例如txt的记事本,doc / docx的Word)。复制文件,剪切或删除它们也是同样的情况,您会注意到这些操作是由资源管理器执行的。 - dev65
我认为你应该在目标答案下发布这些 :)。我想在那个问题中讨论这个问题。谢谢你的帮助。 - VictorV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接