苹果是否会修改提交到应用商店的iOS应用程序可执行文件?

9

当应用程序通过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中的“构建和运行”在连接的iPhone上运行,产生的结果与在OS X终端中运行openssl sha256 MyAppExecutableFile计算SHA256哈希完全相同。这意味着通过XCode安装应用程序的行为不会改变可执行文件。

我的问题是,当一个应用程序被提交到App Store,购买,并安装时,是否仍然保持这种情况?

2个回答

19

当应用程序在应用商店上发布时,由苹果进行加密,因此在自己的二进制文件上运行校验和不是一个好主意——您无法预先知道加密二进制文件的文件大小。

请注意,二进制文件始终保持在文件系统中加密,并且只有 iPhone 根用户可以解密这些二进制文件。如果您使用 iTunes 从应用商店下载应用程序,则可以在 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)

你检查了.ipa文件还是应用程序本身?我相信当下载.ipa文件时,苹果会添加一些文件,但他们无法更改应用程序本身,因为那样会使编译时执行的代码签名失效,从而防止应用程序运行。 - ughoavgfhw
1
我检查了IPA/app包中的二进制文件。苹果确实可以在不破坏应用程序的情况下更改应用程序,因为签名放在应用程序包内的单独文件中。他们可能只是在提交时检查签名的有效性,然后丢弃它,稍微修改二进制文件以进行某些更改,然后使用自己的主证书对其进行签名。 - Julio Gorgé
1
我听说IPA包中的应用程序是以加密方式存储的,但当它被“安装”到设备上时,它可能会被解密。(显然这就是一些“破解”软件的工作原理——它安装应用程序,然后将解密后的可执行文件复制到设备上。)所以也许它会恢复到原始状态?我想知道是否有任何方法来测试这种情况。我想你可以通过ssh进入越狱的iPhone,并将应用程序可执行文件复制出来,然后查看它与哪个版本相同? - JohnSpeeks
很有趣,John。如果有人用越狱的手机测试这个问题,那就更有趣了。 - Julio Gorgé
1
看起来应用程序二进制文件确实是加密的。我查阅了几个来源并进行了验证...所以我更新了答案。再次感谢约翰的提示。 - Julio Gorgé
显示剩余2条评论

2
该应用程序会被苹果剥去您的签名,并进行重新签名。您可以通过在提交的应用程序二进制文件上运行“codesign -vvvvd”,并将其与从商店下载的应用程序二进制文件的“codesign -vvvvd”输出进行比较来验证此操作。因此,哈希值将不匹配。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接