⏮️Reverse engineering (iOS)
Outils
Cycript
ressource: http://www.cycript.org/
ipsw
ipsw est un utilitaire permettant d'intéragir avec les applications iOS pour de la décompilations, du reverse-engineering et autres actions intéressantes.
ressource: https://github.com/blacktop/ipsw
Extraction d'un fichier IPA
Via SSH
Méthode rapide:
Connectez-vous à votre iphone via SSH : ssh root@ip (le mot de passe par défaut est Alpine)
Recherchez l'application que vous voulez extraire dans /private/var/containers/Bundle/Application
Fermez la connexion SSH
Utilisez cette commande:
$ scp -r [email protected]:/private/var/containers/Bundle/Application/[ID]/[AppName.app] /path/to/Payload
Compressez le répertoire Payload au format IPA : zip -r target.ipa Payload
Méthode longue:
Connectez-vous à votre iphone via SSH : ssh root@ip (le mot de passe par défaut est Alpine)
Accédez au répertoire suivant : /var/containers/Bundle/Application
Recherchez maintenant l'application : recherchez | grep "nom_application"
Accédez au dossier contenant votre application : cd <app_directory> Créez un répertoire avec le nom Payload : mkdir Payload
Copiez les données dans le répertoire Payload : cp -r <appname.app>/ Payload/
Compressez le répertoire Payload au format IPA : zip -r /var/root/.ipa Payload/
Via USB
Pour interagir avec un appareil physique iOS via USB, il faut utiliser un proxy TCP vers USB. Cela peut être fait avec iproxy:
Le procédé est ensuite le même qu'en SSH.
Via AnyTrans
AnyTrans est un logiciel de gestion d'iPhone qui permet notamment de faire des transferts de fichiers entre un iPhone et un Ordinateur.
Décompiler une application iOS
Dézipper l'ipa de l'application:
unzip target.ipa
Dump les classes Objective-C
Dump les classes Swift
Swift est présent par défaut avec Xcode mais sur linux cela nécessite d'installer swift au préalable:
Patcher un IPA
De la même manière que pour les APK, Objection permet de patcher les IPA avec la commande:
$ objection patchipa --source path/to/target.ipa -c <provisioning profile>
Patcher une instruction avec Ghidra
Ouvrir le binaire à patcher dans Ghidra
Trouver la fonction à patcher (via la barre de recherche de la fenêtre "Symbol Tree")
Trouver la/les variables à modifier
Trouver la/les lignes correspondant(es) dans le code assembleur
Faire "Clic droit > Patch Instruction"
Modifier les valeurs à modifier
Exemple pour un contournement de validation basique:
Remplacez « and w0, w8, #01 » par « mov w0, #0x0 ». La fonction renverra toujours 0 (w0 étant le registre contenant les valeurs de retour des fonctions et prenant désormais toujours la valeur 0x0 grâce à l'instruction MOV) au lieu d'effectuer une comparaison bit à bit (instruction AND), selon la logique de la fonction.
Enregistrer le fichier binaire modifié (File > Export Program ⇒ Format = Original File)
Remplacer le binaire d'origine avec le binaire patché
Mis à jour