背景#
携帯電話を変えた後、元の香色闺阁がダウンロードできなくなり、移行中に失われました。最近、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
を選択してインストールを待ちます。
最後にインストール後の効果は以下の通りです:
まとめ#
まとめると、ipa の再署名は自分の証明書とプロファイルを使って、対応するパッケージ内の証明書とプロファイルを置き換えるプロセスです。全体の手順は以下の通りです:
- 使用可能な ipa を見つける
- プロジェクトを新規作成し、コンパイルまたはパッケージ化して、対応する
embeded.mobileprovision
を取得 - パッケージの
bundleIdentifier
を自分が作成したプロジェクトのbundleIdentifier
に変更 - 自分の
embeded.mobileprovision
でパッケージ内を更新 - フレームワークを再署名
- プラグインを削除
- 自分の
embeded.mobileprovision
からEntitlements.plist
を生成し、xxx.app
を再署名 - 最後に
xxx.app
をxxx.ipa
にパッケージ化し、インストール