iOS IPA 重新打包/重新签名 App Store 应用程序

Posted

技术标签:

【中文标题】iOS IPA 重新打包/重新签名 App Store 应用程序【英文标题】:iOS IPA Re-packagin/Re-signing of an AppStore app 【发布时间】:2014-09-09 13:41:01 【问题描述】:

问题描述

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

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

首先,我正在尝试重新打包 3rd 方应用程序而不注入任何代码,这是通过以下方式完成的:

 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

检查应用程序的“Mach-O”可执行文件,我已验证相关架构的“代码签名”部分已完全更改(通过“signcode”工具)。

问题

为什么我无法重新打包从 AppStore 下载的应用,而我手动创建的使用 Xcode 的应用已成功重新打包/签名? 如何使用我的开发证书和配置文件重新打包/签署 AppStore 应用程序? FairPaly 如何区分我手动生成(使用 Xcode)的应用程序和从应用商店下载的应用程序? appstore 应用有哪些手工制作的应用没有的残差?

参考文献

https://***.com/questions/25737711/ios-undocumented-api-using-uiautomation-framework-on-ios7 http://macsecurity.net/view/55/ https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/codesign.1.html

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于iOS IPA 重新打包/重新签名 App Store 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

iOS中四种打包ipa的方法介绍

【iOS开发】打包成ipa的方法

【iOS开发】打包成ipa的方法

使用Xcode打包成ipa

iOS 企业级 IPA 重签名

iOS-打包成ipa的4种方法