Apple是否会修改提交到App Store的应用程序上的iOS应用程序可执行文件?

时间:2011-04-25 22:51:08

标签: iphone ios

当应用程序通过App Store购买并安装在用户的iPhone上时,与原始应用程序包中提交给Apple的原始可执行文件相比,应用程序的可执行文件是否逐字节相同?或者它是否不同(例如,使用其他签名或加密)?

我只关心可执行文件,而不是整个应用包。

特别是代码如......

int main(int argc, char* argv[]) {
   FILE* file = fopen(argv[0], "rb");
   // Read entire contents of executable file; calculate a hash value
   // ...
   fclose(file);
}

...计算与在原始提交的可执行文件上计算iPhone外部哈希相同的哈希值?

例如,如上所述计算SHA256哈希然后在XCode中使用“Build and Run”在附加的iPhone上运行产生与通过从OS X中的终端运行openssl sha256 MyAppExecutableFile计算SHA256哈希的结果完全相同的结果这意味着通过XCode安装应用程序的行为不会改变可执行文件。

我的问题是,当应用程序提交到App Store,购买并安装时,这是否仍然存在。

2 个答案:

答案 0 :(得分:17)

应用程序可执行文件在App Store上发布时由Apple加密,因此自行运行您自己的二进制文件的校验和不是一个好主意 - 您无法事先知道加密二进制文件的文件大小 - 。

请注意,二进制始终在文件系统中仍然是加密的,只有iPhone root用户才能解密这些二进制文件。如果您使用iTunes从App Store下载应用程序,则可以在PC或Mac上打开IPA,并通过运行otool看到二进制文件确实已加密:

otool -l <app binary> | grep cryptid
crypt id 1
(a value of cryptid 1 means the app is encripted)

otool -l <app binary> | grep cryptsize
12345678
(size of the encrypted segment)

答案 1 :(得分:2)

该应用程序也被剥夺了您的签名并由Apple签名。这可以通过在您提交的应用程序二进制文件上运行“codesign -vvvvd”并将其与您从商店下载的应用程序二进制文件的“codesign -vvvvd”输出进行比较来验证。

因此,哈希值不匹配。