1 points par GN⁺ 2025-02-19 | 1 commentaires | Partager sur WhatsApp

Déboguer une app impossible à déboguer

  • Je suis récemment tombé sur une app impossible à déboguer. Cette app bloque l’attachement du débogueur, se ferme prématurément lors de l’injection de code, et fait crasher l’ensemble du téléphone si on l’exécute sur un appareil jailbreaké.
  • Les apps iOS incluent souvent des protections supplémentaires comme la détection de jailbreak ou l’obfuscation du code. Cette app combine en particulier de nombreuses protections.

Version vidéo

  • Il existe une version vidéo de ce billet, qui montre le processus plus en détail.

Sommaire

  • PT_DENY_ATTACH
  • Contournement de PT_DENY_ATTACH (mode facile)
  • Contournement de PT_DENY_ATTACH (mode difficile)
  • Crash du téléphone
  • Injection de code
  • Conclusion

PT_DENY_ATTACH

  • La première étape consiste à attacher le débogueur. Sur un téléphone jailbreaké, il est généralement facile d’attacher un débogueur.
  • Une fonction appelée ptrace bloque l’attachement du débogueur. Cette fonction empêche toute connexion future du débogueur via la requête PT_DENY_ATTACH.

Contournement de PT_DENY_ATTACH (mode facile)

  • PT_DENY_ATTACH ne bloque le débogueur qu’après son appel. Si l’on place un point d’arrêt avant l’appel, le débogueur reste attaché normalement.
  • Il est possible de contourner l’appel en plaçant un point d’arrêt directement sur la fonction ptrace.

Contournement de PT_DENY_ATTACH (mode difficile)

  • Certains développeurs implémentent le blocage du débogueur via un appel système direct au lieu d’utiliser ptrace.
  • Dans ce cas, il faut trouver cet appel système dans le binaire et le contourner.

Crash du téléphone

  • L’app provoque un redémarrage logiciel du téléphone dans certaines conditions. Cela se produit en appelant en boucle infinie une méthode très gourmande en mémoire.
  • On peut contourner cette méthode avec lldb.

Injection de code

  • L’app plante lors de l’injection de code. Il est probable que cela soit dû à un identifiant de groupe d’apps incorrect.
  • Sur un téléphone jailbreaké, il est possible d’injecter du code sans re-signer l’app. Sinon, on peut résoudre le problème en swizzlant la méthode.

1 commentaires

 
GN⁺ 2025-02-19
Avis Hacker News
  • Bryce Bostwick fait un travail très impressionnant et inspirant sur le débogage et le reverse engineering d’apps

    • Inspiré par sa vidéo YouTube montrant comment modifier TikTok pour n’afficher que des vidéos de chats, il a modifié Instagram pour ne garder que la messagerie et supprimer le reste
    • Il s’intéresse à la modification de Windows dans le style de Windhawk
    • Bryce présente ce type de travail sur iOS à travers des vidéos détaillées en temps réel
  • Sous DOS/Windows, les techniques anti-débogage sont courantes depuis longtemps

    • Le degré de contrôle laissé à l’utilisateur est inversement proportionnel au caractère hostile de la plateforme envers lui
    • PT_DENY_ATTACH semble être une fonctionnalité de cette seconde catégorie
    • Sous Windows, il existe une astuce permettant à une app de s’attacher à elle-même
  • Il est surprenant que la vérification de l’App Store d’Apple ne rejette pas les apps qui effectuent des appels système directs

    • Sur les plateformes Apple, les appels système ne constituent pas une ABI stable, il faut donc passer par libSystem
    • Une app qui effectue directement des appels système fait probablement quelque chose qu’elle ne devrait pas faire
  • Il se demande pourquoi l’auteur a cherché svc 0x80 au lieu de mov w16, #26

  • L’auteur est prêt à répondre aux questions

  • La vidéo en haut est une excellente vidéo de programmation

    • Rythme rapide, bon niveau de connaissances présupposées, excellentes démos qui ne cassent pas le flux
  • Il se demande si cette app est légitime ou si elle a été déboguée parce qu’elle était suspectée d’être un malware

    • Sinon, cela aurait demandé beaucoup d’efforts
  • Contournement de PT_DENY_ATTACH (Hard Mode)

    • Sur macOS, on patche le noyau pour que PT_DENY_ATTACH ne fasse rien
    • Sur macOS, il est facile d’exécuter un noyau patché
    • Sur iOS, il y aurait davantage de difficultés (KTRR, etc.)
    • XNU est techniquement open source, mais il était plus simple de le patcher avec un éditeur hexadécimal que de le recompiler
  • Il s’interroge sur la notification "com.apple.tw.twrr"

    • Pourquoi cela commence-t-il par com.apple
    • Cette app n’est pas une app Apple
  • Il se demande s’il existe des personnes qui font du reverse engineering du code JavaScript de sites web

  • Il se demande s’il est possible d’exécuter des kexts personnalisés sur un iPhone jailbreaké

    • Modifier directement le noyau serait une approche encore plus élégante