如何枚举并连接到 Windows 10 RPC 接口?

逆向工程 视窗 视窗 10
2021-06-30 18:54:35

假设我知道某个 Windows 服务公开了一个本地 RPC 接口。我想创建一个调用这些过程的客户端程序;但是,我没有服务应用程序的源代码。

我知道我可以使用 Process Explorer 在 下获取服务器的 ALPC 句柄的名称\RPC Control,我猜这个句柄可用于创建一个绑定字符串,这将允许我的客户端连接到服务器。这应该有望解决连接部分。

但是,我应该如何继续为我的客户端定义实际的 RPC 接口以在服务器上执行代码?我首先需要识别远程过程和它们采用的参数,然后编写一个合适的客户端。我的猜测是我应该编写一个以某种方式适合服务的 idl 文件,然后使用具有适当配置的 midl 编译器编译它。这是最好的策略还是有更多经验的人会提出其他建议?枚举和逆向工程 RPC 接口的最有效技术或工具是什么?有必要倒车吗?有没有人有一些他们可以分享这方面的经验?

2个回答

我使用mIDA 来分析 RPC :mIDA 是 IDA 反汇编程序的插件,它可以从二进制文件中提取 RPC 接口并重新创建关联的 IDL 定义。mIDA 是免费的,并且与最新版本的 IDA(5.2 或更高版本)完全集成。请注意,mIDA 不适用于最新版本(64 位版本)的 IDA,但需要 32 位版本(6.95 是最新版本)。

该插件可用于:

* Navigate to RPC functions in IDA
* Analyze RPC function arguments
* Understand RPC structures
* Reconstruct an IDL definition file

大多数情况下,mIDA 生成的 IDL 代码可以使用 Microsoft 的 MIDL 编译器 (midl.exe) 重新编译。

mIDA 由 Tenable 免费分发给社区,希望对您有用并帮助研究工程师更有效地处理 RPC 程序。但是,Tenable 不提供对此工具的支持,也不对其使用或输出提供任何保证。在使用此程序之前,请阅读最终用户许可协议。

mIDA 的示例输出

我发现符合我要求的是一个免费的开源工具RpcView,它可以从选定的进程中枚举端点和接口,在进程的地址空间中列出其对应的过程及其各自的地址,并将接口反编译为 idl 文件。它也适用于 x64。

一个小细节是默认情况下它似乎每秒刷新进程列表,这导致它非常严重地滞后。为了解决这个问题,我只需要从选项菜单中将刷新率设置为手动。