如何对二进制 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 文件进行逆向工程? 的相关文章

  • 如何用php将文件内容转换为字节数组

    我想用PHP将上传的文件保存 插入 到数据库中 数据库字段的类型是varbinary 最后 我想要获得 VarBinary 输出 的内容 就像在 C 中读取文件然后将其存储在字节数组中并将数组插入到 VarBinary 中一样 我与数据库的
  • 是否存在 UTF-8 编码中未使用的字节?

    据我了解 UTF 8 是 ASCII 的超集 因此包括不用于表示可打印字符的控制字符 我的问题是 是否有任何字节 256 个不同的字节 未被 UTF 8 编码使用 我想知道你是否可以转换 编码UTF 8 文本转二进制 这是我的思考过程 我不
  • 在哈希图中存储字符和二进制数

    我正在尝试存储字母到二进制数的映射 这是我的映射 h 001 i 010 k 011 l 100 r 101 s 110 t 111 为此 我创建了一个哈希映射并存储了键值对 我现在想显示给定句子的相应二进制值 这是我的代码 package
  • 如何从 JW Player 5.1 中提取 .flv 流?

    问题是我的互联网连接速度很慢 并且视频不像 YouTube 那样缓冲 因此我想知道是否可以提取 JW Player 中正在流式传输的 flv 文件的 url 并直接下载它 做了一些初步研究 我发现了以下信息 主要视频网址 http ijf1
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • Python 的二进制字符串列表

    我有一个像这样的二进制字符串 1100011101 我想将其解析为一个列表 其中每个 1 或 0 块都是列表中的单独值 例如 1100011101 变成 11 000 111 0 1 您可以通过使用正则表达式而不是从中获得一点 次要 性能g
  • Lisp 中的十进制到二进制 - 制作非嵌套列表

    当达到我的递归情况时 我使用list将未来结果附加到当前结果 但由于递归 我最终得到一个嵌套列表 当我有一个导致递归超过五次的数字时 这会导致错误 任何想法如何我可以在一个简单的非嵌套列表中获得结果 例如 CL 用户 100 8 gt BI
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 使用 .NET 将二进制转换器转换为十进制

    我已经开始掌握一些编程基础知识 但我仍然很新并且缺乏经验 我正在编写的新程序遇到问题 我想要一个程序 将 8 位二进制数放入文本框中 按下按钮 然后显示二进制数的十进制值 下面是我尝试过的代码 Public Class Form1 Priv
  • 什么是 iBeacon 蓝牙配置文件

    我想使用一些低功耗蓝牙开发套件创建自己的 iBeacon Apple 尚未发布 iBeacon 规范 但是 一些硬件开发人员已根据 AirLocate 示例代码对 iBeacon 进行了逆向工程 并开始销售 iBeacon 开发套件 那么
  • Python 中的二进制相移键控

    我目前正在编写一些代码 以使用音频转换通过激光传输消息 文件 和其他数据 我当前的代码使用 python 中 binascii 模块中的 hexlify 函数将数据转换为二进制 然后为 1 发出一个音调 为 0 发出不同的音调 这在理论上是
  • 将这个 if-then 逻辑转换为布尔表达式?

    我在使这段代码更简洁 最好是单个布尔表达式 方面有点绞尽脑汁 这是我的代码 if d Unemployed if type Unemployed tmp Unemployed true else tmp Unemployed false
  • 使用 STL 算法与容器(char * 除外)进行 C++ 二进制文件 I/O

    我正在尝试使用 STL 复制算法对二进制文件 I O 进行简单测试 以将数据复制到容器和二进制文件中 从容器和二进制文件中复制数据 见下文 1 include
  • 查找所有n位相邻数字为1的n位二进制数[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 让我用一个例子来解释一下 如果n 4
  • Python:二进制/十六进制字符串转换?

    我有一个同时包含二进制和字符串字符的字符串 我想先将其转换为二进制 然后转换为十六进制 字符串如下 lt 81 gt Q lt 81 gt Q G Q A S A V lt 83 gt Cd lt 80 gt lt 99 gt N A j
  • 如何将二进制值列表转换为int32类型?

    我在 MATLAB 工作区中有一个小端格式的二进制数列表 我想将它们转换为 int32 a是由 0 和 1 组成的双向量 如下所示 a 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1
  • Biztalk编排逆向工程师

    我的情况是 老开发人员没有留下代码 因此我无法添加任何增强功能或修复错误 我们是否有任何服务 工具可以将编排 映射 反转为原始格式 从 DLL MSI 或运行 BizTalk 应用程序 如果相反的方法不起作用 我希望看到像 Visual s
  • 从 Nodejs 提供二进制/缓冲区/base64 数据

    我在从节点提供二进制数据时遇到问题 我开发了一个名为的节点模块节点说话它执行 TTS 文本到语音 并返回 Base64 编码的音频文件 到目前为止 我这样做是为了转换base64到缓冲区 二进制文件 然后提供它 var src Base64
  • PHP 中二进制的前缀是什么?

    两者都不是0x nor 0 它是什么 有没有 从 PHP 5 4 开始 二进制数的前缀是 0b For ealier version there is no such prefix Instead you can use 0x for he

随机推荐