用于文件格式逆向工程的自动化工具?

逆向工程 工具 动态分析 文件格式
2021-06-20 02:28:56

是否有任何工具可以帮助自动化逆向工程文件格式的过程?特别是,我对使用应用程序动态分析来解析格式的工具感兴趣,而对可视化或十六进制编辑器类型的工具(例如 010 Editor)不太感兴趣。

有一些关于这个主题的学术文献:

这些有没有付诸实践?

3个回答

你没有说明目的。如果您想完全理解格式,而不仅仅是自动化分析的某些初始方面,则很难想出一个足够通用的工具。这就是特定领域语言和可扩展工具(010 编辑器、脚本语言)的存在。我目前不知道有任何工具可以“完成所有任务”。

010 Editor 等工具实际上提供了额外的有用信息,例如直方图(提供有关熵、压缩/加密的线索),并为您提供二进制模板,以越来越多地完善您对文件格式的了解。最令人讨厌的方面是脚本的局限性,例如,您不能编写插件(想象一下能够解压缩 bzip2 或压缩流等,这些东西很常见,但 010 Editor 根本不支持)。我和 010 Editor 的主要痛点之一是我遇到了二进制模板的一些语法限制来表达一些重要的东西,并且不得不以奇怪的方式解决这个问题(参数化structs 是一个主要的痛苦),尽管这正是问题所在它试图用自己的DSL 解决. 我认为,我们正处于一个FLOSS解决方案的迫切需要(我实际上寻找到的Lua定义frhed在一些点)。

文件格式可能处于加密或压缩层之下,并且可以按文件的每个部分而不是每个文件分开。可能有几层。虽然我不想说完全不可能想出这样的东西,但 IDA 是交互式的这是有原因的,例如。在大多数 RCE 任务中,即使是最好的启发式方法也无法取代经验丰富的逆向工程师的技能和经验。根据经验,我会将同样的方法应用于文件格式的逆向工程。

我也颠倒了一些文件格式,通常一方面使用脚本语言编写解析器,另一方面为 010 Editor 编写二进制模板。后者提供了一个很好的回退,因为即使解析失败,我也可以去那里调查发生了什么,调整并重新运行。起泡、冲洗、重复……你懂的。

迄今为止最大的挑战是找出更神秘的方面,例如以 24 位编码的整数,有时是 LSB,有时是 MSB 优先,日期,基于xor来自其他地方的两个索引的,从一个字节中使用一些位,从一个字节中使用一些位另一个有特别的意义……那个东西。而且我真的无法想象如果没有对最初读取/写入格式代码进行逆向工程,您将如何填补这些空白缺乏任何文档/标准,这是您获得的最佳参考。

另外,不要低估可视化的力量。当然,单个角度(例如直方图)只能提供很少的信息。但是有很多有趣的算法可以应用于未知数据和查看结构。

学院离工业很远,工业总是领先很多年。我认为逆向工程文件格式没有什么“神奇”的。事实上,我颠倒了各种文件格式,并且在我第一次这样做时,我试图找到是否有这样的工具。但是,当时什么都没有,我认为今天也没有什么。

可以编写一个“自动”检测一些模式并创建一个初始结构来开始工作的工具,而无需从零开始,但我认为不存在其他任何东西。

不是直接回答您的问题,但我想它会有所帮助。

在分析未知网络协议方面有更多尝试,我想一些想法和技术可以应用于分析未知文件格式。部分论文如下:

还有Netzob工具:

Netzob 是一个开源工具,用于对通信协议进行逆向工程、流量生成和模糊测试。它允许通过被动和主动过程推断协议的消息格式和状态机。该模型随后可用于模拟真实且可控的交通。