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

Binary 如何对二进制旧文件进行反向工程?,binary,reverse-engineering,thrift,Binary,Reverse Engineering,Thrift,我被要求处理一些序列化为二进制(不幸的是不是text/JSON)对象的文件,但我无法访问创建这些文件的程序或程序员,因此我不知道它们的结构、字段顺序等。是否有办法使用Thrift库打开二进制文件并对其进行分析,获得字段类型列表,值、嵌套等?不幸的是,Thrift的二进制协议似乎根本没有对数据进行太多标记;要解码它,似乎假设您手头有.thrift文件,所以您知道,比如说,接下来的4个字节应该是一个整数,实际上不是浮点的前半部分。因此,基本上,您必须在十六进制编辑器(或等效编辑器)中查看文件,并尝试

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

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

这里有一些非常有用的信息:

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

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


对不起,我知道这可能没有什么帮助,但它确实显示这是所有的信息节俭二进制格式提供;很明显,二进制格式的设计目的是让您始终了解确切的协议规范,目标是最大限度地减少布线空间,而不是使其易于盲目解码。

我假设您正在谈论-您可能希望发布/标记您正在使用的语言。