5

問題の説明

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

アプリケーションの「Mach-O」実行可能ファイルを調べたところ、関連するアーキテクチャの「コード署名」セクションが (「signcode」ツールによって) 完全に変更されていることが確認されました。

質問

  • Xcode を使用して手動で作成したアプリが正常に再パッケージ化/署名されているのに、AppStore からダウンロードしたアプリを再パッケージ化できないのはなぜですか?
  • 開発証明書とプロビジョニング プロファイルを使用して AppStore アプリを再パッケージ化/署名するにはどうすればよいですか?
  • FairPaly は、(Xcode を使用して) 手動で作成したアプリと、アプリストアからダウンロードしたアプリをどのように区別しますか? 手動で作成されたアプリにはない、アプリストアアプリにある残差は何ですか?

参考文献

4

1 に答える 1

7

AppStore のアプリは署名されているだけでなく、バ​​イナリも暗号化されています。

App Store のバイナリは、開発者と Apple の両方によって署名されています。これによりバイナリが暗号化されるため、バイナリを読み取り可能にするために復号化キーが必要になります。iOS がバイナリを実行すると、復号化キーを使用してバイナリが読み取り可能な状態に復号化され、メモリに読み込まれて実行されます。iOS は、LC_ENCRYPTION_INFO MachO ロード コマンドの cryptid 構造メンバーを介して、バイナリの暗号化ステータスを通知できます。cryptid がゼロ以外の値の場合、バイナリは暗号化されます。

于 2014-09-09T13:48:20.247 に答える