推导出 Protobuf 模式和数据类型

逆向工程 文件格式 Python 编码 协议
2021-06-22 21:27:49

我有许多 protobuf 文件,但没有 .proto 架构文件!

cat myfile.pbuf | protoc --decode_raw > outputfile.txt

使用上面的命令,我能够将文件解码为可读的 protobuf 格式(谢谢):

1: 1
2: ""
2 {
  1: 0x40133f7ced916873
  2: 0x3ff70e5604189375
  3: 0xbfd23d70a3d70a3d
  4: 0x3fb999999999999a
}
2 {
  1: 0x4022e7ef9db22d0e
  2: 0x4006ed916872b021
  3: 0xbfe1cac083126e98
  4: 0x3fc999999999999a
}
2 {
  1: 0x402bdcac083126e9
  2: 0x40111374bc6a7efa
  3: 0xbfe9fbe76c8b4396
  4: 0x3fd3333333333333
}
2 {
  1: 0x40324147ae147ae1
  2: 0x401696872b020c4a
  3: 0xbff0e147ae147ae1
  4: 0x3fd999999999999a
}
...

我知道没有模式我无法知道这些值的含义,但我想知道我是否还能做任何其他事情来推断出这种奇怪之处!protobuf的文件似乎表明,数值数据在2或4字节块,我可以很容易地转换为整数或浮点数服务。

我的数据不适合这种格式,但我知道它是数字数据!我从未见过带有十六进制x表示法的 protobuf 文件,并且有 16 个字节(对于单个数字来说太多了!)。

这可能是什么数据类型,是否可以在没有模式的情况下进行解码和进一步处理,1, 2, 3, 4有用或重要吗?

1个回答

我怀疑这些是 IEEE 双打。例如,0x3fd3333333333333 是 2.99999999999999988897769753748E-1,或大约 0.3。我用这个转换器来检查