2009-06-16 70 views
3

SetWindowsHookExと呼ばれるアプリケーション(例えば、私、または外部プロセスなど)がフックを外すことができますか?フックを最初に作ったのは私ではなかったので、元のフックの変数やポインタは一切ありません。SetWindowsHookEx実行時に作成されたフックを無効にすることはできますか?

+1

今のところ解決策はありませんが、これが可能でなければならないと思います。基本的に、すべてのアンチスパイウェア/ウィルススキャナは、これを使用するか、または同等の機能を使用して、キーロガーを検出したり、解除したりする必要があります。良い質問! – merkuro

+0

"Rootkit Unhooker 3.8"というプログラムが見つかりました。あなたが望むものはどれくらいですか?まだ長いコードサンプルはありません:http://www.rootkit.com/newsread.php?newsid=902私はこのページを正当なものと見なしますが、おそらく古いバージョンをより信頼できるサイト。 – merkuro

+0

私は、ルートキットがHHOOKに関係するとは思わない。彼らはシステムの中で非常に深いので、私は彼らがその特定の仕組みを必要とするかどうか疑います。 –

答えて

1

私はできないと思います。あなたが他のフックが登録される前に、あなたが何らかの形で、独自のフックを作成することができればはそうあなたが、ところでUnhookWindowsHookEx()

のHMMとそれを外すことができます)は、SetWindowsHookEx(に登録されたフックへのハンドルを必要とする(つまり、アプリケーションの起動時に)、そのフックでCallNextHookEx()にコールしないようにして、後続のフックを呼び出さないようにすることができます。チェックアウトの価値があるかもしれません。私はこれがすべてのタイプのフックで可能ではないかもしれないと考えています。

5

いいえ、ありません。

戻ってくるHHOOK was a link in the chain of hooksが呼び出されるように、あなたは取得したHHOOKでいくつかのゲームをプレイしてしまったかもしれません(NT時代以前)。それでも、私はそれが可能であるかどうかはわかりません。

今日、Windowsはチェーン内の次のフックの呼び出しをあなたに委任しません(したがって、廃止されたパラメータはCallNextHookExになります)。そして、HHOOKはもう登録しなかったフックに手を差し伸べることはできません。


はより適切に、そこには良いですし、これを行うための方法を支持しました。
ルートキットをインストールし、Windowsの内部構造を詳しく調べて、フックチェーンをそのように見つけることができます。それは明らかにばかげて危険な長さになるでしょう。

(そこソリューションを引っ掛け無数のAPIの1つを介して、Detoursが人気のようです)フッキングSetWindowsHookExCallNextHookExにプリNT規約に準拠しているアプリケーションのためにそこにあなたの道のほとんどを得ることができます。その要点は、SetWindowsHookExの呼び出し後すぐに新しいフックを解除し、CallNextHookExに渡されたフック(自分のものではない)をフック解除します。 「きれいな」アプリケーションを保証するには、既に呼び出されたフックを強制的に呼び出して、フック解除することができるようにするために、いくつかのイベントをシミュレートする必要があります。また、CallNextHookExにNULLを渡す過去8年以上に書かれたアプリケーションに遭遇するとすぐに、このレジームは失敗します。

それは、あなたのアプリが登録されませんでしたHHOOKsを外しために(多分)可能技術的であってもそう、あなたはおそらく、それはあなたが別の、それほどひどく脆い道後にしているであるものは何でも達成しようとして方がいいでしょう。

1

実際、私はそれが可能であることを発見したと思います。フックCallNextHookはフックのフックIDを返します。フックIDはフック解除に使用できます。

+0

プロの奇妙さと「正しい」答えに対する欲求の両方から。この回答でこの効果を得るためのコードをいくつか入手できますか? –

+0

DeviareというAPIを使用しただけで、Googleに移行できます。これは、5行のように関数をフックするので、CallNextHookをフックし、フック!= 0の場合はUnhookWindowsEx()を呼び出します。 –

+2

あなたはCallNextHookExにWindows Me以降で接続する必要はありませんでしたので、これはいくつかのアプリケーションで壊れてしまいます。また、フックは、フックを外すことができる前に少なくとも1回は実行しなければならないので、「このアプリケーションは[ここでフックの種類]でフックされません」と確実には言えません。 それにかかわらず、私は自分の答えを更新してより完全なものにするつもりです。 –

関連する問題