dll - 为什么我们必须将全局钩子(Hook)过程放在单独的 DLL 中

标签 dll hook

我读了一些文章、msdn 和博客,但有一些问题

为什么我们必须将全局 Hook 过程放置在与安装 Hook 过程的应用程序分开的 DLL 中

与全局钩子(Hook)和键盘记录器有什么不同(我在没有单独的dll的情况下编写键盘记录器)? 键盘记录器如何在没有单独的 dll 的情况下拦截所有应用程序键盘消息?

终于

全局钩子(Hook)的dll中有什么代码?

请给出一些详细的编写全局钩子(Hook)的步骤

最佳答案

基本上有两种方法可以全局捕获击键(键盘记录器可以使用其中任何一种):

  1. 使用全局键盘 Hook 。 如上所述,此方法需要位于单独的 DLL 文件中的 HookProcedure。这是捕获击键的正确方法,因为仅在每次按键时调用您的函数。

    这篇文章可能有用:http://www.codeproject.com/KB/DLL/keyboardhook.aspx

  2. 调用WinAPI函数GetKeyboardState。这种方法不需要单独的DLL文件,但有一个很大的缺点。该函数仅返回键盘的实际状态。有必要在无限循环中调用它(可能在单独的线程中,但不一定),并有一点 sleep 时间来捕获所有击键。

    这会导致 CPU 使用率增加。我不建议您使用此技术。此外,具有良好启发式的防病毒软件会将此类代码视为键盘记录器。

没有 DLL 的键盘记录器可能使用第二种方法或动态生成 DLL。

关于dll - 为什么我们必须将全局钩子(Hook)过程放在单独的 DLL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4034246/

相关文章:

c - 为什么 CreateRemoteThread() 会导致 Debug Assertion Failed 错误?

c++ - 从 !DllRegisterServer+0x3ebfa 符号获取 C++ 函数名来解决 'endless wait in critical section' 难题

c++ - 是否可以 Hook 子进程发送到 Windows 控制台的消息?

c++ - IDirect3DDevice9::EndScene Hook 有时会在参数 IDirect3DDevice9 中得到 NULL

C# hook - 计算键盘上的击键次数

.net - dll旁边的xml文件的用途是什么?

c# - AMD Gpu 内存 dll

c# - SSIS 2008 : Using Custom DLL's in Script Task/Script Components that are versioned

go - Zerolog 中的 Hook 未注册

git - 使用 git hook 添加许可证和应用程序版本以在源文件顶部注释