Binary 如何分析二进制文件?

Binary 如何分析二进制文件?,binary,reverse-engineering,serialization,code-analysis,Binary,Reverse Engineering,Serialization,Code Analysis,我有一个二进制文件。我不知道它是如何格式化的,我只知道它来自一个delphi代码 是否存在分析二进制文件的方法 是否存在任何“模式”来分析和反序列化未知格式文件的二进制内容?您知道使用它的程序吗?如果是这样的话,您可以钩住程序写入文件函数,了解它写入的数据是什么,数据的大小以及在哪里 更多信息:unix“file”命令非常有用-我不知道windows中是否有类似的命令。您可以这样运行它: file myfile.ext 它会根据其中包含的神奇数字和数据给出一个文本描述 它可能包含在中。尝试在十

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

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


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

您知道使用它的程序吗?如果是这样的话,您可以钩住程序写入文件函数,了解它写入的数据是什么,数据的大小以及在哪里

更多信息:

unix“file”命令非常有用-我不知道windows中是否有类似的命令。您可以这样运行它:

file myfile.ext
它会根据其中包含的神奇数字和数据给出一个文本描述


它可能包含在中。

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

当您对二进制文件表示的内容有所了解时,反向工程是一个非常耗时的过程。如果你不知道那是什么,那就更难了

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


第一步是在你选择的十六进制编辑器中打开它,看看你是否能找到任何英文文本来为你指明文件应该代表的方向。从那里,谷歌“反向工程二进制文件”,有比我更有知识的人编写了关于它的指南。

GNU binutils的“字符串”程序非常有用。它将打印文件中可打印字符的字符串,通常提供文件或程序所包含内容的线索。

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


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

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

  • 首先重复创建文件。如果文件不是二进制相等的,则当前日期/时间可能存储在出现差异的区域
  • 也许您想在不同环境下运行软件时重复这一点,以查看是否存储了OS版本等,但这是相当不寻常的
  • 接下来,您可以尝试更改单个变量,并创建几个仅在此变量值不同的文件。这有助于识别此变量的存储位置
  • 这样,您还可以排除文件中未存储的变量:如果您更改了这些变量,但创建的文件相同,则不会存储这些变量
为了测试您通过上述步骤得出的假设,请编辑其中一个文件并让应用程序读取它


如果您无法访问应用程序本身,我建议您忘掉它,找到另一种解决问题的方法。很有可能它会更快…

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

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

  • 反序列化数据:分析如何编译exe(尝试)。尝试使用发现的语言反序列化二进制数据。然后将其序列化为每种编程语言都能理解的xml格式(独立于语言)
  • 分析二进制数据:尝试以较小的变化保存文件的各种版本,并使用diff程序使用十六进制编辑器分析每一位的含义。将其与二进制黑客技术结合使用(例如)
  • 对应用程序进行反向工程:尝试使用反向工程工具获取用于构建应用程序的编程语言的代码(可通过找到)。否则使用反汇编分析工具,如

  • 如果
    文件
    没有给出有意义的答案,您可能希望Marco Pontello尝试确定您的数据是否以已知格式存储。

    获取Delphi应用程序并打开它,找到它写入文件的位置,并解码它以这种方式写入文件的方式


    除非是计划文本。

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

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

    因此,您可以保留在分析中获得的知识,并将其同时应用于多个文件。您还可以对文件格式的位和段进行颜色编码,以便在十六进制编辑器中快速浏览。 解析结果显示在树视图中,您也可以在树视图中轻松修改文件(应用endianness et)