
このツールは、特定のバイナリがロードされているプロセス、またはロードされていないプロセスを検索します。これは以下のシナリオで役立ちます。
c:\windows\sytem32\lsass.exe がロードされたプロセスを検索すると、LsassのPIDが得られます)。おそらく、このツールの他の有用な使い方も見つかるでしょう。これらの結果は、システム内のすべてのプロセスを反復処理せずに、ノイズを減らして取得されます。
このツールは、FileProcessIdsUsingFileInformation フラグを指定して NtQueryInformationFile を呼び出すことで、特定のバイナリがロードされているすべてのプロセスを取得します。その後、必要な場合にのみ EnumProcesses を呼び出してすべてのプロセスのPIDを取得し、最終的に両方の結果を比較して最終的なPIDリストを取得します。ツールがクワイエットモードで実行されていない場合、最終的なPIDはプロセスのメインモジュールの完全修飾パスに変換されます。
プロセス間アクティビティを減らしたい場合は、quiet モード(--quiet または -q)を使用してください。この場合、プロセスハンドルは開かれませんが、ツールはPIDのみを取得し、完全修飾パスは取得しません。
このツールは、Win10以降およびWindows Server 2016以降と完全に互換性があります。古いOSバージョンの場合、OpenProcess(src::main.rs:108 行)の呼び出しには、PROCESS_QUERY_LIMITED_INFORMATION だけでなく PROCESS_QUERY_INFORMATION と PROCESS_VM_READ が必要です(または、プロセスハンドルを開かないクワイエットモードを使用することもできます)。
文字列リテラルを難読化するために LITCRYPT プラグインを使用しているため、コードをコンパイルする前に環境変数 LITCRYPT_ENCRYPT_KEY を設定する必要があります。
C:\Users\User\Desktop\bin_finder\bin_finder> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
その後、コードをコンパイルしてツールを実行するだけです。
C:\Users\User\Desktop\Bin-Finder> cargo build --release
C:\Users\User\Desktop\Bin-Finder\target\release> bin_finder.exe -h
Bin-finderには2つの異なる使用モードがあります。デフォルトモードでは、指定されたバイナリがロードされていないすべてのプロセスを検索します。例えば、CrowdStrike DLLがロードされていないすべてのプロセスを検索できます。

これは、EDRの例外リスト内のディレクトリ/プロセスを探している場合に非常に便利です。
プロセス間アクティビティを減らしたい場合は、クワイエットモードを使用してPIDのみを取得できます。

また、探しているDLLの名前やパスがわからない場合は、-l または --list フラグを使用して、通常のプロセスにロードされているモジュールを一覧表示してみることもできます(これはEDRが存在するかどうかを確認するのにも役立ちます)。

2つ目の使用モードは逆引きルックアップ(フラグ -r または --reverse)で、指定されたバイナリを現在ロードしているすべてのプロセスを検索します。例えば、StorSvcサービスを実行しているプロセスのPIDを取得したい場合があります。その場合は、そのサービスが使用するRPCサーバーを実装しているDLLに対して逆引きルックアップを実行するだけです。

この逆引きルックアップは、システム内のすべてのプロセスを反復処理する必要なく、メインモジュールの完全なパス(通常は.exeファイル)を指定してプロセスのPIDを直接取得するためにも使用できます。次は、実行中のすべてのchrome.exeのPIDを取得する方法です。
