今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

iPA再署名 + 香色闺阁、WeChat再署名実戦

背景#

携帯電話を交換した後、元の香色闺阁がダウンロードできなくなり、移行中に失われました。最近、iPhone に 2 つの WeChat をインストールした人のスクリーンショットを見て、自分が再署名したものを思い出しました。開発者アカウントを持っているが、アプリの再署名を試したことがないので、再署名を通じて香色闺阁をインストールし、WeChat のマルチアカウントを実現できるのではないかと思いました。

手順#

やると決めたらすぐに始めます。まずは簡単なところから始めて、香色闺阁の再署名を試し、その後 WeChat を試します。香色闺阁のパッケージ内容は WeChat よりも少ないため、ファイルが見つけやすく、比較的簡単です。手順は以下の通りです:

香色闺阁の再署名#

まず、インターネットで香色闺阁の ipa パッケージを検索してダウンロードします。ない場合は、ここからyuedu.ipaダウンロードできます。

次に、ipa を zip に変更し、解凍します。Payload フォルダーが表示され、その中にStandarReader.appというファイルがあります。StandarReader.appを選択し、右クリックしてパッケージ内容を表示すると、APP パッケージ内のすべての内容が表示されます。以下の画像のようになります:

ipa 解凍

表示包内容

package content

再署名は、自分のアカウントで新しい APP を作成し(bundleID は自分で定義)、携帯電話にインストールし、実行中のパッケージ(xxx/DriveData/xxx/Build/Products/Debug-iphoneos/xxx.app)を見つけるか、パッケージ方式でAdHoc方式を使用して iPA を生成します(プロビジョニングプロファイルとEntitlements.plistを取得するため)。ここで注意が必要なのは、選択したプロビジョニングプロファイルがインストールするデバイスを含んでいることです。その後、署名待ちの iPA のbundleID、証明書、プロビジョニングプロファイルを、自分が作成した APP のものに置き換えます。

通常、変更が必要な内容は以下の通りです:

  • Info.plist の bundleID
  • embedded.mobileprovision 署名ファイル
  • _CodeSignature の内容
  • 通常のアカウントではプラグインに署名できないため、パッケージ内容のパスで Watch と PlugIns フォルダーを直接削除
  • フレームワークの再署名

香色闺阁の ipa については、プラグインやフレームワークがないため、変更が必要なファイルはInfo.plistembedded.mobileprovision_CodeSignatureの内容です。以下に具体的な変更方法を示します:

Info.plist の bundleID を変更#

Payload/StandarReader.app内の Info.plist を Xcode または他のエディタで開き、Bundle identifierを見つけます。香色闺阁の bundleID はcom.appbox.StandarReaderであるため、これを自分が作成した APP の bundleID に置き換えます。以下の画像のようになります:

Ps: Xcode 以外で開く場合は、直接検索して置き換えることができます。

替换 bundleID

embedded.mobileprovisionの置き換え#

自分が作成した APP の iPA から新しいembedded.mobileprovisionを取得します。手順は同様です:zip に変更 -> 解凍 -> パッケージ内容を確認し、embedded.mobileprovisionを見つけてコピーします。これを置き換えるPayloadディレクトリの外側に置くことができます。以下の画像のようになります:

新的 embedded.mobileprovision

次に、この新しいものを元の APP のembedded.mobileprovisionと置き換えます。コマンドラインを使用して、以下のようにします:

  1. 元の APP のプロビジョニングプロファイルを削除
    rm -rf Payload/xxx.app/embedded.mobileprovision
    
  2. 新しいプロビジョニングプロファイルを xxx.app に入れる
    cp embedded.mobileprovision Payload/xxx.app/
    

再署名#

自分が作成した APP のembedded.mobileprovisionからEntitlements.plistを取得します。注意:自分が作成した APP から取得し、香色闺阁のパッケージから取得しないこと。次に、香色闺阁パッケージ内の_CodeSignatureを削除し、生成したEntitlements.plistを使用して香色闺阁パッケージに新しい署名を生成します。具体的な手順は以下の通りです:

  1. Entitlements.plistを生成
    /usr/libexec/PlistBuddy -x -c "print:Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > Entitlements.plist
    
  2. 香色闺阁パッケージ内の_CodeSignatureを削除
    rm -rf Payload/xxx.app/_CodeSignature/
    
  3. 新しいEntitlements.plistを使用して香色闺阁パッケージに新しい署名を生成
    // まず証明書名を取得
    security find-identity -v -p codesigning
    // APP作成時に使用した証明書を選択して署名
    codesign -f -s "証明書名" --entitlements entitlements.plist Payload/xxx.app
    

パッケージ化とインストール#

Payloadフォルダーを圧縮してipaファイルを生成します。コマンドは以下の通りです:

zip -r xxx.ipa Payload/

最後に、Xcode を選択し、Windows -> Device And Simulators を選択するか、Xcode を選択した後にショートカットキーShift+CMD+2を使用して開き、デバイスを選択して+をクリックし、生成された ipa を選択すればインストールできます。

Xcode 安装 ipa

WeChat の再署名#

第一歩として、WeChat の ipa ファイルを取得します。ipa の可用性に注意しないと、苦労した末に最終的に使えないことがあるため、手順に問題があると思い込むことがあります。筆者が最終的に使用できたのは、ここからダウンロードしたWeChat ipaです。

ipa のダウンロードが完了したら、上記の手順と同様に、zip に変更し、解凍して Payload/WeChat.app を取得します。以下の画像のようになります:

WeChat_app

自分のアカウントで新しい APP を作成し(bundleID は自分で定義)、携帯電話にインストールし、実行中のパッケージ(xxx/DriveData/xxx/Build/Products/Debug-iphoneos/xxx.app)を見つけるか、パッケージ方式でAdHoc方式を使用して iPA を生成します(プロビジョニングプロファイルとEntitlements.plistを取得するため)。ここで注意が必要なのは、選択したプロビジョニングプロファイルがインストールするデバイスを含んでいることです。その後、署名待ちの iPA のbundleID、証明書、プロビジョニングプロファイルを、自分が作成した APP のものに置き換えます。

info.plist の bundleIdentifier を変更#

次に、WeChat.app のパッケージ内容を確認し、info.plistを見つけて、そこにあるbundleIdentifierを自分が作成したものに置き換えます(WeChat.app の内容は多いため、変更日でソートすると、変更するファイルを見つけやすくなります)。以下の画像のようになります:

微信 bundleID 修改

embedded.mobileprovisionの置き換え#

自分が作成した APP からembedded.mobileprovisionを取得し、WeChat.app 内のembedded.mobileprovisionを置き換えます。直接コピーして置き換えることができます。

フレームワークの再署名#

上記の香色闺阁と比較して、ここではフレームワークの再署名の手順が追加されます。Frameworks内のすべてのライブラリを自分の証明書で再署名する必要があります。Frameworksの内容は以下の画像のようになります(ここには非公式のライブラリが含まれている場合がありますが、影響はありません):

Frameworks 内容

再署名のコマンドは以下の通りで、すべてのライブラリが署名されるまで繰り返し実行します:

codesign -fs "あなたの証明書" xxx.framework

替换 framework 签名

プラグインの削除#

筆者がダウンロードしたこのバージョンのWeChat.appの Content 内にはPluginsの内容が見つからなかったため、処理は不要です。

署名の置き換え#

自分が作成した APP から取得したembedded.mobileprovisionを使用してEntitlements.plistを生成します。コマンドは以下の通りです:

   /usr/libexec/PlistBuddy -x -c "print:Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > Entitlements.plist

次に、WeChat.app内の_CodeSignatureを削除し、生成したEntitlements.plistを使用してWeChat.appに再署名します。コマンドは以下の通りで、実行時にはEntitlements.plistWeChat.appのパスに注意してください:

codesign -fs "あなたの証明書" --no-strict --entitlements=Entitlements.plist Payload/WeChat.app/

重签名 WeChat.app

その後、/Payload/WeChat.appを圧縮してxxx.ipaを生成します。コマンドは以下の通りです:

zip -r xxx.ipa Payload/

最後に、Xcode を使用して xxx.ipa を携帯電話にインストールします。手順は以下の通りです:
Xcode を選択し、Shipt+CMD+2でウィンドウを開き、デバイスを選択して+をクリックし、xxx.ipaを選択してインストールを待ちます。

最後に、インストール後の効果は以下の通りです:

最终效果

まとめ#

まとめると、ipa の再署名は、自分の証明書とプロビジョニングプロファイルを使用して、対応するパッケージ内の証明書とプロビジョニングプロファイルを置き換えるプロセスです。全体の手順は以下の通りです:

  • 使用可能な ipa を見つける
  • プロジェクトを新規作成し、コンパイルまたはパッケージして、対応するembeded.mobileprovisionを取得
  • パッケージのbundleIdentifierを自分が作成したプロジェクトのbundleIdentifierに変更
  • 自分のembeded.mobileprovisionでパッケージ内を更新して置き換える
  • フレームワークを再署名
  • プラグインを削除
  • 自分のembeded.mobileprovisionからEntitlements.plistを生成し、xxx.appを再署名
  • 最後にxxx.appxxx.ipaにパッケージ化し、インストール

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。