
Python CLI без зависимостей для распаковки, проверки, редактирования и пересборки архивов iOS .ipa, преобразующий plists и строки в XML с сохранением бинарных файлов Mach-O и подписывающих бандлов.
#IPAForge
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 | Встроить entitlements в созданную подпись. |
--p12 FILE | Подписать с помощью реального сертификата разработчика PKCS#12. |
--p12-password PASS | Пароль для сертификата PKCS#12. |
--provision FILE | Встроить и использовать профиль подготовки (provisioning profile) вместе с --p12. |
-v, --verbose | Включить отладочное логирование. |
-q, --quiet | Выводить только ошибки. |
--version | Показать версию IPAForge. |
-h, --help | Показать справку. |
В Windows режим может определяться автоматически: входной файл .ipa декодируется, а каталог фреймворка собирается.
В режиме сборки бандлы по умолчанию подписываются встроенным ad-hoc подписывающим компонентом. Он создаёт данные CodeDirectory для бинарных файлов Mach-O и новые файлы _CodeSignature/CodeResources для бандлов приложений.
Для установки на стандартные устройства iOS используйте реальный сертификат разработчика и совместимый профиль подготовки:
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 — классические файлы .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.