请阅读我们的博客文章公告。
RPC Investigator (RPCI) 是一个基于 .NET/C# 的 Windows Forms 用户界面应用程序,为 Windows RPC 端点提供高级发现和分析接口。该工具围绕 NtApiDotNet 平台现有的核心 RPC 功能提供了可视化界面,包括:
除了这些核心功能,RPCI 还提供了额外的能力:
RPC Investigator 支持以下几种工作流程:
在此示例中,我们将检查 Windows 任务计划程序 RPC 服务,该服务用于管理和执行计划任务。我们将找到该服务,生成客户端代码,然后定制客户端以与其中一个公开的过程进行交互。
首先,通过单击 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 服务器元数据和客户端代码的命令行输出。右侧显示两个选项卡:
在本示例中,我们将调用 SchRpcHighestVersion 过程。此方法接受一个参数 out int version,调用该过程后,该参数将包含 RPC 接口支持的最高任务计划程序协议版本。高 16 位是主版本,低 16 位是次版本。
要调用此过程:
在 Client Code 窗口中,找到 Run 方法,这是 RPC 客户端的主要入口点。
编辑 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 有几个配置设置。
| 设置 | 描述 | 默认值 |
|---|
配置设置可以在应用程序内通过 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 包含 NtObjectManager —— 一个由 James Forshaw 创建的软件包,已知会被许多 EDR(包括 Windows Defender)检测为恶意(误报)。
由于 Windows RPC 十多年来一直是一个热门的研究课题,相关的资源和研究工作不胜枚举。下面我们列出了在构建此工具时遇到的一些资源:
如果您对 RPC 内部机制不熟悉或需要技术复习,我们建议参考该主题的权威来源之一 —— Alex Ionescu 2014 年在新加坡 SyScan 上的演讲 All about the RPC, LRPC, ALPC, and LPC in your PC。
| dbghelp.dll | dbghelp.dll 模块的文件位置 | 在已安装的 Windows Kits 中查找最新版本。 |
| Symbol Path | Windows 符号的路径,可以是符号服务器或本地目录 | 默认公共 Windows 服务器:srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Trace Level | 日志记录跟踪级别 | info |