83

有哪些工具可以帮助解码未知的二进制数据格式?

我知道 Hex Workshop 和 010 Editor 都支持结构。对于已知的固定格式,这些在有限的范围内是可以的,但对于更复杂的东西很难使用,尤其是对于未知格式。我想我正在寻找脚本语言或可编写脚本的 GUI 工具的模块。

例如,我希望能够从有限的已知信息(也许是一个幻数)中找到一个数据块中的结构。一旦我找到了一个结构,然后按照已知的长度和偏移量词来找到其他结构。然后在有意义的地方递归和迭代地重复这个。

在我的梦想中,甚至可能会根据我已经告诉系统的内容自动识别可能的偏移量和长度!

4

9 回答 9

23

以下是我想到的一些提示:

根据我的经验,交互式脚本语言(我使用 Python)可以提供很大帮助。你可以编写一个简单的框架来处理二进制流和一些简单的算法。然后你可以编写脚本来获取你的二进制文件并检查各种事情。例如:

对各个部分做一些统计分析。例如,随机数据会告诉您这部分可能已被压缩/加密。零可能意味着部件之间的填充。零散的零可能意味着整数值或 Unicode 字符串等等。尝试发现各种偏移。尝试将部分二进制文件转换为 2 或 4 字节整数或浮点数,打印它们并查看它们是否有意义。编写一些函数来搜索数据中重复或非常相似的部分,这样您就可以轻松地发现标题。

尝试找到尽可能多的字符串,尝试不同的编码(c 字符串、pascal 字符串、utf8/16 等)。有一些很好的工具(我认为 Hex Workshop 有这样的工具)。字符串可以告诉你很多。

祝你好运!

于 2009-02-18T21:41:58.663 回答
15

对于 Mac OS X,有一个比我的 iBored 更好的工具:Synalyze It!( http://www.synalysis.net/ )

iBored相比,它更适合非阻塞文件,同时还可以完全控制结构,包括可编写脚本(使用 Lua)。它也可以更好地可视化结构。

于 2011-12-08T16:45:15.943 回答
10

图普尼;据我所知,微软研究院没有直接提供,但是有一篇关于这个工具的论文可能会引起想要编写类似程序(可能是开源)的人的兴趣:

Tupni:输入格式的自动逆向工程( @ACM数字图书馆

抽象的

最近的工作已经确立了协议或文件格式规范的自动逆向工程的重要性。但是,以前的工具逆向工程的格式错过了对安全应用程序至关重要的重要信息。在本文中,我们介绍了 Tupni,这是一种可以对具有丰富信息集的输入格式进行逆向工程的工具,包括记录序列、记录类型和输入约束。Tupni 可以将格式规范推广到多个输入。我们已经实现了 Tupni 的原型,并在 10 种不同的格式上对其进行了评估:五种文件格式(WMF、BMP、JPG、PNG 和 TIF)和五种网络协议(DNS、RPC、TFTP、HTTP 和 FTP)。Tupni 识别了测试输入中的所有记录序列。我们还表明,通过聚合多个 WMF 文件,Tupni 可以为 WMF 导出更完整的格式规范。此外,我们通过使用它为零日漏洞签名生成提供的丰富信息展示了 Tupni 的实用性,这在以前的逆向工程工具中是不可能的。

于 2009-10-23T16:55:21.320 回答
8

我最近发布的我自己的工具“iBored”可以完成其中的一部分。我编写了可视化和调试文件系统格式(UDF、HFS、ISO9660、FAT 等)的工具,并实现了搜索、复制以及后来的结构和模板支持。结构支持非常简单,模板是一种动态识别结构的方法。

整个事情都可以用 Visual BASIC 方言进行编程,允许您测试值、读取特定块等等。

该工具是免费的,适用于所有平台(Win、Mac、Linux),但由于它是我刚刚向公众发布以共享它的个人工具,因此没有太多文档记录。

但是,如果您想尝试一下,并想提供反馈,我可能会添加更多有用的功能。

我什至会开源它,但由于它是用REALbasic编写的,我怀疑很多人会加入这样的项目。

链接:iBored 主页

于 2009-01-29T18:53:17.317 回答
6

我仍然偶尔使用一个旧的十六进制编辑器,称为 AXE,高级十六进制编辑器。它现在似乎已经从互联网上基本消失了,尽管谷歌应该仍然可以为你找到它。我知道的最后一个版本是 3.4 版,但我真的只使用了免费供个人使用的 2.1 版。

它最有趣的功能,也是我最常用于破译各种游戏和图形格式的功能,是它的图形视图模式。这基本上只是向您展示了每个字节都变成了颜色编码像素的文件。听起来很简单,它有时让我的逆向工程尝试变得容易得多。

不过,我想用眼睛做这件事与做自动分析完全相反,而且图形模式对于查找和跟踪偏移量没有多大用处......

较新的版本有一些听起来可以满足您需求的功能(脚本、规律查找器、语法生成器),但我不知道它们有多好。

于 2009-02-24T21:37:36.893 回答
6

Hachoir是一个 Python 库,用于任何二进制格式解析为字段,然后浏览字段。它有很多常见格式的解析器,但您也可以为您的文件编写自己的解析器(例如,当使用读取或写入二进制文件的代码时,我通常首先编写一个 Hachoir 解析器以帮助调试)。不过,看起来该项目现在几乎没有活动。

于 2013-05-23T12:52:29.773 回答
1

我的项目icebuddha.com支持使用 python 来描述浏览器中的格式。

于 2013-01-26T22:03:18.203 回答
1

Kaitai是一种用于描述数据流中二进制结构的开源语言。它带有一个翻译器,可以输出许多编程语言的解析代码,以包含在您自己的程序代码中。

于 2022-02-07T10:02:53.320 回答
0

我对类似问题的回答的剪切粘贴:

一种工具是WinOLS,它设计用于解释和编辑车辆发动机管理计算机二进制图像(主要是查找表中的数字数据)。它支持各种字节序格式(尽管我认为不是 PDP),并以各种宽度和偏移量查看数据,定义数组区域(地图)并使用各种缩放和偏移选项以 2D 或 3D 可视化它们。它还具有启发式/统计自动地图查找器,可能对您有用。

它是一个商业工具,但免费的演示可以让您做所有事情,除了保存对二进制文件的更改并使用您不需要的引擎管理功能。

于 2011-12-07T07:27:10.347 回答