0

List of User-Mode Hooksを (プログラムで) 検出する方法はありますか? 関連する記事をいくつか読んでみましたが、うまくいきませんでした。ポインタ、アイデア、またはサンプルは非常に役立ちます。私はまだコードを書き始めていないので、C または C++ のいずれかで私を助けてください。ティア。

編集::現在実行中のすべてのプロセスを列挙し、各プロセスが使用するすべてのモジュールを列挙するアプローチを試みています。私が実際に試したいのは (一部の専門家の説明によると)、現在メモリにロードされているすべてのモジュールの列挙されたリストと、各プロセスのディスク上のモジュールのリストを比較して、フックをチェックすることです。誰かがこれを明らかにしてくれませんか?私の質問が何であるかわかりませんが、私の混乱が何であるかがわかれば、ここで私を助けてください.

4

2 に答える 2

0

ユーザーモード フックを実装する方法はいくつかあります。例えば:

  1. 関数の先頭にインラインで無条件分岐命令を挿入できます。
  2. インポート アドレス テーブルのパッチ適用。
  3. 関数に入るときにいくつかのメカニズムを使用して例外 (ページ保護の変更int 3など) をスローし、ベクトル化された例外ハンドラーを使用して実行をリダイレクトすることができます。

検出方法は、検出するユーザーモード フックの方法によって異なります。例として、

  1. ユーザーモード フック (ターゲット関数の開始時の命令) の最も一般的な方法を検出するための従来のアプローチはJMP、関数を逆アセンブルし、最初の命令をチェックすることです。
  2. IAT で期待される関数のアドレスを動的に解決しGetProcAddress、テーブルが期待どおりに見えるかどうかを確認します。
  3. ページ保護の確認、逆アセンブルなど

考えられるすべてのフック (および検出) 方法を網羅的に列挙するつもりはありませんが、ユーザーモード フックのリストを生成するための一般的な方法は 1 つもないことを説明したいと思います。

于 2012-11-05T11:34:15.840 に答える
0

最初に他のいくつかのものを探すことをお勧めします。

  1. に RWX メモリ ブロックがあるかどうかを確認しProcess Address Spaceます。メモリ内の各関数をディスクと比較するような激しい操作ではありません。
  2. IAT フックを確認するFunction Addressには、ロードされたモジュールの範囲外でないかどうかを確認します。
于 2014-06-17T21:51:13.713 に答える