【发布时间】:2010-10-11 09:32:01
【问题描述】:
我正在尝试反序列化在 Delphi 中序列化的旧文件格式,它使用二进制序列化。除了其中的一些非常高级的记录外,我对文件的结构一无所知。
你会采取什么步骤来解决这个问题?有什么工具吗?
【问题讨论】:
标签: delphi reverse-engineering serialization binary-serialization
我正在尝试反序列化在 Delphi 中序列化的旧文件格式,它使用二进制序列化。除了其中的一些非常高级的记录外,我对文件的结构一无所知。
你会采取什么步骤来解决这个问题?有什么工具吗?
【问题讨论】:
标签: delphi reverse-engineering serialization binary-serialization
一个好的十六进制编辑器,并使用灰质来识别结构。
如果你得到一个提示它是什么类型的文件,你可以搜索更专业的工具。
运行 unix/Linux "file" 命令也很好 (*) 请参阅下面 Barry 的评论了解它的工作原理。它可以快速检查使用不同扩展名隐藏的常见文件类型,如 DBF、ZIP 等。
(*) 有适用于 Windows 的 3rd 方构建,但它们可能会滞后于版本。如果您可以在最近的 *nix 发行版上执行此操作,建议您这样做。
【讨论】:
序列化过程只是循环所有已发布的属性并将它们的值流式传输到文本文件。如果您不知道流式传输到文件的确切类,您将很难反序列化文件。 (如果不是不可能的话)
【讨论】:
一个好的十六进制编辑器是第一位的。如果在没有缓冲的情况下读取文件(例如直接从 TFileStream 读取),则在使用 SysInternals 的 ProcMon 时可以获得一些信息;您可以准确查看在哪些块中读取了哪些数据,从而更快地确定您已经识别的结构之间的边界。
【讨论】: