为什么我们必须将全局钩子过程放在单独的 DLL 中
我读了一些文章、msdn 和博客,但有一些问题
为什么我们必须将全局钩子过程放置在与安装钩子过程的应用程序分开的 DLL 中
,与全局钩子和键盘记录器有什么不同(我在没有单独的 dll 的情况下编写键盘记录器)? 键盘记录器如何在没有单独的 dll 的情况下拦截所有应用程序键盘消息?
最后,
全局钩子的dll中的代码是什么?
请给出一些详细的编写全局钩子的步骤
i read some article and msdn and blog but have some question
why we must place a global hook procedure in a DLL separate from the application installing the hook procedure
and what is different from global hook and keyloger( i write key loge without separate dll)?
how key loger intercept all application keyboard message without separate dll?
finaly
what code is in dll for global hook ?
please give some step for writing global hook with detail
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
基本上有两种方法可以全局捕获击键(键盘记录器可以使用其中任何一种):
使用全局键盘挂钩。
如上所述,此方法需要位于单独的 DLL 文件中的 HookProcedure。这是捕获击键的正确方法,因为仅在每次按键时调用您的函数。
这篇文章可能有用:http://www.codeproject.com/KB/ DLL/keyboardhook.aspx
调用WinAPI函数GetKeyboardState。这种方法不需要单独的DLL文件,但有一个很大的缺点。该函数仅返回键盘的实际状态。有必要在无限循环中调用它(可能在单独的线程中,但不一定),并有一点睡眠时间来捕获所有击键。
这会导致 CPU 使用率增加。我不建议您使用此技术。另外,具有良好启发式的防病毒软件会将此类代码视为键盘记录器。
没有 DLL 的键盘记录器可能使用第二种方法或动态生成 DLL。
Basically there are two ways how to capture keystrokes globally (the keylogger can use any of them):
Using global keyboard hook.
This method needs a HookProcedure located in seperate DLL file as you stated above. This is the right way how to capture keystrokes, because your function is called only on each keypress.
This article could be useful: http://www.codeproject.com/KB/DLL/keyboardhook.aspx
Calling WinAPI function GetKeyboardState. This method doesn't require separate DLL file, but have a big drawback. The function returns only actual state of keyboard. It is necessary to call it in an infinite loop (probably in separate thread, but not necessarily) with a little sleep time to caputre all keystrokes.
This results in increased CPU usage. I don't recommend you to use this technique. Also an antivirus software with good heuristics will consider such code as keylogger.
A keylogger without DLL probably uses the second approach or generates the DLL on the fly.