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