如果一个名为SetWindowsHookEx的应用程序(例如我的,或者在外部进程中)可以让我解开钩子?请记住,不是我把钩子放在第一位,所以我没有任何形式的变量或指向原始钩子的指针。可能禁用使用SetWindowsHookEx运行时创建的钩子?
回答
我不认为你可以。您需要句柄与调用SetWindowsHookEx(注册钩)这样你就可以UnhookWindowsHookEx()
HMMS其取下顺便说一句,如果你的任何其他钩在注册前以某种方式可以创建自己的挂钩(即在应用程序启动期间),您可以在该钩子选择不呼叫CallNextHookEx(),从而防止后续挂钩被调用。可能值得一试。我怀疑这可能不适用于所有类型的钩子。
不,没有。
回到当天(NT时代之前),您可能已经拿到了一部与您获得的HHOOK一起玩的游戏,作为返回的HHOOK was a link in the chain of hooks被调用。即使那样我也不确定这是可能的。
今天,Windows并没有委托链中下一个钩子的调用给你(因此不推荐使用的参数为CallNextHookEx),HHOOK也不允许你伸手去掉你没有注册的钩子。
更恰当,没有好,支持的方式来做到这一点。
你可以安装一个rootkit,深入Windows内部并找到这个钩子链;但这显然会变得荒谬而且危险。
挂钩(通过无数的API钩子解决方案在那里之一,Detours似乎流行)SetWindowsHookEx和CallNextHookEx可以让你最有方式对符合预NT约定的应用程序。要点是在调用SetWindowsHookEx之后立即解除新挂钩,将任何传递的钩子(不属于你自己的钩子)解除挂钩到CallNextHookEx。为了保证一个“干净”的应用程序,你还必须模拟一些事件来强制任何已经调用的钩子被调用,以便它们可以被解除钩住。此外,只要遇到在过去8年中写入的将CallNextHookEx传递给NULL的任何应用程序,此政权就会失败。
所以,即使它是技术上可能的(也许)脱钩HHOOKs您的应用程序没有登记,你可能会更好过试图完成什么是你一个不同的,少可怕脆方式后是。
其实我觉得我发现是的,这是可能的。挂钩CallNextHook会给你挂钩的挂钩标识,你可以用它来挂钩。
- 1. SetWindowsHookEx(),挂钩不维护? (可能)
- 2. 创建JavaScript钩子可能吗?
- 3. Joomla用户创建钩子
- 4. 在Subversion中创建标签时是否有可用的钩子?
- 5. ActiveRecord的钩子在数据库创建时创建的行
- 6. 创建Git标签时自动运行Git钩子
- 7. 使用Gradle创建可运行的JAR
- 8. 创建命令行可运行罐子
- 9. 禁用运行时
- 10. 使用运行时库和可执行文件创建RPM包
- 11. 可能为失败的JUnit测试创建钩子?
- 12. 使用Delphi在运行时创建TWebBrowser
- 13. 在运行时使用UIGestureRecognizer创建UIImage
- 14. 科尔多瓦钩不运行时使用modules.exports功能
- 15. PHP:运行时禁用调试功能
- 16. 用模型创建一个sails.js钩子
- 17. 创建应用程序钩子?
- 18. 什么用户运行git钩子?
- 19. 暂时禁用挂钩?
- 20. 使用SetWindowsHookEx钩住键盘消息的问题
- 21. 是否可以使用ExpandoObject创建运行时属性?
- 22. 是否可以在运行时使用Unity创建2D动画?
- 23. 如何使用GCC创建运行时可见变量
- 24. 创建MSBuild目标钩子
- 25. 运行db时不会创建数据库:使用RAILS_ENV创建
- 26. 运行git post-commit钩子
- 27. 使用SetWindowsHookEx函数
- 28. 运行时禁用datagridviewcombobox
- 29. 如何运行使用maven创建的可执行jar文件?
- 30. 使用PyInstaller创建的Python可执行文件不会运行
尽管目前我没有解决问题的方法,但我认为这应该是可能的。基本上每个AntiSpyware/Virusscanner都必须使用此功能或等效功能来查找和解除键盘记录程序。好问题! – merkuro 2009-06-16 10:15:43
刚刚找到一个名为“Rootkit Unhooker 3.8”的程序。尽管我认为这个页面是合法的,但你可能想要从一个更老的版本下载一个旧版本的代码:http://www.rootkit.com/newsread.php?newsid=902更值得信赖的网站。 – merkuro 2009-06-16 10:29:58