⏮️Reverse engineering (iOS)

Outils

Cycript

ressource: http://www.cycript.org/arrow-up-right

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/ipswarrow-up-right

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

circle-info

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