IPAForge 是一个无依赖的 Python 命令行工具,用于解包、检查、编辑和重建 iOS .ipa 归档文件。
它提取完整的归档内容,将可编辑的 Apple plist 和本地化格式转换为可读的 XML,逐字节保留不透明和二进制内容,并在 ipaforge.yml 中记录每次转换,以便框架能够被忠实地重建。
请负责任地使用: IPAForge 旨在用于互操作性、安全研究和合法的应用程序分析。请遵守适用的法律、许可证和服务条款。
.ipa 归档文件。.strings 文件转换为可编辑的 XML。.car、.nib 和 .mom。ipaforge.yml 中生成逐文件的分类和转换元数据。.ipa 归档文件,包含 Payload/<AppName>.app bundle。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]
在 Windows 上,模式可以自动推断:.ipa 输入会被解码,框架目录会被构建。
构建模式默认使用内置的 ad-hoc 签名器对 bundle 进行签名。它为 Mach-O 二进制文件创建 CodeDirectory 数据,并为应用程序 bundle 创建新的 _CodeSignature/CodeResources 文件。
要在原版 iOS 设备上安装,请使用真实的开发者证书和兼容的 provisioning profile:
ipaforge -b MyApp \
--p12 developer.p12 \
--p12-password 'your-password' \
--provision embedded.mobileprovision
要嵌入自定义 entitlements:
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 |
IPAForge 处理不受信任的归档内容。该工具对单个归档成员和总未压缩归档大小应用了防御性限制,但你仍应在隔离环境中检查未知文件。
除非你拥有分析和签名应用程序的合法权利,否则不要分发或安装这些应用程序。
在发布到 GitHub 之前,请在此处添加项目的许可证文本。如果未包含许可证,GitHub 用户不会自动获得使用、修改或重新分发代码的许可。
欢迎提交 issue 和 pull request。请包含:
本 README 描述的是 IPAForge 1.24.0。
| 选项 | 描述 |
|---|
-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 | 在构建的签名中嵌入 entitlements。 |
--p12 FILE | 使用真实的 PKCS#12 开发者证书进行签名。 |
--p12-password PASS | PKCS#12 证书的密码。 |
--provision FILE | 与 --p12 一起嵌入并使用 provisioning profile。 |
-v, --verbose | 启用调试日志记录。 |
-q, --quiet | 仅打印错误。 |
--version | 显示 IPAForge 版本。 |
-h, --help | 显示帮助。 |
| 命令行用法错误。 |
141 | 标准输出被管道消费者提前关闭。 |