iOS IPA Re-packagin /重新签名App Store应用程序

时间:2014-09-09 13:41:01

标签: ios xcode cocoa-touch fairplay

问题描述

我需要控制iOS设备上的任意应用程序,我的计划是向IPA注入可执行文件(实现远程控制逻辑),然后重新打包它。

由于应用程序应该在受控环境(特定设备)中运行,因此我计划将我的配置文件与我的开发证书一起用于重新打包/签名。

首先,我试图重新打包第三方应用程序,无需注入任何代码,这是通过以下方式完成的:

 1. Unzip the existing IPA
 2. Copy the provisioning profile to %APP_NAME%.app/embedded.mobileprovisioning
 3. export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate"
 4. signcode --force --deep -s "%Dev Cert Name%" "%Path/To/APP_NAME%.app"
 5. zip the re-signed code back together

以上对于我使用Xcode手动构建的应用程序非常有用,但是,当使用从AppStore下载的IPA时,这不能解决以下设备日志错误:

<Debug>: AppleFairplayTextCrypterSession::fairplayOpen() failed, error -42112

检查&#39; Mach-O&#39;可执行的应用程序,我已经验证了&#34; Code Signature&#34;相关架构的一部分已完全更改(通过&#39; signcode&#39;工具)

问题

  • 当我手动创建w / Xcode的应用程序成功重新打包/签名时,为什么我无法重新打包我从AppStore下载的应用程序?
  • 如何使用我的开发证书&amp ;;重新打包/签署AppStore应用程序供应资料?
  • FairPaly如何区分我手动制作的应用程序(使用Xcode)和从appstore下载的应用程序? appstore应用程序有哪些残差是手动制作的应用程序没有?

参考

1 个答案:

答案 0 :(得分:5)

来自AppStore的应用程序不仅仅是binary is also encrypted签名。

  

App Store二进制文件由开发人员和Apple签署。这会加密二进制文件,以便需要解密密钥才能使二进制文件可读。当iOS执行二进制文件时,解密密钥用于将二进制文件解密为可读状态,然后将其加载到内存中并执行。 iOS可以通过LC_ENCRYPTION_INFO MachO加载命令的cryptid struture成员告知二进制文件的加密状态。如果cryptid是非零值,那么二进制加密。