我正在反转一个 android 应用程序,我设法拦截了一个 grpc 请求并使用 protoc 对其进行了解码,但我似乎无法理解任何数据,我知道由于请求标头的原因,它使用 gzip 进行了压缩
"content-type": "application/grpc; charset=utf-8",
"grpc-accept-encoding": "identity,deflate,gzip",
"accept-encoding": "identity,gzip",
这是解码后的协议缓冲区
"1": {
"1": "¸z =PÞCw.\u001e}».*\u001f\u0011"
},
"2": some value,
"3": {
"1": {
"1": {
"1": "©ÄS¢ÄþP\f.½\fÑWÄK>"
}
}
},
"4": {
"2": 1,
"4": {
"2": {
"1": "other value"
}
},
"7": 2
}
}
我已经在网络厨师上尝试过 gunzip,但是没有文件签名我无法解压缩任何东西,那么我应该如何将其他不可读的值解压缩为纯文本?当我在预期功能之上发送相同的二进制数据时,我知道服务器正在以某种方式将它们转换回可读文本并说我想在它被序列化之前拦截Android应用程序上的数据什么是最好的地方这样做?
更新:这是使用具有与上述相同结构的 proto 解码数据的结果,这个数据是什么我如何解码它?
s {
string1: "\270z =P\336Cw\211\036}\273\214*\037\021"
}
id: 1640553558
d {
d0 {
d1 {
string2: ">D_.\233d\\\177\210\274\320\000}\253\')"
}
}
}
g {
id2: 1
f {
f0 {
string3: "Eiei"
}
}
id3: 2
}
这是我构建的 .proto
syntax = "proto2";
message body {
message b1 {
optional string s0 = 1;
}
optional b1 s = 1;
optional int32 id = 2;
message b2 {
message b3 {
message body4 {
optional string string2 = 1;
}
optional body4 d1 = 1;
}
optional b3 d0 = 1;
}
optional b2 d = 3;
message b4 {
optional int32 id2 = 2;
message b5 {
message b6 {
optional string message0 = 1;
}
optional b6 f0 = 2;
}
optional b5 f = 4;
optional int32 id3 = 7;
}
optional b4 g = 4;
}