jcmturner/rpc

GitHub: jcmturner/rpc

一个基于 Go 的 RPC 库,实现了 Open Group CDE 1.1 标准中的 NDR 编码反序列化功能,将 NDR 字节流解码为 Go 结构体。

Stars: 8 | Forks: 2

# RPC 该项目现已转换为使用 Go modules。请参考最新的主版本子目录。 这遵循了 https://blog.golang.org/v2-go-modules 中概述的做法 [![Version](https://img.shields.io/github/v/release/jcmturner/rpc?label=Version&sort=semver)](https://github.com/jcmturner/rpc/releases) 本项目与 [CDE 1.1: Remote Procedure Call](http://pubs.opengroup.org/onlinepubs/9629399/) 相关 这是一个部分实现,主要侧重于将 NDR 编码的字节流反序列化为 Go 结构体。 ## 求助 **需要参考测试向量**:由于标准文档中缺乏参考测试字节流,实现起来比较困难。如果没有这些,测试驱动开发将极具挑战性。 如果您了解 NDR 编码的参考测试向量来源,请通过提交 issue 并提供详细信息来告知我。非常感谢! ## 参考 * [Open Group RPC 出版物](http://pubs.opengroup.org/onlinepubs/9629399/) * [Microsoft RPC 文档](https://docs.microsoft.com/en-us/windows/desktop/Rpc/rpc-start-page) ## NDR 解码能力清单 - [x] 格式标签 - [x] 布尔值 - [x] 字符 - [x] 无符号小整数 - [x] 无符号短整数 - [x] 无符号长整数 - [x] 无符号超整数 - [x] 有符号小整数 - [x] 有符号短整数 - [x] 有符号长整数 - [x] 有符号超整数 - [x] 单精度浮点数 - [x] 双精度浮点数 - [x] 一维定长数组 - [x] 多维定长数组 - [x] 一维一致性数组 - [x] 多维一致性数组 - [x] 一维一致性可变数组 - [x] 多维一致性可变数组 - [x] 可变字符串 - [x] 一致性可变字符串 - [x] 字符串数组 - [x] 联合体 - [x] 管道 ## 来自 IDL 的结构体 [接口定义语言 (IDL)](http://pubs.opengroup.org/onlinepubs/9629399/chap4.htm) ### 字段是指针吗? ### 数组是一致性和/或可变的吗? 如果 IDL 定义包含以下属性之一,则数组是一致性的: * min_is * max_is * size_is 如果 IDL 定义包含以下属性之一,则数组是可变的: * last_is * first_is * length_is #### 示例: 在以下示例中,SubAuthority[] 是一致性的: ``` typedef struct _RPC_SID { unsigned char Revision; unsigned char SubAuthorityCount; RPC_SID_IDENTIFIER_AUTHORITY IdentifierAuthority; [size_is(SubAuthorityCount)] unsigned long SubAuthority[]; } RPC_SID, *PRPC_SID, *PSID; ``` 在以下示例中,Buffer 是指向一致性可变数组的指针: ``` typedef struct _RPC_UNICODE_STRING { unsigned short Length; unsigned short MaximumLength; [size_is(MaximumLength/2), length_is(Length/2)] WCHAR* Buffer; } RPC_UNICODE_STRING, *PRPC_UNICODE_STRING; ``` ### 联合体是封装的吗?
标签:EVTX分析, Go, NDR解码, Prisma Cloud, RPC库, Ruby工具, 数据序列化, 日志审计, 网络通信