
依存関係不要のPython CLIで、iOSの.ipaアーカイブを展開、検査、編集、再構築し、Mach-Oバイナリと署名バンドルを保持したままplistと文字列をXMLに変換します。
IPAForgeは、iOSの.ipaアーカイブを展開、検査、編集、再構築するための依存関係のないPythonコマンドラインツールです。
アーカイブ全体を抽出し、編集可能なApple plistおよびローカライズ形式を読み取り可能なXMLに変換し、不透明なコンテンツやバイナリコンテンツをバイト単位で保持し、すべての変換をipaforge.ymlに記録することで、フレームワークを忠実に再構築できるようにします。
責任を持って使用してください: IPAForgeは、相互運用性、セキュリティ研究、および正当なアプリケーション分析を目的としています。適用される法律、ライセンス、および利用規約を遵守してください。
.ipaアーカイブをデコードおよび再構築します。.stringsファイルを編集可能なXMLに変換します。.car、.nib、.momなどのApple独自形式を保持します。ipaforge.ymlにファイルごとの分類および変換メタデータを生成します。Payload/<AppName>.appバンドルを含む有効な.ipaアーカイブ。IPAForgeは単一のPythonファイルとして直接使用できます:
python3 ipaforge.py --help
ipaforgeコマンドをPATHにインストールするには:
python3 ipaforge.py --install
インストールせずにバンドルされた配布ファイルを抽出するには:
python3 ipaforge.py --extract
ipaforge -d MyApp.ipa
これにより、現在の作業ディレクトリにフレームワークディレクトリが作成されます。通常は./MyApp/です。
生成されたフレームワーク内の読み取り可能なXMLファイルを変更します。元のアーカイブデータと参照はoriginal/に保持され、変換されたファイルはipaforge.ymlで追跡されます。
ipaforge -b MyApp
デフォルトの出力は、現在の作業ディレクトリの./MyApp-signed.ipaです。
ipaforge -d MyApp.ipa decoded-framework
ipaforge -b decoded-framework rebuilt.ipa
ipaforge -d, --decode INPUT [OUTPUT]
ipaforge -b, --build INPUT [OUTPUT]
| オプション | 説明 |
|---|---|
-d, --decode | IPAを編集可能なフレームワークディレクトリにデコードします。 |
-b, --build | デコードされたフレームワークディレクトリからIPAをビルドします。 |
-f, --force | 既存の出力ディレクトリまたはファイルを上書きします。 |
--no-meta | デコード時にipaforge.ymlを書き込みません。 |
--keep-binary | デコード時にすべてのファイルをバイナリのまま保持します。XML変換を無効にします。 |
-c 0-9, --compression-level 0-9 | ZIP圧縮レベルを設定します。デフォルト: 9。 |
--no-sign | 意図的に署名なしのアーカイブをビルドします。 |
--entitlements FILE | ビルドされた署名にエンタイトルメントを埋め込みます。 |
--p12 FILE | 実際のPKCS#12開発者証明書で署名します。 |
--p12-password PASS | PKCS#12証明書のパスワード。 |
--provision FILE | --p12と共にプロビジョニングプロファイルを埋め込み、使用します。 |
-v, --verbose | デバッグログを有効にします。 |
-q, --quiet | エラーのみを出力します。 |
--version | IPAForgeのバージョンを表示します。 |
-h, --help | ヘルプを表示します。 |
Windowsでは、モードを自動的に推測できます。.ipa入力はデコードされ、フレームワークディレクトリはビルドされます。
ビルドモードは、デフォルトで組み込みのアドホック署名者を使用してバンドルに署名します。Mach-Oバイナリ用のCodeDirectoryデータと、アプリケーションバンドル用の新しい_CodeSignature/CodeResourcesファイルを作成します。
市販のiOSデバイスにインストールするには、実際の開発者証明書と互換性のあるプロビジョニングプロファイルを使用します:
ipaforge -b MyApp \
--p12 developer.p12 \
--p12-password 'your-password' \
--provision embedded.mobileprovision
カスタムエンタイトルメントを埋め込むには:
ipaforge -b MyApp --entitlements entitlements.plist
意図的に署名なしのアーカイブを作成するには:
ipaforge -b MyApp --no-sign
署名なしのアーカイブは、通常、iOSではインストールできません。
デコードされたフレームワークには通常、以下が含まれます:
MyApp/
├── Payload/
│ └── MyApp.app/
├── original/ # reference copies of signatures, profiles, and entitlements
├── readable/ # human-readable summaries for opaque formats and binaries
└── ipaforge.yml # file classifications and conversion metadata
original/ディレクトリとipaforge.ymlは、再構築されたIPAにパッケージ化されることはありません。
IPAForgeは、抽出されたファイルを以下のようなカテゴリに分類します:
native-bplist — XMLに変換され、バイナリplistとして再構築されるバイナリプロパティリスト。legacy-strings — XMLに変換され、UTF-16テキストとして再構築されるクラシックな.stringsファイル。xml-plist — テキストとして保持される既存のXML plistファイル。opaque-compiled — バイト単位で保持される独自のコンパイル済みApple形式。native-binary — バイト単位で保持されるMach-O実行可能ファイルおよびライブラリ。other-binary — バイト単位で保持される画像、音声、DERデータ、およびその他のリソース。| コード | 意味 |
|---|---|
0 | 操作が成功しました。 |
1 | 無効なアーカイブや署名の失敗など、ランタイムエラー。 |
2 | コマンドラインの使用エラー。 |
141 | パイプのコンシューマによって標準出力が早期に閉じられました。 |
IPAForgeは信頼できないアーカイブの内容を処理します。このツールは、個々のアーカイブメンバーおよび非圧縮アーカイブの合計サイズに防御的な制限を適用しますが、未知のファイルは隔離された環境で検査する必要があります。
分析および署名する法的権利がない限り、アプリケーションを配布またはインストールしないでください。
GitHubに公開する前に、プロジェクトのライセンステキストをここに追加してください。ライセンスが含まれていない場合、GitHubユーザーはコードを使用、変更、または再配布する許可を自動的に得ることはありません。
Issueおよびプルリクエストを歓迎します。以下を含めてください:
このREADMEはIPAForge 1.24.0について説明しています。