背景#
携帯電話を交換した後、元の香色闺阁がダウンロードできなくなり、移行中に失われました。最近、iPhone に 2 つの WeChat をインストールした人のスクリーンショットを見て、自分が再署名したものを思い出しました。開発者アカウントを持っているが、アプリの再署名を試したことがないので、再署名を通じて香色闺阁をインストールし、WeChat のマルチアカウントを実現できるのではないかと思いました。
手順#
やると決めたらすぐに始めます。まずは簡単なところから始めて、香色闺阁の再署名を試し、その後 WeChat を試します。香色闺阁のパッケージ内容は WeChat よりも少ないため、ファイルが見つけやすく、比較的簡単です。手順は以下の通りです:
香色闺阁の再署名#
まず、インターネットで香色闺阁の ipa パッケージを検索してダウンロードします。ない場合は、ここからyuedu.ipaダウンロードできます。
次に、ipa を zip に変更し、解凍します。Payload フォルダーが表示され、その中にStandarReader.app
というファイルがあります。StandarReader.app
を選択し、右クリックしてパッケージ内容を表示すると、APP パッケージ内のすべての内容が表示されます。以下の画像のようになります:
再署名は、自分のアカウントで新しい 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.plist
、embedded.mobileprovision
、_CodeSignature
の内容です。以下に具体的な変更方法を示します:
Info.plist の bundleID を変更#
Payload/StandarReader.app
内の Info.plist を Xcode または他のエディタで開き、Bundle identifier
を見つけます。香色闺阁の bundleID はcom.appbox.StandarReader
であるため、これを自分が作成した APP の bundleID に置き換えます。以下の画像のようになります:
Ps: Xcode 以外で開く場合は、直接検索して置き換えることができます。
embedded.mobileprovision
の置き換え#
自分が作成した APP の iPA から新しいembedded.mobileprovision
を取得します。手順は同様です:zip に変更 -> 解凍 -> パッケージ内容を確認し、embedded.mobileprovision
を見つけてコピーします。これを置き換えるPayload
ディレクトリの外側に置くことができます。以下の画像のようになります:
次に、この新しいものを元の APP のembedded.mobileprovision
と置き換えます。コマンドラインを使用して、以下のようにします:
- 元の APP のプロビジョニングプロファイルを削除
rm -rf Payload/xxx.app/embedded.mobileprovision
- 新しいプロビジョニングプロファイルを xxx.app に入れる
cp embedded.mobileprovision Payload/xxx.app/
再署名#
自分が作成した APP のembedded.mobileprovision
からEntitlements.plist
を取得します。注意:自分が作成した APP から取得し、香色闺阁のパッケージから取得しないこと。次に、香色闺阁パッケージ内の_CodeSignature
を削除し、生成したEntitlements.plist
を使用して香色闺阁パッケージに新しい署名を生成します。具体的な手順は以下の通りです:
Entitlements.plist
を生成/usr/libexec/PlistBuddy -x -c "print:Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > Entitlements.plist
- 香色闺阁パッケージ内の
_CodeSignature
を削除rm -rf Payload/xxx.app/_CodeSignature/
- 新しい
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 を選択すればインストールできます。
WeChat の再署名#
第一歩として、WeChat の ipa ファイルを取得します。ipa の可用性に注意しないと、苦労した末に最終的に使えないことがあるため、手順に問題があると思い込むことがあります。筆者が最終的に使用できたのは、ここからダウンロードしたWeChat ipaです。
ipa のダウンロードが完了したら、上記の手順と同様に、zip に変更し、解凍して Payload/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 の内容は多いため、変更日でソートすると、変更するファイルを見つけやすくなります)。以下の画像のようになります:
embedded.mobileprovision
の置き換え#
自分が作成した APP からembedded.mobileprovision
を取得し、WeChat.app 内のembedded.mobileprovision
を置き換えます。直接コピーして置き換えることができます。
フレームワークの再署名#
上記の香色闺阁と比較して、ここではフレームワークの再署名の手順が追加されます。Frameworks
内のすべてのライブラリを自分の証明書で再署名する必要があります。Frameworks
の内容は以下の画像のようになります(ここには非公式のライブラリが含まれている場合がありますが、影響はありません):
再署名のコマンドは以下の通りで、すべてのライブラリが署名されるまで繰り返し実行します:
codesign -fs "あなたの証明書" xxx.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.plist
とWeChat.app
のパスに注意してください:
codesign -fs "あなたの証明書" --no-strict --entitlements=Entitlements.plist Payload/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.app
をxxx.ipa
にパッケージ化し、インストール