
CLI Python sans dépendances pour décompresser, inspecter, modifier et reconstruire les archives .ipa iOS, en convertissant les plists et les chaînes en XML tout en préservant les binaires Mach-O et les bundles de signature.
#IPAForge
IPAForge est un outil en ligne de commande Python sans dépendances pour décompresser, inspecter, modifier et reconstruire des archives iOS .ipa.
Il extrait l'intégralité de l'archive, convertit les formats plist et de localisation Apple modifiables en XML lisible, préserve le contenu opaque et binaire octet par octet, et enregistre chaque conversion dans ipaforge.yml afin que le framework puisse être reconstruit fidèlement.
À utiliser de manière responsable : IPAForge est destiné à l'interopérabilité, à la recherche en sécurité et à l'analyse légitime d'applications. Respectez les lois, licences et conditions d'utilisation applicables.
.ipa standard..strings texte hérités en XML modifiable..car, .nib et .mom.ipaforge.yml..ipa valide contenant un bundle Payload/<AppName>.app.IPAForge peut être utilisé directement comme un fichier Python unique :
python3 ipaforge.py --help
Pour installer la commande ipaforge dans votre PATH :
python3 ipaforge.py --install
Pour extraire les fichiers de distribution fournis sans les installer :
python3 ipaforge.py --extract
ipaforge -d MyApp.ipa
Cela crée un répertoire de framework dans le répertoire de travail courant, normalement ./MyApp/.
Modifiez les fichiers XML lisibles à l'intérieur du framework généré. Les données et références de l'archive d'origine sont conservées dans original/ ; les fichiers qui ont été convertis sont suivis dans ipaforge.yml.
ipaforge -b MyApp
La sortie par défaut est ./MyApp-signed.ipa dans le répertoire de travail courant.
ipaforge -d MyApp.ipa decoded-framework
ipaforge -b decoded-framework rebuilt.ipa
ipaforge -d, --decode INPUT [OUTPUT]
ipaforge -b, --build INPUT [OUTPUT]
| Option | Description |
|---|---|
-d, --decode | Décode un IPA dans un répertoire de framework modifiable. |
-b, --build | Construit un IPA à partir d'un répertoire de framework décodé. |
-f, --force | Écrase un répertoire ou un fichier de sortie existant. |
--no-meta | N'écrit pas ipaforge.yml lors du décodage. |
--keep-binary | Conserve tous les fichiers en binaire lors du décodage ; désactive la conversion XML. |
-c 0-9, --compression-level 0-9 | Définit le niveau de compression ZIP. Par défaut : 9. |
--no-sign | Construit une archive volontairement non signée. |
--entitlements FILE | Intègre les entitlements dans la signature générée. |
--p12 FILE | Signe avec un véritable certificat développeur PKCS#12. |
--p12-password PASS | Mot de passe du certificat PKCS#12. |
--provision FILE | Intègre et utilise un profil de provisionnement avec --p12. |
-v, --verbose | Active la journalisation de débogage. |
-q, --quiet | N'affiche que les erreurs. |
--version | Affiche la version d'IPAForge. |
-h, --help | Affiche l'aide. |
Sous Windows, le mode peut être déduit automatiquement : une entrée .ipa est décodée et un répertoire de framework est construit.
En mode build, les bundles sont signés par défaut avec le signataire ad-hoc intégré. Il crée des données CodeDirectory pour les binaires Mach-O et de nouveaux fichiers _CodeSignature/CodeResources pour les bundles d'application.
Pour l'installation sur des appareils iOS standards, utilisez un véritable certificat développeur et un profil de provisionnement compatible :
ipaforge -b MyApp \
--p12 developer.p12 \
--p12-password 'your-password' \
--provision embedded.mobileprovision
Pour intégrer des droits personnalisés :
ipaforge -b MyApp --entitlements entitlements.plist
Pour créer intentionnellement une archive non signée :
ipaforge -b MyApp --no-sign
Les archives non signées ne peuvent généralement pas être installées par iOS.
Un framework décodé contient généralement :
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
Les répertoires original/ et ipaforge.yml ne sont jamais intégrés dans l'IPA reconstruit.
IPAForge classe les fichiers extraits en catégories, notamment :
native-bplist — listes de propriétés binaires converties en XML et reconstruites en listes de propriétés binaires.legacy-strings — fichiers .strings classiques convertis en XML et reconstruits en texte UTF-16.xml-plist — fichiers plist XML existants conservés en tant que texte.opaque-compiled — formats Apple compilés propriétaires conservés octet par octet.native-binary — exécutables et bibliothèques Mach-O conservés octet par octet.other-binary — images, audio, données DER et autres ressources conservés octet par octet.| Code | Signification |
|---|---|
0 | Opération réussie. |
1 | Erreur d'exécution, telle qu'une archive invalide ou un échec de signature. |
2 | Erreur d'utilisation de la ligne de commande. |
141 | Sortie standard fermée prématurément par un consommateur de pipe. |
IPAForge traite le contenu d'archives non fiables. L'outil applique des limites défensives aux membres individuels des archives et à la taille totale décompressée de l'archive, mais vous devriez tout de même inspecter les fichiers inconnus dans un environnement isolé.
Ne distribuez ni n'installez d'applications à moins d'avoir le droit légal de les analyser et de les signer.
Ce README décrit IPAForge 1.24.0.
Ce projet est sous licence MIT - consultez le fichier LICENSE pour plus de détails.