SetWindowsHookEx APIを使用してWindowsにグローバルにインストールされたフックの一覧を取得するにはどうすればよいですか?インストールされているWindowsフックのリスト
答えて
悪意のある方法は、他のものがチャンスを得る前に、すべてのフッキング機能をフックすることです。
installeを列挙、他の操作に比べフックを見つける
を参照してください。 d フックは非常に簡単です。
スレッド固有のフックは、スレッドごとのwin32kデータ 構造体にTHREADINFO 1として想像して記録されます。これは本質的にETHREAD/TEBのような構造ですが、具体的にはユーザーとgdiの情報に合わせて を調整しました。 です。そのメンバーの1つである (aphkStart)はポインタの16要素の配列で、個別に を指すか、またはHOOK構造のリンクリストの先頭です。 フックを列挙することは、単にそれらの鎖を歩く尺度に過ぎません。
フックが設定されている場合は便宜的に、またおそらく反復を必要としないように THREADINFOには別のメンバーfsHooks、ビットフィールドである が含まれています。ビットがオンの場合、 フック配列の対応するインデックスが有効です。 33の比較の代わりに(NULLの場合は16、forループの場合は の17)、フックがあるかどうかを伝えるには、ちょうど1つ、気の利いた!デスクトップ2ごとある
グローバルフックは、さらにまた、想像(DESKTOPINFO)と命名 ごとのオブジェクト構造に格納され、そして も添付ビットフィールドを配列に格納されています。 の2つのブリッジは、所有する DESKTOPINFOを指すTHREADINFOのメンバーであるpDeskInfoです。
イントロで腹が立っているにもかかわらず、これらのすべての文書化されていない構造で作業することは、実際にはあまりにも難しいことではありません。 win32k.sysのWindows 7シンボルにはレイアウトが含まれています。 Vista/Server 2008の時代のシンボルはありませんが、これは のアセンブリ学習が来てその日を節約するところです。これらの構造がどのように見えるかを知る
がは、それらの上に私たちの汚いミトンを得た別の...
である彼らになって、一つのことで、私たちはHOOK構造のレコードを検索 関連情報そのものの最も:
struct tagHOOK
{
THRDESKHEAD head; // info about the creator
struct tagHOOK* phkNext; // next entry in linked list
int iHook; // WH_ hook type
UINT_PTR offPfn; // RVA to hook function in ihmod library
UINT flags; // HF_ flags (GLOBAL, ANSI)
int ihmod;
THREADINFO* ptiHooked; // the hooked thread
PVOID rpDesk; // saved desktop pointer
ULONG nTimeout :7;
ULONG fLastHookHung :1;
};
あなたはsoftware here
をダウンロードすることができます
インストールグローバルフックを検出するための概要は次のとおりです。
- コールPsGetCurrentThreadと現在のスレッドのETHREAD構造を取得します。 ETHREADは、 MSDNのドキュメントに従った不透明なデータ構造です。
- PsGetThreadWin32Threadを呼び出してTHREADINFO構造体を抽出します。どちらも文書化されていません。
- DESKTOPINFOを抽出します。
- ここには、すべてのグローバルにインストールされたフックがあります。それらは配列で構成されています。各要素はリンクされたリストで、 特定のフック(WH_ *)に対応します。
インストールローカルフックを検出するための概要は次のとおりです。スレッドIDを与えられた
- 。
- PsLookupThreadByThreadIdを呼び出し、指定されたスレッドのETHREAD構造体を取得します。
- PsGetThreadWin32Threadを呼び出してTHREADINFO構造体を抽出します。
- ここには、指定したスレッドのすべてのローカルにインストールされたフックがあります。それらは配列で構成されています。各要素は リンクリストで、特定のフック(WH_ *)に対応します。
あなたはsource here
プロセスハッカー2(http://processhacker.sourceforge.net)用のプラグイン、 ディスプレイシステムフックと外しすることができる(右を見ることができますクリックメニュー)。
プロセスのハッカーソースを取得してコンパイルし、 HookTools.vcxprojをPlugins.slnに追加します。 VS 2013が使用された。ライブラリ をVC++ディレクトリに設定します。ここ
- Detecting Keyboard Hooks
- https://security.stackexchange.com/questions/17904/what-are-the-methods-to-find-hooked-functions-and-apis
しかし、私はまだそれを行うための信頼性の高い方法を発見していない答えを持つ
または関連する質問。
*「このウェブページは利用できません」*。 [良い答えを書くにはどうすればいいですか?](http://stackoverflow.com/help/how-to-answer)を参照してください。具体的には次のようなものです。* "リンクのコンテキストを提供する:外部リソースへのリンクが推奨されますが、あなたの仲間のユーザーは、それが何であるか、そしてなぜそれがあるのかをいくつか考えているでしょう。**ターゲットサイトに到達できない場合、または永久にオフラインになった場合に備えて、常に重要なリンクの最も関連性の高い部分を引用します** " – IInspectable
@DavidStratton彼は 'SetWindowsHookEx'と呼ばれるものすべてのリストを要求していると思います。 – vcsjones
キーボードなど。 SetWindowsHookExは、アプリケーション定義のフックプロシージャをフックチェーンにインストールします。私はこのフックチェーンを取得したい。 – lightstep
これ自体はできません。あなたは何を達成しようとしていますか? – Michael