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


81

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

我知道Hex Workshop和010 Editor都支持结构。对于已知的固定格式,这在一定程度上是可以的,但是很难用于更复杂的事物,尤其是对于未知格式。我想我正在寻找脚本语言或可脚本化GUI工具的模块。

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

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


1
这不是您问题的直接答案:您没有可用于这些格式未知的二进制文件的可执行文件吗?使用诸如OllyDbg之类的ring3调试器进行反向工程,比起尝试蛮力地使用文件格式要容易得多。
丹尼尔·史洛夫

哦,是的,我应该添加到“您曾经想编写哪个程序但从未找到时间来解决这个问题”这个问题的应用程序之一;)
devio

在某些情况下,我确实拥有可执行文件,这些文件会在一定程度上处理它们。有时,这些文件是可执行代码(但不是标准格式),并且很可能包含它们自己的解码例程。我们可能只将有限的部分文档碎片作为起点。在其他情况下,我一无所有。

Answers:


22

这里有一些提示:

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

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

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

祝好运!


Hachoir从下面的答案中正是这种框架。它带有一组预定义的字段:不同种类的字符串,日期,位,浮点数,填充等。内置的解析器可以与文档一起用作示例。
roolebo


10

图普尼; 据我所知,不是可以直接从Microsoft Research那里获得,但是有一篇关于此工具的文章,对于那些希望编写类似程序(也许是开源的)的人可能很感兴趣:

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

抽象

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



8

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

整个过程都可以用Visual BASIC方言进行编程,从而使您可以测试值,读取特定的块以及全部。

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

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

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

链接:iBored主页


2
听起来像是加入一个不错的项目的地狱……当我作为一名防病毒研究人员工作时,这真的很方便。相反,我是手工完成的。谢谢您的帮助,我有帮助。:)
LarryF

看起来像是一个不错的二进制文件分析工具的开始,但仍然非常以磁盘为中心(512字节的块有点
Steve Bennett

@SteveBennett:它喜欢将文件聚类为相等大小的块,的确如此,但是可以通过菜单轻松更改块大小。而且iBored还可以将整个文件作为一个块进行处理。唯一的缺点是它将遇到大文件的麻烦,因为它试图将所有数据显示在一个可滚动的块视图中,然后作为一个块显示,这可能会导致性能问题。
Thomas Tempelmann 2011年

6

我仍然偶尔使用旧的十六进制编辑器AXE,即高级十六进制编辑器。尽管Google应该仍然可以为您找到它,但它现在似乎已经从Internet上消失了。我知道的最后一个版本是3.4版,但实际上我只使用了供个人使用的2.1版。

它最有趣的功能是它的图形视图模式,而我最常使用的一种功能是解密各种游戏和图形格式。基本上,这只是向您显示文件,每个字节变成一个彩色像素。听起来很简单,但有时使我的逆向工程尝试变得容易得多。

我想用肉眼做与自动分析完全相反,而且图形模式在查找和跟踪偏移量方面不会有太大用处...

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


URL已死,也许现在在这里:advanced-hex-editor-axe.en.softonic.com
Steve Bennett

@Steve感谢您的单挑。就是那个。尽管那里提供了所有无病毒的承诺,但是我的病毒扫描程序仍向我发出病毒警告,提示您尝试下载它,因此我没有打扰。我改了我的答案。
墨卡托

5

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


(链接已断开)
jacobq


0

删掉我对类似问题的回答:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.