帮助逆向工程二进制文件格式的工具

时间:2009-01-29 18:13:11

标签: binary reverse-engineering file-format binary-data

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

我知道Hex Workshop和010 Editor都支持结构。对于已知的固定格式,这些在一定程度上是可以的,但是对于任何更复杂的东西都很难使用,特别是对于未知格式。我想我正在寻找一个脚本语言模块或可编写脚本的GUI工具。

例如,我希望能够从有限的已知信息中找到数据块内的结构,这可能是一个神奇的数字。一旦我找到了一个结构,然后按照已知的长度和偏移字来寻找其他结构。然后以有意义的方式递归地迭代地重复这个。

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

8 个答案:

答案 0 :(得分:20)

以下是一些提示:

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

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

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

祝你好运!

答案 1 :(得分:15)

对于Mac OS X,有一个新的优秀工具甚至比我的iBored更好:Synaliyze It! (http://www.synalysis.net/

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

答案 2 :(得分:10)

<强> Tupni ;根据我的知识,不能直接从微软研究院获得,但是有一篇关于这个工具的论文可能对想要编写类似程序(可能是开源)的人感兴趣:

Tupni: Automatic Reverse Engineering of Input Formats@ ACM digital library

  

<强>抽象

     

最近的工作确定了自动倒车的重要性   协议或文件格式规范的工程。然而   以前的工具逆向设计的格式错过了重要的   对安全应用程序至关重要的信息。在这   论文,我们介绍了Tupni,一种可以对输入进行逆向工程的工具   包含丰富信息的格式,包括记录序列,   记录类型和输入约束。 Tupni可以概括格式   多输入规范。我们实施了一个   Tupni的原型并以10种不同的格式对其进行评估:五种   文件格式(WMF,BMP,JPG,PNG和TIF)和五个网络   协议(DNS,RPC,TFTP,HTTP和FTP)。图普尼确定了一切   记录测试输入中的序列。我们还通过汇总表明   在多个WMF文件中,Tupni可以得到更完整的文件   WMF的格式规范。此外,我们证明了   通过使用它为日常提供的丰富信息,Tupni的实用性   漏洞签名生成,这是不可能的   以前的逆向工程工具。

答案 3 :(得分:7)

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

整个事物可以用Visual BASIC方言编程,允许你测试值,读取特定块等等。

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

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

我甚至开源它,但正如REALbasic所写,我怀疑很多人会加入这样的项目。

链接:iBored home page

答案 4 :(得分:6)

我仍然偶尔使用名为A.X.E.,Advanced Hex Editor的旧十六进制编辑器。它现在似乎已经从互联网上消失了,尽管Google仍然可以为你找到它。我所知道的最后一个版本是版本3.4,但我实际上只使用了免费的个人版2.1版。

它最有趣的功能,也是我最常用于解读各种游戏和图形格式的功能,是它的图形视图模式。这基本上只显示文件,每个字节变成一个颜色编码的像素。就像听起来一样简单,它使我的逆向工程尝试有时更容易。

我认为用眼睛做这与进行自动分析完全相反,并且图形模式对于查找和跟踪偏移量没有多大用处......

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

答案 5 :(得分:3)

Hachoir这是一个Python库,用于将任何二进制格式解析为字段,然后浏览字段。它有很多常用格式的解析器,但你也可以为你的文件编写自己的解析器(例如,在处理读取或写入二进制文件的代码时,我通常首先编写一个Hachoir解析器来获得调试帮助)。看起来这个项目现在已经非常不活跃了。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

我对类似问题的答案的一句话:

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

这是一个商业工具,但免费演示可让您完成所有操作,但保存对二进制文件的更改并使用您不需要的引擎管理功能。