2009-06-16 88 views
3

如果一个名为SetWindowsHookEx的应用程序(例如我的,或者在外部进程中)可以让我解开钩子?请记住,不是我把钩子放在第一位,所以我没有任何形式的变量或指向原始钩子的指针。可能禁用使用SetWindowsHookEx运行时创建的钩子?

+1

尽管目前我没有解决问题的方法,但我认为这应该是可能的。基本上每个AntiSpyware/Virusscanner都必须使用此功能或等效功能来查找和解除键盘记录程序。好问题! – merkuro 2009-06-16 10:15:43

+0

刚刚找到一个名为“Rootkit Unhooker 3.8”的程序。尽管我认为这个页面是合法的,但你可能想要从一个更老的版本下载一个旧版本的代码:http://www.rootkit.com/newsread.php?newsid=902更值得信赖的网站。 – merkuro 2009-06-16 10:29:58

回答

1

我不认为你可以。您需要句柄与调用SetWindowsHookEx(注册钩)这样你就可以UnhookWindowsHookEx()

HMMS其取下顺便说一句,如果你的任何其他钩在注册前以某种方式可以创建自己的挂钩(即在应用程序启动期间),您可以在该钩子选择不呼叫CallNextHookEx(),从而防止后续挂钩被调用。可能值得一试。我怀疑这可能不适用于所有类型的钩子。

5

不,没有。

回到当天(NT时代之前),您可能已经拿到了一部与您获得的HHOOK一起玩的游戏,作为返回的HHOOK was a link in the chain of hooks被调用。即使那样我也不确定这是可能的。

今天,Windows并没有委托链中下一个钩子的调用给你(因此不推荐使用的参数为CallNextHookEx),HHOOK也不允许你伸手去掉你没有注册的钩子。


更恰当,没有好,支持的方式来做到这一点。
你可以安装一个rootkit,深入Windows内部并找到这个钩子链;但这显然会变得荒谬而且危险。

挂钩(通过无数的API钩子解决方案在那里之一,Detours似乎流行)SetWindowsHookExCallNextHookEx可以让你最有方式对符合预NT约定的应用程序。要点是在调用SetWindowsHookEx之后立即解除新挂钩,将任何传递的钩子(不属于你自己的钩子)解除挂钩到CallNextHookEx。为了保证一个“干净”的应用程序,你还必须模拟一些事件来强制任何已经调用的钩子被调用,以便它们可以被解除钩住。此外,只要遇到在过去8年中写入的将CallNextHookEx传递给NULL的任何应用程序,此政权就会失败。

所以,即使它是技术上可能的(也许)脱钩HHOOKs您的应用程序没有登记,你可能会更好过试图完成什么是你一个不同的,少可怕脆方式后是。

1

其实我觉得我发现是的,这是可能的。挂钩CallNextHook会给你挂钩的挂钩标识,你可以用它来挂钩。