0

Visual Studio 2010でWIN32 プロジェクトに取り組んでいます。メイン メモリ内の悪意のあるファイルや感染したファイルを検索するために、ClamAV (オープン ソース アンチウイルス) エンジンを介してメイン メモリをスキャンしようとしています。

これまでに書いたコードは、Windows 関数CreateToolhelp32Snapshotを使用して、メイン メモリ全体のスナップショットを作成します。

次に、スナップショットから特定のプロセスを開き、これを ClamAV エンジンに渡します。エンジンは、悪意があるかどうかを判断します。そして、10秒ごとにメカニズム全体を繰り返します。しかし、これは効率的な方法ではないと思います。

私がやりたいことは、メモリ全体を一度スキャンすることです。その後、メインメモリに新しく作成されたプロセスのみをスキャンします。メモリ全体ではなく、メモリのみから新しく作成されたメソッドを取得する方法はありますか

4

1 に答える 1

1

純粋にユーザー空間プログラムではできないと思います。私は Windows API にあまり詳しくありませんが、その方法について大まかなヒントを与えることができます。

  1. 実行する前に、すべてのプログラムをスキャンする必要があります。
  2. 後でプログラムに割り当てられたすべてのメモリを実行不可にする(NX ビット)
  3. プログラムを実行しようとすると、ページ フォールトが発生します。今すぐスキャンしてください !!
  4. スキャンしたメモリを読み取り専用にしてから、実行に移します
  5. プログラムがこの領域に書き込もうとすると、再度実行不可にします。

注: セキュリティを確保したい場合は、メモリ領域を実行可能にすると同時に書き込み可能にすることはできません。

このようにして、実行中のメモリをチェックするだけで済みます。そして、それは非常に効率的でなければなりません。

于 2013-09-13T06:29:10.153 に答える