如何对二进制 Thrift 文件进行逆向工程?

2024-01-02

我被要求处理一些序列化为二进制的文件(不幸的是不是文本/JSON)Thrift http://incubator.apache.org/thrift/对象,但我无权访问创建这些文件的程序或程序员,所以我不知道它们的结构、字段顺序等。有没有办法使用 Thrift 库打开二进制文件并分析它,获取字段类型、值、嵌套等的列表?


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

有一些有用的信息:

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对二进制 Thrift 文件进行逆向工程? 的相关文章

  • 使用带有 1 字节变量的 Python struct.unpack

    我该如何使用struct unpack 或 Python 中可用的其他一些函数可以轻松转换one字节变量到Python整数 现在 它是以一种相当蹩脚的方式完成的 file open telemetry dat rb read magic f
  • 如何使用 Hibernate Tools 生成带有 toString、equals 和 hashcode 的 POJO?

    用于 eclipse 的 Hibernate Tools 插件 版本 3 2 4 Hi all 我正在使用该插件从 DB Schema 对 POJO 和 DAO 进行逆向工程 并且由于某种原因 未在 POJO 中创建 toString eq
  • C++读取二进制文件

    我想了解如何在 C 中读取二进制文件 我的代码 int main ifstream ifd input png ios binary ios ate int size ifd tellg ifd seekg 0 ios beg vector
  • 有用的二进制差异工具(除了 msdn[apatch 和 mpatch]、xdelta、bsdiff、vbindiff 和 winmerge)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要一个二进制 diff 工具 它可以从比较的 8MB 文件 dat 压缩文件 生成补丁文件 并且可以将生成的补丁文件合并到旧的 dat
  • 原始(二进制)数据太大而无法写入磁盘。如何按块写入磁盘(附加)?

    我在 R 中有一个很大的原始向量 即二进制数据数组 我想将其写入磁盘 但我收到一条错误消息 告诉我该向量太大 这是一个可重现的示例和我收到的错误 gt writeBin raw 1024 1024 1024 2 test bin Error
  • 使用node.js fs.writeFile写入二进制数据以创建图像文件

    我正在尝试用 node js 编写画布数据fs writeFile https nodejs org api fs html fs fs writefile file data options callback作为二进制文件 JPEG 文件
  • 在汇编程序中将十进制转换为二进制

    我的第一个汇编程序需要帮助 我必须将用户输入的值从十进制转换为二进制 我不知道如何将值显示为小数 以及下一步应该做什么 谁能一步一步指导我下一步做什么 model small stack 100h data txt1 db Enter bi
  • 为什么 C 没有二进制文字?

    我经常希望我能在 c 中做这样的事情 val1 0b00001111 clear high nibble val2 0b01000000 set bit 7 val3 0b00010000 clear bit 5 使用这种语法似乎是对 C
  • 微服务之间的通信

    假设您有微服务 A B 和 C 它们当前都通过 HTTP 进行通信 假设服务 A 向服务 B 发送请求 服务 B 得到响应 然后 该响应中返回的数据必须发送到服务 C 进行一些处理 然后最终返回到服务 A 服务 A 现在可以在网页上显示结果
  • 如何对加密算法进行逆向工程?

    我编写了一个以这种方式加密文本的应用程序 获取输入文本 反转文本 转换为十六进制 用密钥进行异或 Base64编码 现在 我自己没有做很多加密 编码 所以我的问题可能听起来很愚蠢 但是 假设我得到一个包含上述算法内容的文件 而我不知道这个算
  • 在Windows中比较2个二进制文件的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个工具来比较两个二进制文件 文件相当大 我在互联网上找到的一些免费软件或试用工具不方便用于大文件
  • 是否有将二进制数据打包成 UTF-16 字符串的标准技术?

    在 NET中 我有任意二进制数据存储在byte 例如图像 现在 我需要将该数据存储在string 旧 API 的 注释 字段 有没有标准技术packing将此二进制数据转换为string 我所说的 打包 是指对于任何相当大且随机的数据集 字
  • 替代位置基础系统(十六进制、八进制、二进制)如何工作?如何将它们转换为十进制?

    我以前在编程课上没有学过这一点 但现在我需要知道它 有哪些学习这些数字以及如何转换它们的好资源 我几乎会像记住乘法表一样记住这些 在我们日常的十进制系统中 基数或radix http en wikipedia org wiki Radix
  • 如何从 wfstream 读取二进制数据?

    我从文件读取数据时遇到一个小问题 我希望能够读取 wstring 以及任意大小的原始数据块 大小以字节为单位 std wfstream stream file c str std wstring comType stream gt gt c
  • 对 C# 解决方案进行逆向工程

    我知道 Visual Studio 2010 Ultimate 有一些功能 我通常会凭本能这样做 但我的日程安排非常紧张 我还安装了 Visio 2010 并将其集成到 VS 中 但它的逆向工程功能似乎没有多大作用 并且必须在每个项目的基础
  • 互联网 RFC 数据包图中预期的位(不是字节)顺序是哪个

    我正在我的家庭有线网络上解析 ICMPv6 数据报 但在特定 RFC 中找不到对位排序约定的明确提及 多字节字段是网络顺序的 但是字节内的位又如何呢 机器是按字节寻址的 但网络硬件对位进行序列化 在图表中 8 位字段 左侧 的一位最终位于无
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • Crystal lang如何从http获取二进制文件

    In Ruby require open uri download open http example com download pdf IO copy stream download my file pdf 如何在水晶中做同样的事情 我们
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档

随机推荐