我希望将每次调用CreateProcess
(和其他一些相关的API)挂钩,无论进程如何。现代Detours可以用来做这个而不用枚举所有过程和进行注射吗?
我已经阅读了几篇关于API挂钩的文章,特别是与Detours一起做的,重新:
API Hooking with MS Detours (InfoSec Institute)
我对这些文章有两个问题:
他们已经很老了,事情可能已经发生了变化。
他们没有特别使用Detours完全解决系统范围内的挂钩问题。
我知道这可以通过驱动程序完成,但Detours据说是一个强大的工具,目前仍然受支持,所以我想知道如何使用Detours完成。
到目前为止,我所阅读的文献都是针对使用Detours定位特定程序的,尽管它已经提出了如何枚举每个进程并执行DLL注入然后尝试使用Detours,这似乎是一种非常不可靠的方式。
答案 0 :(得分:6)
没有每个进程注入,Detours不能全局使用。
但是,如果要在系统运行后设置初始挂接,则只需手动枚举一次进程。一个选项(如果你小心)是使用AppInit_DLLs
Registry setting将你的DLL加载到新进程中(好吧,至少使用user32.dll
的进程,并且不要选择 - 不允许AppInit_DLLs
运行,并提供AppInit_DLLs
is even enabled on the system开头。
否则,另一种方法是编写实现process creation callback的内核驱动程序,该驱动程序通过PsSetCreateProcessNotifyRoutine()
注册。每次创建或销毁进程时都会调用该回调。