Encryption 如何解压缩原始grpc数据?

Encryption 如何解压缩原始grpc数据?,encryption,compression,protocol-buffers,grpc,packing,Encryption,Compression,Protocol Buffers,Grpc,Packing,我截获了grpc http2请求,但我无法理解mitmproxy将其打印为十六进制的数据,这是一些标题 te: trailers content-type: application/grpc grpc-accept-encoding: identity,deflate,gzip accept-encoding: identity,gzip 但是数据没有任何意义,我在cyberchef上尝试gunzip,它一直在说“gunzip-无效文件签名:”我尝试protobuf解码器,它说“错误:缓冲区耗

我截获了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"
(
&\x12$3e445f2e-9b64-5c7f-88bc-**
这是mitmproxy设法解压的另一条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"
(
&\x12$3e445f2e-9b64-5c7f-88bc-**
这是2个解压缩的数据

1 {
  1 {
    2: 3e445f2e-9b64-5c7f-88bc-**
  }
}

gRPC协议在中定义。具体而言,“长度前缀消息”部分描述了数据的编码方式:

长度前缀消息的重复序列在数据帧中传递

  • 长度前缀消息→ 压缩标志消息长度消息
  • 压缩标志→ 0/1#编码为1字节无符号整数
  • 消息长度→ {Message length}#编码为4字节无符号整数(big-endian)
  • 消息→ *{二进制八位组}
换句话说,要读取消息,先读取压缩位的1个字节,然后读取长度的4个字节,然后读取消息的多个字节。如果设置了压缩位,则需要使用“grpc编码”标题中描述的格式解压缩消息。那么消息的格式是特定于应用程序的。Protobuf是常见的