在哪里可以找到有关文件格式的信息?

逆向工程 文件格式
2021-07-01 00:33:08

假设我找到了“一些”文件(可能是可执行文件,可能是数据或其他内容)并想运行或读取它。我在文本编辑器中打开此文件,但格式不可读。示例包括:Java 类、Windows 可执行文件、SQLite 数据库、DLL、...

如果我们可以信任扩展名,我确实知道文件格式。

是否有某个站点或数据库包含有关许多加密或二进制文件格式的大量信息?信息应包括:

  • 文件使用
  • 文件布局和结构
  • 最终可以读取或执行文件的程序

所以我不是在寻找识别文件格式的方法。我已经知道文件格式,但需要有关该格式的信息。何时使用格式(在哪些应用程序中),格式的结构是什么?

4个回答

我是Hachoir 项目的开发人员,该项目旨在将任何文件的格式描述到位级别。目前,它具有许多知名格式的解析器,包括 Java 类、Windows 可执行文件、MP3 文件等。解析器的完整列表可以在此处的子目录中找到

在为 使用新的解析器时hachoir_parser,通常需要查找有关文件格式的信息。没有描述每种格式的单一来源(即使 Hachoir 渴望成为这种来源,它也不够全面)。通常,第一步只是搜索<file format name> file format,例如java class file format,并在官方网站上查找文档(对于 Java 类,这会找到 Oracle 的文档,这应该是您所需要的全部内容)。如果没有官方网站,您仍然可以从过去从事该格式工作的人那里找到一些文档。

对于常见的文件格式,这会在大约 90-95% 的情况下显示您想要的格式规范。较大的软件公司,如甲骨文和微软,为了互操作性,在线发布他们的文件格式规范。例如,您可以通过浏览或搜索 MSDN 找到 PE(Windows EXE/DLL)、MS Office 格式(XLS、PPT、DOC)和其他 Microsoft 格式的文档。

对于多媒体格式,多媒体 Wiki是一个很好的资源。它们还涵盖了一些游戏文件格式。

对于不太常见的文件格式,我没有从谷歌搜索中找到规范(或合适的描述),我的方法通常是找到一个能够理解文件的开源程序,然后找到它们的格式规范源(如果有描述)在提交或自述文件中),或直接阅读其源代码以了解文件格式。

如果该文件没有开源程序,也没有在线公开的文件格式描述,则该文件格式可能相当模糊。对于游戏文件(许多开发人员坚持使用他们自己的专有格式),我发现XeNTaX提供了一些很好的指针和一个很好的社区来帮助确定格式。对于其他类型的格式,您可能必须开始检查您必须比较字节字段并阐明其功能的样本。如果您有接受这些文件的程序,您可以尝试有条不紊地更改字段以确定它们对程序输出的影响。这最终是“真正的”逆向工程工作,我认为它不在本答案的范围内。

file(1)和潜在的libmagic(3)基于文件的内容,命令指纹文件。例如:

$ file test.c
test.c: ASCII text
$ file test.exe
test.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit
$ file test
test: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
$ file database.sqlite
database.sqlite: SQLite 3.x database

然后可以使用此信息在 Internet 上搜索实际标准、RFC、...


另一个资源可能是010 Editor 二进制模板,其中包含许多不同的文件格式,您可以从头开始自定义或开发它们。


我知道有一本德语书叫Dateiformate (德语为:文件格式)


维基百科 - 文件格式列表包含大量有关某些文件格式信息的链接

我喜欢file其他人的标准文件格式/文档/反向文件格式结构的标头魔术和Wotsit 中确定文件类型

对于那些不喜欢 Wotsit 或觉得它过时的人,建议将Fileformat.info作为另一种资源。

让我们解决文件格式问题维基盖晦涩的格式相当不错的号码,是值得一试,如果维基百科没有做的工作适合你。它也是提供维基百科可能认为超出范围的非常详细或晦涩的东西的好地方。

您可以从图书馆和档案数字保存社区获得帮助或建议,该社区多年来一直在处理此类问题。开放式基金的行星是一个良好的开端。特别是,社区(与我一起工作的人)在基于 Github 的Format Corpus上收集了困难或损坏的文件格式的示例对此做出贡献有助于吸引专家的建议,当然这有助于为数字保存工具(用于测试和验证)的开发人员开发有用的资源。但是,文件必须是 CC0!

最后,进一步探索的另一个途径是数字取证社区。国家软件参考库,例如,有一些有用的资源,可以帮助你周围挑战的边缘。