有没有比系统范围的WH_CBT钩子更好的方法来监控击键?

时间:2012-02-13 13:04:23

标签: winapi hook code-injection setwindowshookex keylogger

我目前正在研究一种在计算机上记录用户操作的可靠方法。我创建了一个简单的应用程序,它可以在全局范围内挂起WH_CBT个事件,它现在似乎运行良好。我已经阅读过应用程序将拥有自己的WH_CBT事件处理程序并且在处理它之后不会调用CallNextHookEx()函数的情况。我假设这种情况会阻止我自己使用系统范围的钩子来处理该应用程序中的任何事件。

还有其他(可能更好)的方法来劫持应用程序中的击键事件吗?也许与手动将DLL注入到这样的进程有关:

  1. 选择流程。
  2. 使用CreateRemoteThreadEx()注入DLL。
  3. DLL挂钩(绕道)一些winapi函数,并从中收集有关击键或其他事件的信息。
  4. 在这种情况下挂钩GetMessage()TranslateMessage()功能是否足够?我是对的,使用消息循环的任何进程都必须使用这些函数来处理创建的窗口的事件吗?

1 个答案:

答案 0 :(得分:1)

使用WH_KEYBOARD_LL的低级别键盘连接将是最好的(因为它会捕获所有内容),但是存在其他更具体的解决方案,例如sub-classing the parent level window您要定位的任何应用程序以捕获关键字窗口消息,避免了必须进行任何代码篡改或系统范围的过滤。

回到更全局的范围,您也可以使用基于WH_KEYBOARDWH_CALLWNDPROCWH_GETMESSAGE的挂钩来执行此操作,这可以在全局或线程级别完成。这一切都取决于你想要捕获的内容和数量。