タスクマネージャーからプロセスを非表示にできることを読みました ここの例
ルートキットを使用した隠しキーロガーに関する投稿をいくつか見ましたが、それだけです。
非表示になっているにもかかわらず、実行中のプロセスを確認するツールまたは方法はありますか?
これは、プロセスがどのように隠されているかによります。特定のWindows API関数がフックされている場合、それらの関数を使用しているプロセスマネージャーにはプロセスが表示されません。したがって、非表示にしようとしている特定のソフトウェアと、それを見つけようとしている監視ソフトウェアに依存しています。使用している監視プログラムに関係なく、実行中のすべてのプロセスを検出できるとは限りません。とはいえ、そこには優れたツールがいくつかあります。
Sysinternals Suite には、複数の異なる監視プログラムがあります。 GUIの観点から見ると、Process Explorerは非常に優れています。また、VirusTotalにリンクして、検出された現在実行中のプロセスが悪意のあるものであるかどうかを通知します。 Procmonはプロセス監視に最適です。 Windows APIファイル/レジストリ/ネットワーク関数呼び出しに基づいて出力を行います。欠点は、出力が膨大であり、一般に何を探しているのかを知る必要があることです。ただし、非表示のプロセスがレジストリ、ファイルにアクセスしている場合、またはネットワーク経由で通信している場合は、ここに表示されます。
プロセスの非表示メカニズムを具体的に検索して公開しようとする機能を備えた YaProcmon (まだ別のプロセスモニター)というオープンソースモニターがあります。
Sysinternalsプロセスエクスプローラーはあなたの友達です 。これにより、非表示のタスクなど、タスクマネージャーで使用するよりも多くの情報が表示されます。
私はプロセスを知っています。ゲームは、x2.exe以外のプロセスから自分自身を隠すので、イメージ名を介して.NET Frameworkを介して実行されているかどうかを検出しようとするプロセスは機能せず、FindWindowも機能しません。実際にウィンドウを「所有」するのに1〜2分かかる場合。これにより、イメージ名検出が唯一の方法になりますが、問題は、カーネルレベルなどでの非表示をバイパスすることです。
したがって、Long Storyは、プロセスをSysinternalsツールのようなものから隠す方法がありますが、Windowsタスクマネージャーにはありません。トリックは、より「カーネル」レベルでそれをバイパスするAPIを見つけることです。
答えは ボラティリティ です。
Process Explorer
は、メモリ内のどこかにある二重にリンクされたリストであるプロセスリストにあるプロセスのみを表示/検索できます。プロセスエクスプローラーは、最初のノードの場所を知っており(またはノードの1つへのポインターを持っています)、そのノードからリストを反復処理して、「非表示でない」プロセスを見つけます。
タスクスケジューラはこのリストを使用してタスクをスケジュールせず、代わりに別のリストを使用します(スレッドリストである必要があります)。
ただし、プロセスがそれ自体を非表示にすると、前のノードと次のノードへのリンクが削除され、メモリhidden
に残ります。スレッドリストではなくプロセスリストから自身を削除するだけなので、表示されずに実行を継続します。
各プロセスには、多数のパラメーターを持つ単純なc
クラスのような特定のクラス構造があります。
ボラティリティはメモリ全体を検索し、メモリ内のprocess class
構造と、二重リンクリスト(プロセスのリスト)を見つけます。
したがって、出力はcurrect
、killed
およびhidden
プロセスを含むメモリ内のすべてのプロセスです。
隠されたプロセスのためのより簡単なプログラムを探していましたが、答えのボラティリティを確認できなかったので、私は答える必要があると感じました。