encryption - 如何解压/解压原始 grpc 数据?
问题描述
我截获了 grpc http2 请求,但我无法理解 mitmproxy 将其打印为十六进制的数据这是一些标头
te: trailers
content-type: application/grpc
grpc-accept-encoding: identity,deflate,gzip
accept-encoding: identity,gzip
但是数据没有任何意义我在cyberchef上尝试了gunzip,它一直说“Gunzip - 无效的文件签名:”我尝试了protobuf解码器,它说“错误:缓冲区耗尽”任何想法我应该如何处理这个?
编辑:这是我试图解压缩的数据
\x12
\x10\xb8z =P\xdeCw\x89\x1e}\xbb\x8c*\x1f\x11\x10\xff\xc7\xa0\xad\xaa\xd9\xbe\xcf\xb6\x01\x1a\x16
\x14
\x12
\x10>D_.\x9bd\\\x7f\x88\xbc\xd0\x00}\xab')"\x0b\x10\x01"\x05\x12\x03
\x01E8\x02"
这是 mitmproxy 设法解压缩的另一条 protobuf 消息
(
&\x12$3e445f2e-9b64-5c7f-88bc-**
这是2个解压缩的数据
1 {
1 {
2: 3e445f2e-9b64-5c7f-88bc-**
}
}
解决方案
gRPC 协议在本文档中定义。特别是,关于“Length-Prefixed-Message”的部分描述了数据是如何编码的:
Length-Prefixed-Message项的重复序列在 DATA 帧中传递
- Length-Prefixed-Message → Compressed-Flag Message-Length Message
- Compressed-Flag → 0 / 1 # 编码为 1 字节无符号整数
- Message-Length → {length of Message} # 编码为 4 字节无符号整数(大端)
- 消息→ *{binary octet}
换句话说,要读取消息,读取压缩位的 1 个字节,然后读取长度的 4 个字节,然后读取消息的那么多字节。如果设置了压缩位,则需要使用“grpc-encoding”标头中描述的格式解压缩消息。然后消息的格式是特定于应用程序的。Protobuf 很常见。
推荐阅读
- chapel - 如何使用 Chapel 并行 IO?
- c# - 如何在自定义 FrameworkElement 上设置指针事件样式
- plugins - 追溯签署 Office COM 加载项
- azure - 通过API购买域名
- google-cloud-platform - Google 设备访问 - 获取和访问令牌 - 未经授权
- python - 缩放熊猫系列
- r - 如何在 R 中创建两个连续且具有同意值的条形图
- html - 水平滚动条在反应中不起作用
- c# - 为什么将 x 和 z 上的玩家旋转设置为 0 时没有设置它?
- android - Unity 在为 Android 构建时在运行时抛出 IL2CPP 构建错误?2018.4.5f1