如何对二进制thrift文件进行反向工程?

Tef*_*Ted 5 binary reverse-engineering thrift

我被要求处理一些序列化为二进制的文件(不幸的是不是text/JSON)Thrift对象,但是我没有访问创建文件的程序或程序员,所以我不知道它们的结构,字段顺序有没有办法使用Thrift库打开二进制文件并对其进行分析,得到字段类型,值,嵌套等的列表?

Jac*_*oyd 8

不幸的是,似乎Thrift的二进制协议根本不会对数据做很多标记; 解码它似乎假设您手头有.thrift文件,所以你知道,接下来的4个字节应该是一个整数,实际上不是浮点数的前半部分.因此,基本上,你看起来很困难,在十六进制编辑器(或等效的)中查看文件,并尝试根据你看到的确切模式推断出字段.

有一点很有用:

每个文件都以版本,协议标识符字符串和序列号开头.映射将以6个字节开始,这些字节标识键和值类型(前两个字节,作为整数代码)加上元素数作为4字节整数.类型代码似乎是标准的(它们的定义的规范位置似乎是Thrift源中的TProtocol.h,例如,布尔值由类型代码2指定,UTF-8字符串由类型代码16指定,依此类推) .字符串以4字节整数长度字段为前缀,列表以类型(1字节)和4字节长度为前缀.看起来所有整数字段都保存为big-endian,并且浮点以IEEE格式保存(至少应该使双打相对容易找到).

Thrift中的TBinaryProtocol*文件有一些更有用的细节; 从好的方面来说,有许多不同的实现方式,因此您可以阅读以您最熟悉的语言实现的实现.

对不起,我知道这可能没那么有用,但确实看起来这是Thrift二进制格式提供的所有信息; 很明显,二进制格式的设计意图是您始终知道确切的协议规范,并且目标是最小化线空间,而不是盲目地解码它.