我查看了 EasyHook 及其教程示例,甚至使用我自己的来自 advapi32.dll 的 API 实现了 LocalHook,当我从运行挂钩代码的同一个应用程序进行调用时,LocalHook 工作,但是当我调用从另一个外部进程挂钩的 API。我想我对从外部进程拦截的假设是错误的。
所以现在我正在查看 RemoteHook,我的印象是您需要专门构建您的注入 DLL 并将其注入到已知的进程/可执行文件中 - 然而,这不是我的目标/场景。目标是拦截对存在于 advapi32.dll 中的 API 的调用,而不管进行调用的进程如何 - 即来自任何(未知)进程。我相信这就是所谓的 GlobalHook。那么,是否有可能以一种方式编写 GlobalHook,即从我的 GUI 应用程序将拦截任何进程对特定 Win32 DLL 或 .NET DLL(如 system.security.cryptography.algorithms.dll)中特定 API 的调用(以及如何做我一般都知道,这个 DLL 使用了哪些 Win32 API(如果有的话)?或者我应该切换到 MS Detour 库来实现全局挂钩吗?是否使用 SetWindowsHookEx 触发了防病毒程序来实现全局挂钩?