【问题标题】:Does Apple modify iOS application executables on apps submitted to the App Store?Apple 是否会修改提交到 App Store 的应用程序的 iOS 应用程序可执行文件?
【发布时间】:2011-08-12 15:41:10
【问题描述】:

通过 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、购买和安装时,这是否仍然有效。

【问题讨论】:

    标签: iphone ios


    【解决方案1】:

    应用程序可执行文件在 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)
    

    【讨论】:

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

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

    因此,哈希将不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多