我需要控制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;工具)
答案 0 :(得分:5)
来自AppStore的应用程序不仅仅是binary is also encrypted签名。
App Store二进制文件由开发人员和Apple签署。这会加密二进制文件,以便需要解密密钥才能使二进制文件可读。当iOS执行二进制文件时,解密密钥用于将二进制文件解密为可读状态,然后将其加载到内存中并执行。 iOS可以通过LC_ENCRYPTION_INFO MachO加载命令的cryptid struture成员告知二进制文件的加密状态。如果cryptid是非零值,那么二进制加密。