背景#
携帯電話を変えた後、元の香色闺阁がダウンロードできなくなり、移行中に失われました。最近、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の内容は以下の図のようになります(ここには非公式のライブラリが含まれている可能性がありますが、影響はありません):

再署名のコマンドは以下の通りで、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を選択してインストールを待ちます。
最後にインストール後の効果は以下の通りです:
.gif&w=1200&q=75)
まとめ#
まとめると、ipa の再署名は自分の証明書とプロファイルを使って、対応するパッケージ内の証明書とプロファイルを置き換えるプロセスです。全体の手順は以下の通りです:
- 使用可能な ipa を見つける
- プロジェクトを新規作成し、コンパイルまたはパッケージ化して、対応する
embeded.mobileprovisionを取得 - パッケージの
bundleIdentifierを自分が作成したプロジェクトのbundleIdentifierに変更 - 自分の
embeded.mobileprovisionでパッケージ内を更新 - フレームワークを再署名
- プラグインを削除
- 自分の
embeded.mobileprovisionからEntitlements.plistを生成し、xxx.appを再署名 - 最後に
xxx.appをxxx.ipaにパッケージ化し、インストール