IPAForge 是一个无依赖的 Python 命令行工具,用于解包、检查、编辑和重建 iOS .ipa 归档文件。
它会提取完整的归档内容,将可编辑的 Apple plist 和本地化格式转换为可读的 XML,逐字节保留不透明和二进制内容,并将每次转换记录在 ipaforge.yml 中,以便框架能够被忠实地重建。
请负责任地使用: IPAForge 旨在用于互操作性、安全研究和合法的应用程序分析。请遵守适用的法律、许可证和服务条款。
.ipa 归档文件。.strings 文件转换为可编辑的 XML。.car、.nib 和 .mom。ipaforge.yml 中生成逐文件的分类和转换元数据。.ipa 归档文件,包含 Payload/<AppName>.app 包。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 文件则进行解码,输入框架目录则进行构建。
构建模式默认使用内置的 ad-hoc 签名器对包进行签名。它会为 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 通常无法安装未签名的归档文件。
解码后的 framework 通常包含:
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 — 经典 .strings 文件转换为 XML,并重建为 UTF-16 文本。xml-plist — 现有的 XML plist 文件以文本形式保留。opaque-compiled — 专有的已编译 Apple 格式按字节原样保留。native-binary — Mach-O 可执行文件和库按字节原样保留。other-binary — 图像、音频、DER 数据及其他资源按字节原样保留。| 代码 | 含义 |
|---|---|
0 | 操作成功。 |
1 | 运行时错误,例如无效的归档文件或签名失败。 |
2 | 命令行用法错误。 |
141 | 标准输出被管道消费者提前关闭。 |
IPAForge 会处理不受信任的归档内容。该工具对单个归档成员和归档总解压大小施加了防御性限制,但你仍应在隔离环境中检查未知文件。
除非你拥有分析和签名这些应用程序的合法权利,否则请勿分发或安装它们。
本 README 描述的是 IPAForge 1.24.0。
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。