1 Punkte von GN⁺ 2025-02-19 | 1 Kommentare | Auf WhatsApp teilen

Eine nicht debuggbare App debuggen

  • Kürzlich bin ich auf eine App gestoßen, die sich nicht debuggen ließ. Diese App blockiert die Verbindung eines Debuggers, beendet sich bei Code-Injektion frühzeitig und bringt auf Geräten mit Jailbreak das gesamte Telefon zum Absturz.
  • iOS-Apps enthalten oft zusätzliche Schutzmechanismen wie Jailbreak-Erkennung oder Code-Verschleierung. Diese App kombiniert besonders viele dieser Schutzfunktionen.

Video-Version

  • Es gibt eine Video-Version dieses Beitrags, die den Ablauf ausführlicher zeigt.

Inhaltsverzeichnis

  • PT_DENY_ATTACH
  • Umgehen von PT_DENY_ATTACH (einfacher Modus)
  • Umgehen von PT_DENY_ATTACH (schwieriger Modus)
  • Telefonabsturz
  • Code-Injektion
  • Fazit

PT_DENY_ATTACH

  • Das Verbinden eines Debuggers ist der erste Schritt. Auf Telefonen mit Jailbreak ist das Verbinden eines Debuggers normalerweise einfach.
  • Eine Funktion namens ptrace blockiert die Verbindung eines Debuggers. Diese Funktion verhindert über die Anfrage PT_DENY_ATTACH zukünftige Verbindungen eines Debuggers.

Umgehen von PT_DENY_ATTACH (einfacher Modus)

  • PT_DENY_ATTACH blockiert den Debugger erst nach dem Aufruf. Wenn man vor dem Aufruf einen Breakpoint setzt, lässt sich der Debugger normal verbinden.
  • Man kann einen Breakpoint direkt auf die Funktion ptrace setzen und so den Aufruf umgehen.

Umgehen von PT_DENY_ATTACH (schwieriger Modus)

  • Einige Entwickler implementieren die Debugger-Blockierung nicht über ptrace, sondern direkt über Systemaufrufe.
  • In diesem Fall muss man den betreffenden Systemaufruf im Binärprogramm finden und umgehen.

Telefonabsturz

  • Die App löst unter bestimmten Bedingungen einen Soft-Reboot des Telefons aus. Das geschieht, indem in einer Endlosschleife eine speicherintensive Methode aufgerufen wird.
  • Mit lldb kann man diese Methode umgehen.

Code-Injektion

  • Bei Code-Injektion stürzt die App ab. Wahrscheinlich liegt das an einer falschen App-Group-Kennung.
  • Auf Telefonen mit Jailbreak kann man Code injizieren, ohne die App neu zu signieren. Andernfalls lässt sich das Problem durch Method Swizzling beheben.

1 Kommentare

 
GN⁺ 2025-02-19
Hacker-News-Kommentare
  • Bryce Bostwick leistet sehr coole und inspirierende Arbeit beim Debugging und Reverse Engineering von Apps

    • Ich wurde von seinem YouTube-Video inspiriert, in dem er zeigt, wie man TikTok so modifiziert, dass nur Katzenvideos angezeigt werden, und habe daraufhin Instagram so verändert, dass nur die Nachrichtenfunktion übrig bleibt und alles andere entfernt wird
    • Ich interessiere mich dafür, Windows im Windhawk-Stil zu modifizieren
    • Bryce zeigt solche Arbeiten auf iOS in Echtzeit anhand von Schritt-für-Schritt-Videos
  • Unter DOS/Windows waren Anti-Debugging-Tricks schon seit Langem üblich

    • Wie leicht Nutzer die Kontrolle haben, ist umgekehrt proportional zur Nutzerfeindlichkeit der Plattform
    • PT_DENY_ATTACH scheint eine Funktion für Letzteres zu sein
    • Unter Windows gibt es einen Trick, mit dem sich eine App an sich selbst anhängen kann
  • Es ist überraschend, dass die App-Store-Prüfung von Apple Apps nicht ablehnt, die direkte Systemaufrufe ausführen

    • Auf Apple-Plattformen sind Systemaufrufe kein stabiles ABI, daher sollte man über libSystem gehen
    • Apps mit direkten Systemaufrufen tun Dinge, die sie nicht tun sollten
  • Ich frage mich, warum der Autor nach svc 0x80 gesucht hat statt nach mov w16, #26

  • Der Autor ist bereit, Fragen zu beantworten

  • Das Video oben ist ein wirklich großartiges Programmier-Video

    • Das schnelle Tempo, die angemessenen Wissensvoraussetzungen und die hervorragenden Demos stören den Fluss nicht
  • Ich frage mich, ob diese App eine legitime App ist oder ob sie aus Malware-Verdacht debuggt wurde

    • Falls nicht, muss viel Aufwand hineingeflossen sein
  • PT_DENY_ATTACH umgehen (Hard Mode)

    • Unter macOS patcht man den Kernel, sodass PT_DENY_ATTACH nichts tut
    • Unter macOS ist es einfach, einen gepatchten Kernel auszuführen
    • Unter iOS dürfte es mehr Probleme geben (KTRR usw.)
    • XNU ist technisch gesehen Open Source, aber es war einfacher, mit einem Hex-Editor zu patchen als neu zu kompilieren
  • Ich frage mich wegen der Benachrichtigung "com.apple.tw.twrr"

    • Warum beginnt sie mit com.apple
    • Die betreffende App ist keine Apple-App
  • Ich frage mich, ob es Leute gibt, die JavaScript-Code von Websites reverse engineeren

  • Ich frage mich, ob man auf einem jailbroken iPhone eigene kexts ausführen kann

    • Den Kernel selbst zu modifizieren wäre die coolere Methode