
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 permettant de décompresser, inspecter, modifier et reconstruire des archives iOS .ipa.
Il extrait l'archive complète, convertit les formats Apple plist et de localisation 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 applicables, les licences et les conditions d'utilisation.
.ipa standard..strings texte hérités en XML modifiable..car, .nib et ..momipaforge.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 inclus 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écoder une IPA dans un répertoire de framework modifiable. |
-b, --build | Construire une IPA à partir d'un répertoire de framework décodé. |
-f, --force | Écraser un répertoire ou fichier de sortie existant. |
--no-meta | Ne pas écrire ipaforge.yml lors du décodage. |
--keep-binary | Conserver tous les fichiers en binaire lors du décodage ; désactiver la conversion XML. |
-c 0-9, --compression-level 0-9 | Définir le niveau de compression ZIP. Par défaut : 9. |
--no-sign | Construire une archive intentionnellement non signée. |
--entitlements FILE | Intégrer les entitlements dans la signature construite. |
--p12 FILE | Signer avec un vrai certificat développeur PKCS#12. |
--p12-password PASS | Mot de passe du certificat PKCS#12. |
--provision FILE | Intégrer et utiliser un profil de provisionnement avec --p12. |
-v, --verbose | Activer la journalisation de débogage. |
-q, --quiet | N'afficher que les erreurs. |
--version | Afficher la version d'IPAForge. |
-h, --help | Afficher 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.
Le mode build signe les bundles avec le signataire ad-hoc intégré par défaut. Il crée des données CodeDirectory pour les binaires Mach-O et de nouveaux fichiers _CodeSignature/CodeResources pour les bundles d'application.
Pour une installation sur des appareils iOS standard, utilisez un vrai 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 entitlements 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
Le répertoire original/ et ipaforge.yml ne sont jamais empaquetés dans l'IPA reconstruite.
IPAForge classe les fichiers extraits dans des catégories incluant :
native-bplist — listes de propriétés binaires converties en XML et reconstruites en plists binaires.legacy-strings — fichiers .strings classiques convertis en XML et reconstruits en texte UTF-16.xml-plist — fichiers plist XML existants préservés en texte.opaque-compiled — formats compilés propriétaires Apple préservés octet par octet.native-binary — exécutables et bibliothèques Mach-O préservés octet par octet.other-binary — images, audio, données DER et autres ressources préservées 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 de l'archive 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.
Ajoutez le texte de licence du projet ici avant de publier sur GitHub. Si aucune licence n'est incluse, les utilisateurs de GitHub ne reçoivent pas automatiquement la permission d'utiliser, modifier ou redistribuer le code.
Les issues et pull requests sont les bienvenues. Veuillez inclure :
Ce README décrit IPAForge 1.24.0.