33

我有一个二进制文件。我不知道它是如何格式化的,我只知道它来自一个delphi代码。

是否存在任何分析二进制文件的方法?

是否存在任何“模式”来分析和反序列化未知格式文件的二进制内容?

4

13 回答 13

28

试试这些:

  1. 反序列化数据:分析它是如何编译你的 exe 的(试试File Analyzer)。尝试使用发现的语言反序列化二进制数据。然后将其序列化为每种编程语言都可以理解的 xml 格式(与语言无关)
  2. 分析二进制数据:尽量保存不同版本的文件,并使用 diff 程序用十六进制编辑器分析每个位的含义。将它与二进制黑客技术结合使用(如Frans Faase 的 How to crack a Binary File Format
  3. 对应用程序进行逆向工程:尝试使用用于构建应用程序的编程语言的逆向工程工具获取代码(通过文件分析器找到)。否则使用IDA Pro Disassembler 之类的反汇编分析工具
于 2009-06-22T14:11:11.750 回答
15

对于我的爱好项目,我不得不对一些旧游戏文件进行逆向工程。我的方法是:

  • 有一个好的十六进制编辑器。
  • 在二进制文件中查找可读的单词。请注意它们的分布情况。如果它们之间的距离是恒定的,你就知道它是一个列表。
  • 寻找 2-3 个后置零。可能表示一个 int32 值。
  • 一些双字可能是指向文件的指针。
  • 尝试识别文件中重复出现的模式。
  • 看到大量 C0-CF 可能表示 RLE 压缩数据。
于 2009-06-22T09:07:54.733 回答
9

我开发了Hexinator(Window & Linux)和Synalyze It!(macOS) 正是为此目的。这些应用程序允许您像在其他十六进制编辑器中一样查看二进制文件,但另外您可以创建具有二进制文件格式细节的“语法”。语法包含所有构建块,用于自动解析文件。

因此,您可以保留在分析中获得的知识并将其同时应用于多个文件。您还可以对文件格式的点点滴滴进行颜色编码,以便在十六进制编辑器中快速概览。 Synalyze It 的屏幕截图! 临 解析结果显示在树视图中,您还可以在其中轻松修改文件(应用字节顺序等)。

于 2016-11-27T15:58:42.927 回答
7

当您对二进制文件所代表的内容有所了解时,对二进制文件进行逆向工程是一个非常耗时的过程。如果您不知道它是什么,那将更加困难。

虽然这是可能的,但你必须有一个很好的理由这样做。

第一步是在您选择的十六进制编辑器中打开它,看看您是否可以找到任何英文文本来指向您甚至应该表示文件的方向。从那里,谷歌“逆向工程二进制文件”,有比我更多的知识渊博的人写过关于它的指南。

于 2009-06-22T08:31:02.547 回答
5

来自 GNU binutils 的“字符串”程序非常有用。它将打印文件中的可打印字符的字符串,通常会提供文件包含什么或程序做什么的线索。

于 2009-06-22T08:41:21.683 回答
5

如果数据代表序列化的 Delphi 对象,您应该开始阅读有关 Delphi 序列化过程的信息。如果是这种情况,我认为最好的办法是使用 Delphi 加载它并从 IDE 继续分析。关于 Delphi 序列化的一些信息可以在这里找到。

编辑:如果文件确实包含序列化的 delphi 对象,那么您应该编写一个小的 delphi 程序来加载它,然后自己将数据“转换”为中性的东西,比如 xml。如果您设法做到这一点,您应该检查并查看 delphi 是否支持序列化为 xml。然后,您可以从任何语言访问这些对象。

于 2009-06-22T08:49:38.187 回答
3

如果您有权访问创建文件的应用程序,则可以对应用程序应用更改,然后保存文件并查看效果(请记住,数字可能存储在little endian中):

  • 首先重复创建文件。如果文件不是二进制相等的,则当前日期/时间可能存储在发生差异的区域中。
  • 也许您想在不同环境下运行的软件重复此操作,以查看是否存储了操作系统版本等,但这很不寻常。
  • 接下来,您可以尝试更改单个变量并创建几个仅在此变量值上有所不同的文件。这有助于您确定此变量的存储位置。
  • 这样,您还可以排除未存储在文件中的变量:如果您更改它们,但创建的文件相同,则不会存储它们。

为了测试您使用上述步骤得出的假设,请编辑其中一个文件并让应用程序读取它。

如果您无法访问应用程序本身,我建议您忘记它并找到另一种方法来解决您的问题。有很大概率会更快...

于 2009-06-22T08:59:11.663 回答
3

If file does not give a meaningful answer, you may want to try TRiD by Marco Pontello to determine whether your data is stored in a known format.

于 2009-06-22T14:30:38.450 回答
3

unix“文件”命令真的很有用——我不知道windows中是否有类似的东西。你像这样运行它:

file myfile.ext

它根据其中包含的幻数和数据吐出文本描述。

可能它包含在cygwin中。

于 2009-06-22T08:29:32.237 回答
2

Get the Delphi application and open it in IDA Pro freeware version, and find where it writes the file, and decode how it writes the file that way.

Unless it's plan text.

于 2009-06-23T04:31:07.803 回答
2

你知道使用它的程序吗?如果是这样,您可以将程序写入文件函数挂钩,并了解其写入的数据、数据的大小和位置。

更多信息: http: //www.codeproject.com/KB/DLL/Win32APIHooking_Trouble.aspx

于 2009-06-22T08:29:16.230 回答
2

与仅显示文件的原始十六进制字节的传统十六进制编辑器不同,010 编辑器还可以使用二进制模板将文件解析为层次结构。运行二进制模板的结果比仅使用原始十六进制字节更容易理解和编辑。

http://www.sweetscape.com/010editor/

于 2014-10-06T20:12:12.897 回答
0

尝试在十六进制编辑器中打开它并进行分析。

于 2009-06-22T08:30:47.243 回答