"プロセスエクスプローラ"または "コンボフィックス"のようなアプリケーションは、隠されたプロセスをどのように検出しますか?私はこれがCまたはC++で行われなければならないと仮定しています。 .NETでもプロセスリストにアクセスするのは簡単ですが、これは必ずしも正確ではありません。私は、ルートキットがタスクマネージャから自分自身を隠すことができることを知っています。それはメモリアクセスとIOを通してですか?誰かがこれがどのように達成されているか知っていれば興味がある。隠しプロセスを検出する方法
答えて
この質問には回答できません。プロセスが最初に隠された方法によって異なります。たとえば、usermode DLLをEnumProcesses
,Process32Next
などのフックとプロセス列挙に関連するすべてのAPIにフックするすべてのプロセスにDLLを注入することによって、プロセスを非表示にすることができます。これは、フックをスキップするトランポリンでバイパスされます。
ただし、プロセスのリストを保持するカーネルEPROCESS
リンクリストを変更してプロセスが隠されていた場合は、隠蔽を行ったコードを覆すために別の方法が必要になります。プロセスがどのように「隠されている」と考えているかを定義すれば、おそらくそれを検出する方法を提案することができます。どのプロセスが隠れていると思われますが、まだプロセスエクスプローラで検出されていますか?
はまた、あなたがプロセスを隠すため 複数の方法があるかもしれないことを考慮に言うことを取ります。 これを検出する一般的な方法のいくつかは何ですか?
問題は、あなたが探しているものが分からない場合、それを見つけることはほとんど不可能です。 EnumProcesses
をフックすることによって、プロセスがタスクマネージャに隠されたとします。これは検出するのが簡単なケースだと思うかもしれません。ただし、このプロセスはさまざまな方法でEnumProcesses
にフックすることができます。たとえば、関数の開始時に無条件にフックをつけると、IATフックが発生し、EnumProcesses
でアクセス違反が発生し、VEHでそれをキャッチし、EIP/RIPなどを変更します。この単純なケースでも、フックの検出を保証することはできません。これはすべて、特定のAPIのusermodeでフックが実行されたことを前提としており、コードが検出から隠蔽しようとしないことを前提としています。
一般的なガイドラインをお探しの場合、最も一般的な方法は一般的な迂回技術を調べることです。メソッドの仕組みが分かれば、操作を検出するコードを書くのは簡単です。
おそらく、この種のコードを書こうとする意欲や、それが目的とする目的を与えてくれれば、より良いお手伝いをすることができます。これは、より一般的な方法であるとある -
- ダイナミック(ランタイム)迂回:
あなたはプログラムが他のプロセスの実行を迂回方法を探しているなら、それは通常2つのいずれかの手段でありますMicrosoft Detoursのようなライブラリで使われているもの。ここでは、関数の最初の数バイトを上書きして、無条件に計測器に分岐する関連する論文を示します。
- (静的)バイナリリライト - これは、ルートキットの一般的ではない方法ですが、リサーチプロジェクトで使用されます。バイナリを静的に解析して上書きすることで、迂回を実行することができます。これを実行するWindows用の古い(公開されていない)パッケージはEtchです。 This paperは、概念的にどのように動作するかを詳細に示しています。
Detoursは動的迂回の1つの方法を示していますが、業界では特にリバースエンジニアリングやハッキングアリーナで無数の方法が使用されています。これらには、上記のIATとブレークポイントの方法が含まれます。これらのための正しい方向を指すためには、リサーチプロジェクトやリバースエンジニアリングの分野で行われた「リサーチ」を見てください。
+1私はまさに私が考えていたものです –
私はコードや正確な答えを探していませんが、私はいくつかのリソースの正しい方向に私を指し示すのが難しくないと思います。応答していただきありがとうございます。 –
また、プロセスを非表示にする方法が複数ある可能性があることを考慮してください。これを検出する一般的な方法は何ですか? –