0

我在我的 iPhone 应用程序中包含一个 plist 文件。它是二进制格式(使用 plutil 将 xml 转换为二进制)。我想在运行时对其运行 MD5 校验和(或 SHA-1)以确认其内容是预期的。不幸的是,我总是得到一个与我最初包含的不同的校验和。在假设我计算 MD5 总和错误一个多小时后,我决定运行测试并确认字节确实是相同的。他们不是。文件大小保持不变,但从第 30 个字节开始,到整个文件(最后 32 个字节除外),文件内容完全不同。有谁知道属性列表文件在包含在 iPhone 应用程序中之前是否已签名或以其他方式“编译”为不同的二进制格式?如果是这样,您能否提供有关该过程的更多详细信息?

提前致谢!

4

2 回答 2

1

默认情况下,Xcode 在构建目标时使用一个小脚本来处理和复制 plist 文件,而不是直接复制。如果您在 Xcode 中为您的目标打开信息窗口并选择“Rules”选项卡,您会看到处理 text.plist 源文件时,它使用了自己的称为 CopyPlistFile 的工具。它会进行一些基本检查以确保 plist 有效,并且可以选择将其转换为不同的格式,尽管默认情况下似乎不执行任何转换。

我不知道这是否是导致您的 plist 文件发生更改的原因,但如果您愿意,您可以在项目中获取有关 plist 文件本身的信息,并将其文件类型从“text.plist”更改为“text”。这应该会导致 Xcode 将其视为纯文本文件而不是属性列表文件,并且只是直接复制而不是通过 CopyPlistFile 工具运行它。

于 2009-07-18T01:32:42.413 回答
0

我会在这个问题上弹出为什么堆栈。我不知道你的问题的答案,但我很好奇你为什么要花时间在这上面。

既然应用程序是数字签名的,你为什么要关心 PList 的完整性?如果有人对其进行了修改,则该应用程序将无法安装,因为数字签名将不再有效。

另一个原因可能是您担心应用程序被黑客入侵。完全合理,但如果有人可以破解应用程序,那么他们也可以修改 PList,并更改代码中的校验和,以便它仍然可以运行。如果不从第三方(例如您自己的服务器)实际获取内容,就无法保证内容的完整性

于 2009-07-17T17:53:10.263 回答