帮助对二进制文件格式进行逆向工程的工具
Posted
技术标签:
【中文标题】帮助对二进制文件格式进行逆向工程的工具【英文标题】:Tools to help reverse engineer binary file formats 【发布时间】:2010-10-04 07:30:38 【问题描述】:有哪些工具可以帮助解码未知的二进制数据格式?
我知道 Hex Workshop 和 010 Editor 都支持结构。对于已知的固定格式,这些在有限的范围内是可以的,但对于更复杂的东西很难使用,尤其是对于未知格式。我想我正在寻找脚本语言的模块或可编写脚本的 GUI 工具。
例如,我希望能够从有限的已知信息(也许是一个幻数)中找到一个数据块中的结构。一旦我找到了一个结构,然后按照已知的长度和偏移量词来找到其他结构。然后在有意义的地方递归和迭代地重复此操作。
在我的梦想中,甚至可能会根据我已经告诉系统的内容自动识别可能的偏移和长度!
【问题讨论】:
不能直接回答您的问题:您是否没有可处理这些未知格式的二进制文件的可执行文件?使用诸如 OllyDbg 之类的 ring3 调试器进行逆向工程,这比尝试暴力破解文件格式要容易得多。 哦,是的,我应该添加到“您曾经想编写哪个程序但一直没有时间去做”问题的应用程序之一;) 在某些情况下,我确实有在一定程度上处理它们的可执行文件。有时这些文件是可执行代码(但不是标准格式)并且很可能包含它们自己的解码例程。我们可能将有限的部分文档碎片作为起点。在其他情况下,我什么都没有。 【参考方案1】:下面是一些我想到的提示:
根据我的经验,交互式脚本语言(我使用 Python)可以提供很大帮助。你可以编写一个简单的框架来处理二进制流和一些简单的算法。然后你可以编写脚本来获取你的二进制文件并检查各种事情。例如:
对各个部分做一些统计分析。例如,随机数据会告诉您这部分可能已被压缩/加密。零可能意味着部件之间的填充。零散的零可能意味着整数值或 Unicode 字符串等等。尝试发现各种偏移。尝试将部分二进制文件转换为 2 或 4 字节整数或浮点数,打印它们并查看它们是否有意义。编写一些函数来搜索数据中重复或非常相似的部分,这样您就可以轻松找到标题。
尝试找到尽可能多的字符串,尝试不同的编码(c 字符串、pascal 字符串、utf8/16 等)。有一些很好的工具(我认为 Hex Workshop 有这样的工具)。字符串可以告诉你很多。
祝你好运!
【讨论】:
Hachoir 来自下面的答案正是这种框架。它带有一组预定义的字段:不同类型的字符串、日期、位、浮点数、填充等。内置解析器可以与文档一起用作示例。【参考方案2】:对于 Mac OS X,有一个比我的 iBored 更好的工具:Synalyze It! (http://www.synalysis.net/)
与iBored 相比,它更适合非阻塞文件,同时还可以完全控制结构,包括可编写脚本(使用 Lua)。它还可以更好地可视化结构。
【讨论】:
【参考方案3】:图普尼;据我所知,微软研究院没有直接提供,但是有一篇关于这个工具的论文可能会引起想要编写类似程序(可能是开源)的人的兴趣:
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 的格式规范。此外,我们证明了 通过使用它为 zeroday 提供的丰富信息来使用 Tupni 漏洞签名生成,这是不可能的 以前的逆向工程工具。
【讨论】:
论文链接:research.microsoft.com/en-us/um/people/wdcui/papers/…【参考方案4】:我最近发布的我自己的工具“iBored”可以完成部分工作。我编写了可视化和调试文件系统格式(UDF、HFS、ISO9660、FAT 等)的工具,并实现了搜索、复制以及后来的结构和模板支持。结构支持非常简单,模板是一种动态识别结构的方法。
整个事情都可以用 Visual BASIC 方言进行编程,允许您测试值、读取特定块等等。
该工具是免费的,适用于所有平台(Win、Mac、Linux),但由于它是我刚刚向公众发布以共享它的个人工具,因此没有太多文档记录。
但是,如果您想尝试一下,并希望提供反馈,我可能会添加更多有用的功能。
我什至会开源它,但正如REALbasic 所写,我怀疑很多人会加入这样的项目。
链接:iBored home page
【讨论】:
听上去是一个非常适合加入的好项目……当我作为防病毒研究人员工作时,这会非常方便。相反,我都是手工完成的……我要下载它,然后检查一下。谢谢你,我有它的用处。 :) 看起来像是一个不错的二进制文件分析工具的开始,但仍然非常以磁盘为中心(512 字节块有点放弃......) @SteveBennett:它喜欢将文件聚集成大小相等的块,这是真的,但可以通过菜单轻松更改块大小。而且 iBored 还可以将整个文件作为一个块来处理。唯一的缺点是它在处理大文件时会遇到问题,因为它会尝试在单个可滚动块视图中显示所有数据,然后作为一个块显示,这可能会导致性能问题。【参考方案5】:我仍然偶尔使用一个旧的十六进制编辑器,称为 A.X.E.,高级十六进制编辑器。它现在似乎已经从互联网上基本消失了,尽管谷歌应该仍然可以为你找到它。我知道的最后一个版本是 3.4 版,但我实际上只使用了免费供个人使用的 2.1 版。
它最有趣的功能,也是我最常用于破译各种游戏和图形格式的功能,是它的图形视图模式。这基本上只是向您展示了每个字节都变成了颜色编码像素的文件。听起来很简单,但它有时让我的逆向工程尝试变得容易得多。
不过,我认为通过肉眼进行分析与进行自动分析完全相反,而且图形模式在查找和跟踪偏移方面没有多大用处...
后来的版本有一些听起来可以满足你需求的功能(脚本、规律查找器、语法生成器),但我不知道它们有多好。
【讨论】:
网址已死,也许现在在这里:advanced-hex-editor-a-x-e.en.softonic.com @Steve 感谢您的提醒。就是那个。尽管那里有所有无病毒的承诺,但我的病毒扫描程序给了我一个病毒警告,试图下载它,所以我没有打扰。我已经改写了我的答案。【参考方案6】:Hachoir 是一个 Python 库,用于将任何二进制格式解析为字段,然后浏览字段。它有很多常见格式的解析器,但您也可以为您的文件编写自己的解析器(例如,当使用读取或写入二进制文件的代码时,我通常首先编写一个 Hachoir 解析器以帮助调试)。不过,看起来该项目现在几乎处于非活动状态。
【讨论】:
(链接已损坏)【参考方案7】:我的项目icebuddha.com支持这个使用python来描述浏览器中的格式。
【讨论】:
【参考方案8】:Kaitai 是一种用于描述数据流中二进制结构的开源语言。它带有一个翻译器,可以输出许多编程语言的解析代码,以包含在您自己的程序代码中。
【讨论】:
【参考方案9】:我对类似问题的回答的剪切粘贴:
一个工具是WinOLS,它设计用于解释和编辑车辆发动机管理计算机二进制图像(主要是查找表中的数字数据)。它支持各种 endian 格式(虽然我认为不是 PDP),并以各种宽度和偏移量查看数据,定义数组区域(地图)并使用各种缩放和偏移选项以 2D 或 3D 可视化它们。它还具有启发式/统计自动地图查找器,可能对您有用。
这是一个商业工具,但免费的演示可以让您做所有事情,除了保存对二进制文件的更改并使用您不需要的引擎管理功能。
【讨论】:
以上是关于帮助对二进制文件格式进行逆向工程的工具的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ELF 文件格式 ( 安装 010 Editor 二进制查看工具的 ELF.bt 插件模板 | 安装 ELF.bt 模板 | 打开 ELF 文件 )
Android 逆向ELF 文件格式 ( 安装 010 Editor 二进制查看工具的 ELF.bt 插件模板 | 安装 ELF.bt 模板 | 打开 ELF 文件 )