可以使用Microsoft Detours来挂接系统范围的调用而不会注入每个proc吗?

the*_*ian -1 windows winapi detours

无论过程如何,我都希望将每次调用CreateProcess(以及其他一些相关的API)挂钩.现代Detours可以用来做这个,而无需枚举所有过程和进行注射吗?

我已经阅读了几篇关于API挂钩的文章,特别是使用Detours这样做,重新:

与MS Detours的API挂钩

使用MS Detours进行API挂钩(InfoSec Institute)

API挂钩揭晓

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

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

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

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

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

Rem*_*eau 6

没有

如果没有按过程注入,则不能在全局范围内使用Detours.

但是,如果要在系统运行后设置初始挂接,则只需手动枚举一次进程.一个选项(如果你小心)是使用AppInit_DLLs注册表设置将你的DLL加载到新进程(好吧,至少使用的进程user32.dll,并且不选择退出让AppInit_DLLs运行,并提供AppInit_DLLs甚至是在系统启用以开始).

否则,另一种方法是编写一个内核驱动程序,实现通过注册的进程创建回调PsSetCreateProcessNotifyRoutine().每次创建或销毁进程时都会调用该回调.

  • [AppInit_DLLs应重命名为Deadlock_Or_Crash_Randomly_DLLs](https://blogs.msdn.microsoft.com/oldnewthing/20071213-00/?p=24183). (3认同)