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

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

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

例如,我希望能够从有限的已知信息(可能是一个幻数)中find一个数据块内的结构。 一旦我find了一个结构,然后按照已知的长度和偏移量来查找其他结构。 然后recursion地迭代地重复这一点。

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

这里有一些提示,想到:

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

对各个部分做一些统计分析。 随机数据,例如,会告诉你,这部分可能是压缩/encryption。 零点可能意味着部分之间的填充。 分散的零可以表示整数值或Unicodestring等等。 尝试找出各种偏移。 尝试将二进制的部分转换为2或4字节的整数或浮动,打印出来,看看他们是否有兴趣。 写一些function,将search重复或非常相似的部分在数据中,这样你可以很容易地find标题。

尽量find尽可能多的string,尝试不同的编码(cstring,pascalstring,utf8 / 16等)。 有一些很好的工具(我认为Hex Workshop有这样一个工具)。 string可以告诉你很多。

祝你好运!

对于Mac OS X,有一个新的伟大的工具,甚至比我的iBored:Synaliyze它! ( http://www.synalysis.net/

与iBored相比,它更适合于非阻塞的文件,同时也可以完全控制结构,包括脚本function(使用Lua)。 而且它也更好地形象化结构。

图普尼 据我所知,并不是直接从微软研究院获得的,但有一篇关于这个工具的文章,对于想要编写类似程序(也许是开源)的人来说可能会感兴趣:

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

抽象

最近的工作已经确定了协议或文件格式规范的自动逆向工程的重要性。 但是,以前的工具反向devise的格式错过了对安全应用至关重要的重要信息。 在本文中,我们介绍了Tupni,一种可以用一套丰富的信息(包括logging序列,loggingtypes和input约束)对input格式进行逆向工程的工具。 Tupni可以通过多个input概括格式规范。 我们已经实现了Tupni的原型,并对其进行了10种不同格式的评估:五种文件格式(WMF,BMP,JPG,PNG和TIF)和五种networking协议(DNS,RPC,TFTP,HTTP和FTP)。 Tupni确定了testinginput中的所有logging序列。 我们还表明,通过聚合多个WMF文件,Tupni可以得到一个更完整的WMF格式规范。 此外,我们通过使用它为zeroday漏洞签名生成提供的丰富信息来certificateTupni的实用性,而这在以前的逆向工程工具中是不可能的。

我自己的工具“iBored”,我刚刚发布,可以做这个的一部分。 我编写了可视化和debugging文件系统格式(UDF,HFS,ISO9660,FAT等)的工具,并实现了search,复制以及后来的结构和模板支持。 结构支持非常简单,模板是一种dynamic识别结构的方法。

整个事情可以用Visual BASIC方言编程,允许你testing值,读取特定的块和所有的东西。

该工具是免费的,适用于所有平台(Win,Mac,Linux),但由于它是我刚刚向公众公开的个人工具,因此没有多less文档logging。

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

我甚至可以开源,但是由于它是用REALbasic编写的,我怀疑很多人会join这个项目。

链接: iBored主页

我仍然偶尔使用旧的hex编辑器AX,高级hex编辑器。 现在似乎已经基本上从互联网上消失了,尽pipeGoogle仍然可以为你find它。 我知道的最后一个版本是3.4版本,但是我真的只使用了免费的个人使用版本2.1。

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

尽pipe如此,我认为这样做与自动分析是完全相反的,而graphics模式不会用于查找和跟踪偏移量。

后来的版本有一些function,听起来像他们可以适合您的需求(脚本,规律性发现者,语法生成器),但我不知道他们有多好。

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

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

我对一个类似的问题做了回答:

一个工具是WinOLS ,它被devise用于解释和编辑车辆引擎pipe理计算机二进制图像(主要是查找表中的数字数据)。 它支持各种endian格式(虽然不是PDP,我认为),并以各种宽度和偏移量查看数据,定义数组区域(地图),并使用各种缩放和偏移选项以二维或三维方式对其进行可视化。 它也有一个启发式/统计自动地图查找器,这可能会为你工作。

这是一个商业工具,但免费的演示会让你做的一切,但保存更改二进制文件,并使用您不需要的引擎pipe理function。