Microsoft Detours 是否可以用于挂钩系统范围的调用而不注入每个过程?

Can Microsoft Detours be used to hook system-wide calls without injecting into every proc?

我想挂钩 每个 调用 CreateProcess(以及其他一些相关的 API),无论过程如何。现代的Detours是否可以在不枚举所有进程并执行注入的情况下执行此操作?

我已经阅读了几篇关于 API 挂钩和使用 Detours 这样做的文章,回复:

API Hooking with MS Detours

API Hooking with MS Detours (InfoSec Institute)

API Hooking Revealed

我对这些文章有两个问题:

  1. 他们已经很老了,事情可能已经改变了。

  2. 他们没有彻底解决系统范围内的挂钩问题,特别是使用 Detours。

我知道这可以通过驱动程序来完成,但是据说 Detours 是一个强大的工具,并且目前仍受支持,所以我想知道如何使用 Detours 来完成。

到目前为止,我阅读的文献都是针对使用 Detours 的特定程序,尽管它提出了如何枚举每个进程并执行 DLL 注入然后尝试使用 Detours 的想法,这似乎是一种非常不可靠的方式。

没有

如果没有每个进程注入,就不能全局使用 Detours。

然而,当你想在系统已经运行之后设置一个初始钩子时,你只需要手动枚举一次进程。一种选择(如果你小心的话)是使用 AppInit_DLLs Registry setting to have your DLL loaded into new processes (well, at least processes that use user32.dll, and that don't opt-out of letting AppInit_DLLs run, and providing that AppInit_DLLs is even enabled on the system 作为开头。

否则,另一种方法是编写实现 process creation callback that is registered via PsSetCreateProcessNotifyRoutine() 的内核驱动程序。每次创建或销毁进程时都会调用该回调。