
Python CLI без зависимостей для распаковки, проверки, редактирования и пересборки архивов iOS .ipa, преобразующий plists и строки в XML с сохранением бинарных файлов Mach-O и подписывающих бандлов.
#IPAForge
IPAForge — это инструмент командной строки на Python без зависимостей для распаковки, инспектирования, редактирования и пересборки архивов iOS .ipa.
Он извлекает полный архив, преобразует редактируемые форматы Apple plist и локализации в читаемый XML, сохраняет непрозрачное и бинарное содержимое байт-в-байт и записывает каждое преобразование в ipaforge.yml, чтобы фреймворк можно было достоверно пересобрать.
Используйте ответственно: IPAForge предназначен для совместимости, исследований в области безопасности и легитимного анализа приложений. Соблюдайте применимые законы, лицензии и условия обслуживания.
.ipa..strings в редактируемый XML..car, .nib и ..momipaforge.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 используйте реальный сертификат разработчика и совместимый 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 — классические файлы .strings, преобразованные в XML и пересобираемые как текст UTF-16.xml-plist — существующие XML plist файлы, сохраняемые как текст.opaque-compiled — проприетарные скомпилированные форматы Apple, сохраняемые байт-в-байт.native-binary — исполняемые файлы и библиотеки Mach-O, сохраняемые байт-в-байт.other-binary — изображения, аудио, данные DER и другие ресурсы, сохраняемые байт-в-байт.| Код | Значение |
|---|---|
0 | Успешная операция. |
1 | Ошибка времени выполнения, например недействительный архив или сбой подписи. |
2 | Ошибка использования командной строки. |
141 | Стандартный вывод закрыт рано потребителем канала. |
IPAForge обрабатывает недоверенное содержимое архивов. Инструмент применяет защитные ограничения к отдельным членам архива и общему размеру несжатого архива, но вам всё равно следует проверять неизвестные файлы в изолированной среде.
Не распространяйте и не устанавливайте приложения, если у вас нет законного права анализировать и подписывать их.
Добавьте текст лицензии проекта здесь перед публикацией на GitHub. Если лицензия не включена, пользователи GitHub не получают автоматически разрешение на использование, изменение или распространение кода.
Issues и pull requests приветствуются. Пожалуйста, указывайте:
Этот README описывает IPAForge 1.24.0.