我想写一个程序来监控所有进程,以分离dll注入或漏洞利用。我想在用户级别完成这项工作,而不是插入一个驱动程序。
我尝试使用AppInit_DLLs在DllMain中创建线程,但如果程序不加载user32.dll,则无法正常工作。
我尝试监听新进程创建事件并暂停新进程以加载我的监视器dll,但效果不佳。
是否有方法在所有新进程开始运行之前挂钩它们?
我想写一个程序来监控所有进程,以分离dll注入或漏洞利用。我想在用户级别完成这项工作,而不是插入一个驱动程序。
我尝试使用AppInit_DLLs在DllMain中创建线程,但如果程序不加载user32.dll,则无法正常工作。
我尝试监听新进程创建事件并暂停新进程以加载我的监视器dll,但效果不佳。
是否有方法在所有新进程开始运行之前挂钩它们?
大多数程序都是通过双击运行的,因此 explorer.exe 是使用 CreateProcess 启动它们的进程。
钩取 explorer.exe 并使 CreateProcess 和 ShellExecute/Ex 钩取创建的进程,等等。
一旦您的注入器打开,可以通过相同的技术来钩取所有正在运行的进程,这样您就绝对可以钩取所有用户模式进程。
确保拥有适当的权限,如果您不是管理员,则无法钩取以管理员身份运行的进程。
需要钩取的函数通常为 CreateProcess、NtCreateProcess 和 ShellExecuteInfo/Ex。
您将使用 NtSuspendProcess 和 NtResumeProcess 在进程有机会自我保护之前设置您的钩子,但 tls 回调可能已经被调用,而在 NtCreateProcess 和 CreateProcess 的情况下,您可以使用 CREATE_SUSPENDED 然后使用从函数得到的线程句柄 ResumeThread。
如果您想深入了解,可以钩取 NtCrateFile,因为任何尝试执行 exe 或加载 dll 的尝试都需要打开文件以在内存中分配映像。