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

有关该主题的文献:


Tupni:输入格式的自动逆向工程
ReFormat:加密消息的自动逆向工程
从执行中得出输入语法结构
>
这有没有付诸实践?

#1 楼

您没有说明目的。如果您想完全理解格式,而不仅仅是自动化分析的某些初始方面,那么很难提供足够通用的工具。这就是针对特定领域的语言和可扩展工具(010编辑器,脚本语言)的用途。目前我还不知道有任何工具可以“全部完成”。 / encryption),并为您提供二进制模板,以使您对文件格式的了解越来越多。最令人讨厌的方面是脚本的有限程度,并且您不能编写插件(例如,可以解压缩bzip2或压缩流等,通常可以找到,但010 Editor完全不支持)。我和010 Editor的主要烦恼之一是,我遇到了二进制模板的某些语法限制,以表达重要内容,并且不得不以怪异的方式解决该问题(参数化struct是一个主要难题),尽管这恰恰是它尝试使用自己的DSL解决的问题。我认为我们迫切需要FLOSS解决方案(事实上,我曾经在某种程度上研究Luaizing)。

文件格式可能处于加密或压缩层之下,在文件的每个部分分开,而不是每个文件分开。可能有几层。尽管我不想说出这样的事情是绝对不可能的,但是例如IDA就是交互式的。在大多数RCE任务中,即使是最好的启发式方法也无法替代经验丰富的逆向工程师的技能和经验。根据经验,我会将其应用于文件格式的反向工程。

我也颠倒了一些文件格式,通常同时使用以下两种组合:一方面以脚本语言编写解析器,另一方面为010 Editor编写二进制模板。后者提供了一个很好的后备,因为即使解析失败,我也可以去那里,研究正在发生的事情,进行调整并重新运行。起泡,冲洗,重复...您就明白了。

迄今为止最大的挑战是找出更多难以理解的方面,例如以24位编码的整数,有时是LSB,有时是MSB在先,日期,基于xor的树从其他位置获取了两个索引,一个字节使用了一些位,另一个字节使用了一些具有特殊含义的东西。而且我真的无法想象如果不对工程进行原始的读/写代码进行反向工程,您将如何填补这些空白。缺少任何文档/标准,它是您获得的最佳参考。

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

评论


我应该澄清:我并不是在寻找可以使一切自动化的东西-正如您所说,最好使用IDA之类的工具。但是,在完全手动和完全自动化之间还有很大的改进空间。即使是仅使用解析每个字节范围的代码为文件添加注释的工具,也将具有极大的价值。

–布伦丹·多兰·加维特(Brendan Dolan-Gavitt)
2013年3月27日19:09



@ BrendanDolan-Gavitt:我完全同意。 las,我什么都不知道。这将取决于体系结构,并且还取决于平台是否有意义。但是,我可以想象存在类似这样的东西来解析strace的输出。

– 0xC0000022L♦
13年3月27日在19:16

还想补充一点,我绝对不反对可视化。我在这里和这里已经为此做了一些工作。这些都是PDB文件格式的一部分,从视觉上查看访问模式以了解结构边界的位置非常有帮助。

–布伦丹·多兰·加维特(Brendan Dolan-Gavitt)
13年3月27日在19:43

#2 楼

该学院距离行业很遥远,而行业总是遥遥领先很多年。我认为反向工程文件格式没有任何“魔术”。确实,我颠倒了各种文件格式,并且第一次这样做时,我试图寻找是否有这样的工具。但是,那时什么也没有,我认为今天什么都没有。

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

评论


如果没有工具,那真是太遗憾了—我可以想到很多自动化将非常有用,尤其是当我们进行一些数据流分析时!也许另一件事要添加到我的待办事项列表中...

–布伦丹·多兰·加维特(Brendan Dolan-Gavitt)
13年3月27日在17:57

#3 楼

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

有更多尝试分析未知网络协议,我想一些想法和技术可用于分析未知文件格式。
其中一些论文是:


从未知网络协议中自动提取字段
从网络跟踪中自动进行协议逆向工程
通用应用程序级协议分析器及其语言

还有Netzob工具:


Netzob是一个开源工具,用于逆向工程,通信量生成和通信协议的模糊化。它允许通过被动和主动过程来推断消息格式和协议的状态机。此后,该模型可用于模拟现实且可控制的交通。