哪些工具可用来帮助解码未知的二进制数据格式?
我知道Hex Workshop和010 Editor都支持结构。对于已知的固定格式,这在一定程度上是可以的,但是很难用于更复杂的事物,尤其是对于未知格式。我想我正在寻找脚本语言或可脚本化GUI工具的模块。
例如,我希望能够从有限的已知信息(也许是幻数)中找到数据块中的结构。找到结构后,请按照已知的长度和偏移量单词查找其他结构。然后在有意义的地方递归和迭代地重复此操作。
在我的梦中,甚至可能根据我已经告诉系统的内容自动识别可能的偏移量和长度!
哪些工具可用来帮助解码未知的二进制数据格式?
我知道Hex Workshop和010 Editor都支持结构。对于已知的固定格式,这在一定程度上是可以的,但是很难用于更复杂的事物,尤其是对于未知格式。我想我正在寻找脚本语言或可脚本化GUI工具的模块。
例如,我希望能够从有限的已知信息(也许是幻数)中找到数据块中的结构。找到结构后,请按照已知的长度和偏移量单词查找其他结构。然后在有意义的地方递归和迭代地重复此操作。
在我的梦中,甚至可能根据我已经告诉系统的内容自动识别可能的偏移量和长度!
Answers:
这里有一些提示:
根据我的经验,交互式脚本语言(我使用Python)可以提供很大的帮助。您可以编写一个简单的框架来处理二进制流和一些简单的算法。然后,您可以编写脚本来获取二进制文件并检查各种内容。例如:
对各个部分进行一些统计分析。例如,随机数据将告诉您该部分可能已压缩/加密。零可能意味着零件之间的填充。分散的零可能表示整数值或Unicode字符串等。尝试找出各种偏移量。尝试将二进制的一部分转换为2或4个字节的整数或浮点数,打印它们并查看它们是否有意义。编写一些函数,这些函数将搜索数据中的重复部分或非常相似的部分,这样您就可以轻松发现标题。
尝试找到尽可能多的字符串,尝试不同的编码(c字符串,pascal字符串,utf8 / 16等)。有一些很好的工具(我认为Hex Workshop有这样的工具)。字符串可以告诉您很多。
祝好运!
对于Mac OS X,有一个新的出色工具甚至比我的iBored还要好:Synaliyze It!(http://www.synalysis.net/)
与iBored相比,它更适合非阻塞文件,同时还可以完全控制结构,包括脚本性(使用Lua)。而且它还可以更好地可视化结构。
图普尼; 据我所知,不是可以直接从Microsoft Research那里获得,但是有一篇关于此工具的文章,对于那些希望编写类似程序(也许是开源的)的人可能很感兴趣:
抽象
最近的工作已经确定了对协议或文件格式规范进行自动反向工程的重要性。但是,由以前的工具反向工程的格式缺少了对于安全应用程序至关重要的重要信息。在本文中,我们介绍了Tupni,它是一种可以对输入格式进行逆向工程的工具,该输入格式具有丰富的信息集,包括记录序列,记录类型和输入约束。Tupni可以在多个输入上归纳格式规范。我们已经实现了Tupni的原型,并以10种不同的格式对其进行了评估:五种文件格式(WMF,BMP,JPG,PNG和TIF)和五种网络协议(DNS,RPC,TFTP,HTTP和FTP)。Tupni识别了测试输入中的所有记录序列。我们还表明,通过汇总多个WMF文件,Tupni可以为WMF导出更完整的格式规范。此外,我们通过使用它提供的零日漏洞签名生成提供的丰富信息来演示Tupni的实用程序,而以前的逆向工程工具是无法实现的。
我最近发布的我自己的工具“ iBored”可以完成部分工作。我编写了该工具以可视化和调试文件系统格式(UDF,HFS,ISO9660,FAT等),并实现了搜索,复制以及后来的结构和模板支持。结构支持非常简单,模板是动态识别结构的一种方式。
整个过程都可以用Visual BASIC方言进行编程,从而使您可以测试值,读取特定的块以及全部。
该工具是免费的,可以在所有平台(Win,Mac,Linux)上运行,但是由于它是我刚刚发布给公众共享的个人工具,因此没有太多文档记录。
但是,如果您想尝试一下并希望提供反馈,我可能会添加更多有用的功能。
我什至会开源,但是正如它是用REALbasic编写的那样,我怀疑很多人会加入这样的项目。
链接:iBored主页
我仍然偶尔使用旧的十六进制编辑器AXE,即高级十六进制编辑器。尽管Google应该仍然可以为您找到它,但它现在似乎已经从Internet上消失了。我知道的最后一个版本是3.4版,但实际上我只使用了供个人使用的2.1版。
它最有趣的功能是它的图形视图模式,而我最常使用的一种功能是解密各种游戏和图形格式。基本上,这只是向您显示文件,每个字节变成一个彩色像素。听起来很简单,但有时使我的逆向工程尝试变得容易得多。
我想用肉眼做与自动分析完全相反,而且图形模式在查找和跟踪偏移量方面不会有太大用处...
更高的版本听起来有些功能可以满足您的需求(脚本,规律性查找器,语法生成器),但我不知道它们的性能如何。
我的项目icebuddha.com使用python支持此功能,以在浏览器中描述格式。