私は別のプロセスが行うことを分析するプロセスに取り組んでいます。
CPU、メモリ使用量、スレッドの作成と停止などをチェックします。残念ながら、調査したプロセスでリモートスレッドを作成するアンチウイルスがコンピュータにインストールされています。このリモートスレッドは実際にはプロセスの一部ではないため、プロセスを検討する際には、このスレッドの完全性を無視したいと思います。
スレッドを「リモートスレッド」として識別できるようにする方法(C ++)はありますか?
私は別のプロセスが行うことを分析するプロセスに取り組んでいます。
CPU、メモリ使用量、スレッドの作成と停止などをチェックします。残念ながら、調査したプロセスでリモートスレッドを作成するアンチウイルスがコンピュータにインストールされています。このリモートスレッドは実際にはプロセスの一部ではないため、プロセスを検討する際には、このスレッドの完全性を無視したいと思います。
スレッドを「リモートスレッド」として識別できるようにする方法(C ++)はありますか?
カーネルモードに移行する場合は、 PsSetCreateThreadNotifyRoutineを使用するとよいでしょう。Uninformedによると、スレッドを作成または終了するプロセスのコンテキストで呼び出されます。私はこれが他の場所で提案されているのを見たこともあります。
私はこれをテストすることに取り掛かりました、それはうまくいきます。Windowsは(当然のことながら)それ自体で何らかの注入を行うため、多くの誤検知が発生することに注意してください。<EDIT>これは実際には、最初のスレッドが作成されるときにプロセスが作成されるときに、親プロセスのコンテキストで実行されるために発生します。最初のスレッドの作成を単純に排除すると、これはかなり良い兆候を示します。</編集>
(ドライバーを作成する必要があることを除いて)主な欠点は、作成が行われることを確認する必要があることです。そのため、プロセスを最初に開始する必要があります。
あるいは、前述のように、スタックトレース、ロードされたモジュール、およびその他すべての優れた機能を含むヒューリスティックが機能します。
CreateThread
内部的には、で作成されたスレッドとで作成されたスレッドの間に区別はありませんCreateRemoteThread
。(内部的には、CreateThread
基本的にターゲットプロセスとして呼び出しCreateRemoteThread
てパスGetCurrentProcess()
します。)スレッドを区別する場合は、ヒューリスティックを使用する必要があります。