我有一个二进制文件。我不知道它是如何格式化的,我只知道它来自一个delphi代码。
是否存在任何分析二进制文件的方法?
是否存在任何“模式”来分析和反序列化未知格式文件的二进制内容?
我有一个二进制文件。我不知道它是如何格式化的,我只知道它来自一个delphi代码。
是否存在任何分析二进制文件的方法?
是否存在任何“模式”来分析和反序列化未知格式文件的二进制内容?
试试这些:
对于我的爱好项目,我不得不对一些旧游戏文件进行逆向工程。我的方法是:
我开发了Hexinator(Window & Linux)和Synalyze It!(macOS) 正是为此目的。这些应用程序允许您像在其他十六进制编辑器中一样查看二进制文件,但另外您可以创建具有二进制文件格式细节的“语法”。语法包含所有构建块,用于自动解析文件。
因此,您可以保留在分析中获得的知识并将其同时应用于多个文件。您还可以对文件格式的点点滴滴进行颜色编码,以便在十六进制编辑器中快速概览。
解析结果显示在树视图中,您还可以在其中轻松修改文件(应用字节顺序等)。
当您对二进制文件所代表的内容有所了解时,对二进制文件进行逆向工程是一个非常耗时的过程。如果您不知道它是什么,那将更加困难。
虽然这是可能的,但你必须有一个很好的理由这样做。
第一步是在您选择的十六进制编辑器中打开它,看看您是否可以找到任何英文文本来指向您甚至应该表示文件的方向。从那里,谷歌“逆向工程二进制文件”,有比我更多的知识渊博的人写过关于它的指南。
来自 GNU binutils 的“字符串”程序非常有用。它将打印文件中的可打印字符的字符串,通常会提供文件包含什么或程序做什么的线索。
如果数据代表序列化的 Delphi 对象,您应该开始阅读有关 Delphi 序列化过程的信息。如果是这种情况,我认为最好的办法是使用 Delphi 加载它并从 IDE 继续分析。关于 Delphi 序列化的一些信息可以在这里找到。
编辑:如果文件确实包含序列化的 delphi 对象,那么您应该编写一个小的 delphi 程序来加载它,然后自己将数据“转换”为中性的东西,比如 xml。如果您设法做到这一点,您应该检查并查看 delphi 是否支持序列化为 xml。然后,您可以从任何语言访问这些对象。
如果您有权访问创建文件的应用程序,则可以对应用程序应用更改,然后保存文件并查看效果(请记住,数字可能存储在little endian中):
为了测试您使用上述步骤得出的假设,请编辑其中一个文件并让应用程序读取它。
如果您无法访问应用程序本身,我建议您忘记它并找到另一种方法来解决您的问题。有很大概率会更快...
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.
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.
你知道使用它的程序吗?如果是这样,您可以将程序写入文件函数挂钩,并了解其写入的数据、数据的大小和位置。
更多信息: http: //www.codeproject.com/KB/DLL/Win32APIHooking_Trouble.aspx
与仅显示文件的原始十六进制字节的传统十六进制编辑器不同,010 编辑器还可以使用二进制模板将文件解析为层次结构。运行二进制模板的结果比仅使用原始十六进制字节更容易理解和编辑。
尝试在十六进制编辑器中打开它并进行分析。