
Windows RPCインターフェース発見・解析ツール。ビジュアルエンドポイント列挙、PE解析、シンボル解決、リアルタイムETWスニッフィング、セキュリティ監査のためのオンザフライクライアントコード生成を備える。
私たちのブログ記事のアナウンスをお読みください。
RPC Investigator (RPCI) は、Windows RPC エンドポイントに対する高度な発見および分析インターフェースを提供する .NET/C# Windows Forms UI アプリケーションです。このツールは、NtApiDotNet プラットフォームの既存のコア RPC 機能を視覚的に操作できるインターフェースを提供します。以下を含みます:
これらのコア機能に加えて、RPCI は追加機能を提供します:
RPC Investigator がサポートするいくつかのワークフローがあります:
この例では、スケジュールされたタスクを管理および実行するために使用される Windows タスクスケジューラ RPC サービスを検査します。サービスを見つけ、クライアントコードを生成し、公開されたプロシージャの1つと対話するようにクライアントをカスタマイズします。
まず、File -> Load From Service をクリックして Windows サービスのリストを読み込みます。新しいサービスリストウィンドウが開きます:

Schedule サービス(Windows タスクスケジューラ)を見つけ、サービスを選択して Go をクリックします。

RPCI が関連するすべての RPC DLL を読み込む前に、確認が求められます。Yes をクリックして続行します。読み込みが完了すると、サービスプロセスに読み込まれたすべてのモジュールにわたって検出されたすべての RPC サーバーのリストが表示されます。Windows タスクスケジューラ RPC サーバーのインターフェース ID は 86D35949-83C9-4044-B424-DB363231FD0C です。リスト内でこのインターフェース ID を持つ行を見つけます。その行には Task Scheduler という実行中のサービスがあるはずです。行を右クリックし、New Client を選択します。

クライアントウィンドウの左側には、RPC サーバーのメタデータとクライアントコードからのコマンドライン出力が表示されます。右側には2つのタブがあります:
この例では、SchRpcHighestVersion プロシージャを呼び出します。このメソッドは単一の引数 out int version を受け取り、プロシージャの呼び出し後、RPC インターフェースがサポートする最も高いタスクスケジューラプロトコルバージョンが含まれます。上位16ビットがメジャーバージョン、下位16ビットがマイナーバージョンです。
このプロシージャを呼び出すには:
Client Code ウィンドウで、RPC クライアントのメインエントリポイントである Run メソッドを見つけます。
Run メソッドの本体を編集してプロシージャを呼び出します:
public async Task<bool> Run()
{
int version;
int status = SchRpcHighestVersion(out version);
if (status == 0) {
long major = (version & 0xffff0000) >> 16;
long minor = version & 0x0000ffff;
Console.WriteLine("highest supported RPC version: {0}.{1}", major, minor);
} else {
Console.WriteLine("call to SchRpcHighestVersion failed with error: {0:X}", status);
}
return true;
}
このコードを追加した後、Run ボタンをクリックしてクライアントを実行します。これにより C# コードがコンパイルされ、Run メソッドが実行されます。
コンパイルが成功すると、Output ボックスに次のような出力が表示されます:
> Run() output:
highest supported RPC version: 1.6

Rpc Investigator にはいくつかの構成設定があります。
| 設定 | 説明 | デフォルト |
|---|---|---|
| dbghelp.dll | dbghelp.dll モジュールのファイルの場所 | インストールされている Windows キット内の最新バージョンを検索します。 |
| Symbol Path | Windows シンボルへのパス。シンボルサーバーまたはローカルディレクトリを指定できます。 | デフォルトの公開 Windows サーバー: srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Trace Level | ログのトレースレベル | info |
構成設定は、アプリケーション内の Edit -> Settings メニューから変更できます。
初期リリース後、RPC Investigator は .NET Framework アプリケーションから .NET 7 アプリケーションに変換されました。ビルドの問題が発生した場合は、Visual Studio が最新であることを確認してください。.NET Framework バージョンからビルドする前に、すべてのビルド出力フォルダを消去することをお勧めします。
また、安全でない BinaryFormatter クラスから protobuf-net への移行により、.NET Framework バージョンで生成された RPC ライブラリは .NET バージョンと互換性がありません。
RPC Investigator でランダムなクラッシュが発生する場合は、管理者に EDR を調整してもらうと解決するかもしれません。一部の EDR は JIT コンパイルされる言語と正常に動作しないことがわかりました。
場合によっては、RPC Investigator が EDR によって悪意のあるものとして検出されることがあり、Virus Total での誤検出も含まれます。これは既知の問題です。これは、RPC Investigator が James Forshaw によって作成された NtObjectManager パッケージを含んでおり、Windows Defender を含む多くの EDR によって(誤って)検出されることが知られているためです。
Windows RPC は10年以上にわたって人気のある研究トピックであるため、ここで挙げきれないほど多くの関連リソースや研究があります。このツールを構築する際に遭遇したものを以下にいくつか挙げます:
RPC の内部に詳しくない場合や、技術的な復習が必要な場合は、このトピックに関する権威ある情報源の1つである、Alex Ionescu による2014年のシンガポールでの SyScan 講演「All about the RPC, LRPC, ALPC, and LPC in your PC」をお勧めします。