web-dev-qa-db-ja.com

Windowsのソフトウェア(スパイウェア)でスクリーンショットが撮られたときの検出

ほとんどのトロイの木馬、スパイウェア、キーロガーツールには、スクリーンショットを撮る機能があります。 Windowsでアプリやソフトウェアがスクリーンショットを撮っているかどうかを検出する方法はありますか?たぶん、Windows API呼び出しかdllか?

これはマルウェアを見つけるのに役立ちます。

6
user76223

私の答えは、いくつかのコードを書く必要があります。あなたが質問でプログラミング関連のソリューションについて言及したので、私はこの回答を投稿するだけです。

Window Vista以降、Windowsカーネルは基本的にコンピューターで発生するすべてのことに対してイベントを発生させます。 Microsoftは TraceEvent というライブラリを.NET用に提供しており、これらのイベントにフックするのは簡単です。

スクリーンショットを検出するために、メモリ書き込みイベント、ファイル書き込みイベントなどを監視できます。ソケットIOなど)の通知にフックすることもできます。これらすべてを約30行のコードで実行できます。

そこから、どれほど侵襲的で徹底的になりたいかに応じて、さまざまなことができます。 Winsockのsend関数などの不明なプロセスの呼び出しをフックして、プロセスがソケットに書き込むすべてのデータのコピーをこすり取って確認することができます。スクレイピングされたデータでJPEGまたはPNGヘッダーを探し、アラームベルを見つけたらそれを発火させることができます。書き込むファイルなどを開いて分析できます。

この時点で状況は複雑になる可能性がありますが、send関数を EasyHook のようなライブラリに100程度のLOCでフックすることができます。

別のアプローチは、このようなアプリケーションがこの機能を実行するためにロードする必要があるライブラリ/ WinAPI関数を調べることです。プロセスが開始したとき、およびこれらのカーネルイベントでアセンブリ(.dll)が読み込まれたときを検出できるため、読み込まれたアセンブリの正しい(または間違った)組み合わせを探すことができます。起動するすべてのプロセスで画面キャプチャ機能を提供するWinAPIまたはOpenGLまたはDirectX関数を自動的にフックし、アプリケーションがこれらの機能にアクセスするタイミングを直接監視できます。

この一般的なアプローチの詳細については、他の回答 here を参照してください。

私が簡単であると宣伝している唯一のことは、OSの中心に直接フックして、起こっていることに関する通知を受け取るプロセスであることを明確にしたいと思います。このデータを正しく使用して悪意のあるコードを効果的にキャッチすることは、はるかに困難な作業です。

1
user7933

これは、空き領域(非常に簡単)またはファイルの書き込み(簡単ではない)を監視することで検出できます。スクリーンショットはどこかに保存する必要があるので、ファイルはそれほど目立たない場所に積み重ねる必要があります。

これは私が使用した方法で、シンプルなファイルマネージャを使用するだけで、マルチロガーを見つけて排除することができました。

0
Overmind