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
Hacker-News-Kommentare
Bryce Bostwick leistet sehr coole und inspirierende Arbeit beim Debugging und Reverse Engineering von Apps
Unter DOS/Windows waren Anti-Debugging-Tricks schon seit Langem üblich
Es ist überraschend, dass die App-Store-Prüfung von Apple Apps nicht ablehnt, die direkte Systemaufrufe ausführen
Ich frage mich, warum der Autor nach
svc 0x80gesucht hat statt nachmov w16, #26Der Autor ist bereit, Fragen zu beantworten
Das Video oben ist ein wirklich großartiges Programmier-Video
Ich frage mich, ob diese App eine legitime App ist oder ob sie aus Malware-Verdacht debuggt wurde
PT_DENY_ATTACH umgehen (Hard Mode)
Ich frage mich wegen der Benachrichtigung "com.apple.tw.twrr"
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