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

问题描述:

是一个应用程序的可执行文件的字节为字节时,应用程序通过App Store购买并安装在用户的iPhone相同,相比于原来的应用程序包提交给苹果公司原来的可执行文件?或者它是不同的(例如,有额外的签名或加密)?Apple是否修改提交给App Store的应用程序上的iOS应用程序可执行文件?

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

特别是,将这样的代码......

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,购买和安装这仍然成立。

可执行的应用程序是由苹果公司时,在App Store上发布了加密,所以自运行你自己的二进制文件的校验和是不是一个好主意 - 你可以不知道高级 - 加密的二进制文件的大小。

请注意,二进制总是在文件系统中保持加密状态,只有iPhone root用户可以解密这些二进制文件。如果你从App Store下载的应用程序与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) 
+0

你检查的.ipa或应用程序本身?我相信Apple在下载时会向.ipa添加一些文件,但它们不能更改应用程序本身,因为这会使编译时执行的代码签名无效,从而阻止应用程序运行。 – ughoavgfhw 2011-04-26 04:20:00

+1

我检查了IPA /应用程序包内的二进制文件。 Apple确实可以在不中断应用程序的情况下更改应用程序,因为签名位于应用程序包内的单独文件中。他们可能会在提交时检查签名的有效性,然后丢弃它,无论出于何种原因稍微修改二进制文件,然后用自己的主证书签名。 – 2011-04-26 04:34:32

+1

我听说IPA软件包中的应用程序已加密存储,但是当它在设备上“安装”时,它可能会被解密。 (显然,这就是一些“破解”软件的工作原理 - 它安装应用程序,然后将解密后的可执行文件复制到设备上。)或许它会恢复到原始状态?我想知道是否有任何方法可以测试这种情况。我想你可以ssh进入一个越狱iPhone并复制应用程序的可执行文件,然后看它与哪个版本是相同的? – JohnSpeeks 2011-04-26 13:30:55

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

因此哈希将不匹配。