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

时间:2009-10-13 17:19:32

标签: binary reverse-engineering thrift

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

1 个答案:

答案 0 :(得分:8)

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

有一些有用的内容:

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

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

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