苹果是否修改了提交给App Store的应用程序上的iOS应用程序可执行文件?

与在原始应用程序包中提交给Apple的原始可执行文件相比,通过App Store购买应用程序并安装在用户的iPhone上时,应用程序的可执行文件是否与每个字节相同? 或者是不同的(例如,有额外的签名或encryption)?

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

特别是,将代码,如…

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中的terminal运行openssl sha256 MyAppExecutableFile来计算SHA256哈希完全相同的结果。这意味着该动作通过XCode安装应用程序不会改变可执行文件。

我的问题是,当一个应用程序被提交到App Store,购买和安装,这是否仍然成立。

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

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

 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) 

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

因为这个哈希将不匹配。