Android Mobile App Pentest: Frida, MobSF und Genymotion-Lab
Komplettes Setup fuer dynamische Analyse eigener APKs mit Frida, MobSF und Genymotion, inklusive praktischer Hooks und technischer Checkliste.

In diesem Artikel
Eine APK ist eine getarnte Zip-Datei, und genau das macht Android-Mobile-Pentesting so unterhaltsam wie chirurgisch. Bei Basilisk OffSec bauen wir Labore, in denen wir ausschliesslich Binaries testen, die uns gehoeren oder fuer die wir eine schriftliche Pruefgenehmigung haben, denn Reverse Engineering an fremden Apps ohne Einwilligung ist in fast jeder Jurisdiktion eine Straftat. Dieser Leitfaden fuehrt den kompletten Workflow durch: Scope und Recht, ein reproduzierbares Lab, statische Analyse, Traffic-Interception, Angriff auf das Backend, Custom Hooks, lokale Speicherung, Runtime-Defenses und ein sauberer Report - in der Reihenfolge, in der ein echtes Engagement ablaeuft.
Zuerst: Scope, Vertrag, Bedrohungsmodell#
Bevor irgendein Frida-Hook landet, definieren wir Scope, Vertrag und ein echtes Bedrohungsmodell, ganz im Sinne von STRIDE Threat Modeling im Sprint: Vollstaendiges Beispiel an einem Microservice. Klaeren Sie schriftlich: welche Package-Namen im Scope sind, ob das Backend mitgetestet werden darf, welche Datenklassen tabu sind und wer der Notfallkontakt bei einem echten Fund ist. Wer diesen Schritt ueberspringt, betreibt keine Forschung, sondern sammelt Gerichtstermine. Legen Sie ausserdem fest, dass Findings nur in verschluesselten Kanaelen geteilt werden.
Der Basis-Stack fuer 2026#
Der Stack ist schlicht: Genymotion Personal fuer x86_64-Emulation mit optionalen Google Apps, MobSF in Docker fuer statische und automatisierte dynamische Analyse, Frida 16.x mit frida-tools auf dem Host, objection fuer schnelle Workflows und jadx-gui zum Lesen des dekompilierten Smali. Genymotion schlaegt den AVD bei IO-Geschwindigkeit und exponiert ADB ab Werk auf Port 5555. Starten Sie ein gerootetes Android 13, installieren Sie Magisk via setup-frida und pushen Sie frida-server-arm64 nach /data/local/tmp mit 755. In weniger als fuenfzehn Minuten haben Sie eine reproduzierbare Umgebung, isoliert vom Produktivnetz, ganz im Geist von Malware-Analyse im Isolierten Lab: Sicheres Setup mit FlareVM und REMnux.
Statische Analyse mit MobSF#
MobSF ist Ihr erster Pivot. Starten Sie es per docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest, ziehen Sie die APK in die UI und es extrahiert AndroidManifest, gefaehrliche Permissions, hardcoded Secrets, Janus-Checks, WebView mit aktiviertem setJavaScriptEnabled sowie in network_security_config exponierte Domains. Statische Scans foerdern regelmaessig vergessene AWS-Tokens, Firebase-Keys mit oeffentlichen Regeln und Staging-Endpoints zutage, die niemand sehen sollte. Nutzen Sie diese Angriffsflaeche als Leitfaden fuer dynamische Hypothesen und behandeln Sie den numerischen MobSF-Score nicht als absolute Wahrheit. Wie jedes SAST erzeugt es Rauschen, siehe AppSec Shift-Left: SAST, SCA und Secrets Scanning ohne das Team auszubremsen.
Dekompilieren und Smali lesen#
Mit jadx-gui oeffnen Sie die APK und lesen den dekompilierten Java-Quelltext, waehrend Sie parallel die Smali-Ebene fuer Details behalten, die der Decompiler verschluckt. Suchen Sie gezielt nach den Klassikern: Log.d mit Tokens, hartkodierte Endpunkte, WebView.addJavascriptInterface, exportierte Activities und Receivers im Manifest, sowie String-Konstanten fuer Krypto-Keys. Exportierte Komponenten mit android:exported="true" ohne Permission sind ein direkter Einstiegspunkt fuer eine boesartige App auf demselben Geraet. Markieren Sie jede solche Komponente als dynamischen Testkandidaten fuer den naechsten Schritt.
SSL-Pinning-Bypass mit Frida#
Mit kartierter Oberflaeche oeffnen Sie Frida. Klassisches Beispiel: SSL-Pinning-Bypass, um TLS-Traffic in Burp oder mitmproxy zu inspizieren. Laden Sie das Skript mit frida -U -f com.firma.app -l ssl-bypass.js --no-pause; der Hook ueberschreibt checkServerTrusted in TrustManagerImpl und neutralisiert okhttp3 CertificatePinner. Ohne Pinning werden Sie zum Man-in-the-Middle-Proxy im Emulator, fangen authentifizierte JSON-Payloads ab und pruefen die Backend-API wie in einem klassischen Web-Pentest, mit Burp konfiguriert wie in Web-Pentest von Null: Ein Sicheres Lab mit DVWA, Juice Shop und Burp Suite Bauen. Wichtig: Pinning-Bypass ist nur an der App legitim, fuer die Sie ein Audit-Mandat haben.
Angriff auf die Backend-API#
Sobald der Traffic sauber ist, beginnt die Arbeit an der API. Die Klassiker kehren zurueck: Mass Assignment, IDOR auf /v2/users/{id}, JWT mit none-Algorithmus, GraphQL mit offener Introspection. Setzen Sie die Methodik aus Pentest von REST und GraphQL APIs: Technische Checkliste fur legales Bug Bounty ein und validieren Sie Injection-Kandidaten im Backend mit parametrisierten Payloads, wie in SQL Injection in der Praxis: Ausnutzen, Erkennen und Mitigieren im Kontrollierten Lab gezeigt. Denken Sie daran, dass die mobile App nur ein Client ist: der eigentliche Autorisierungsfehler sitzt fast immer serverseitig, wo die App-UI faelschlich als Sicherheitsgrenze behandelt wurde.
WebView und addJavascriptInterface#
Ein unterschaetztes Ziel ist das interne WebView. Laedt die App externes HTML ohne Allowlist, koennen Sie XSS in einen privilegierten Kontext eskalieren, indem Sie via addJavascriptInterface exponierte Java-Methoden aus JavaScript aufrufen - auf alten API-Levels sogar bis zur Remote Code Execution ueber Reflection. Pruefen Sie, ob setAllowFileAccess, setAllowUniversalAccessFromFileURLs und loadUrl mit nutzerkontrollierten Daten kombiniert werden. Die Payload-Mechanik sezieren wir in Modernes XSS: DOM, Stored und Reflected mit Beispielen aus dem Testlabor. Ein WebView, das intent://-URLs ohne Filter aufloest, ist zudem ein Deep-Link-Hijacking-Kandidat.
Custom Hooks: wo der Pentester glaenzt#
Drei Frida-Skripte mit Gold-Wert: Dump von AES-Schluesseln, die an Cipher.init uebergeben werden, durch Abfangen des ersten Arguments von SecretKeySpec; Instrumentierung von SharedPreferences.Editor.putString, um in Klartext gespeicherte Tokens zu finden; und Hook auf java.io.File, um alles zu protokollieren, was waehrend des Logins unter /data/data/com.firma.app geschrieben wird. Kombinieren Sie das mit adb shell run-as com.firma.app, um SQLite-Datenbanken zu ziehen und mit sqlitebrowser zu oeffnen. Bei einem juengsten Audit fanden wir refresh_token ohne Keystore persistiert, ein Fehler, der binnen Stunden zur Account Takeover wurde.
Lokale Speicherung und Keystore#
Sensible Daten gehoeren in den Android Keystore mit hardware-backed Keys, niemals in SharedPreferences im Klartext oder in eine unverschluesselte SQLite-Datei. Pruefen Sie systematisch databases/, shared_prefs/, den Cache und externe Speicher-Pfade auf Tokens, PII und Krypto-Material. Ein haeufiger Fund ist ein selbst gebauter Krypto-Layer, dessen Schluessel neben den Daten liegt - effektiv Klartext. Empfehlen Sie EncryptedSharedPreferences oder Jetpack Security und Schluessel, die an StrongBox oder das TEE gebunden und bei Root nicht extrahierbar sind.
Runtime-Defenses pruefen#
Schliessen Sie nicht ab, ohne Runtime-Defenses zu pruefen. Testen Sie Root-Detection per RootBeer, Frida-Detection durch Scan lokaler Ports (27042), Emulator-Detection via Build.FINGERPRINT und Integritaet via Play Integrity API. Dokumentieren Sie exakt, wie jede Kontrolle umgangen wurde, und schlagen Sie Defense in Depth statt Silberkugeln vor - eine einzelne Root-Pruefung, die ein Objection-Einzeiler killt, ist kein Schutz. Serverseitig haerten Sie SSH am API-Bastion gemaess SSH-Hardening 2026: Algorithmen, Zertifikate und Bastion-Hosts.
Report und Bereinigung#
Der Report ist das Produkt: pro Finding CVSS, Nachweis-Schritte, betroffene Klasse oder Endpoint und eine konkrete Remediation. Saeubern Sie Artefakte, Screenshots und PDFs vor Versand des Reports, wie in Metadaten-Hygiene: EXIF, PDF und Office vor der Veroffentlichung saubern, damit keine internen Pfade oder Client-Namen leaken. Loeschen Sie am Ende die gezogenen App-Daten und setzen Sie den Snapshot zurueck. Ein guter Report priorisiert nach realem Risiko, nicht nach der Anzahl der Zeilen im Tool-Output.
objection fuer schnelle Iteration#
Wo ein Custom-Frida-Skript zu viel Aufwand ist, beschleunigt objection den Zyklus. Nach objection -g com.firma.app explore genuegen android sslpinning disable, android keystore list, android hooking list classes und memory search --string "token", um in Minuten die haeufigsten Ziele zu treffen. android hooking watch class_method ... --dump-args --dump-return zeigt Argumente und Rueckgaben einer Methode live, ohne eine Zeile JavaScript zu schreiben. Objection ist ein Wrapper um Frida, kein Ersatz: fuer alles Nicht-Triviale schreiben Sie weiter eigene Hooks, aber fuer Recon und Pinning-Bypass ist der Einzeiler unschlagbar schnell. Denken Sie daran, dass jede Objection-Aktion im Prozessspeicher der App laeuft und bei Neustart verschwindet.
Deep Links und OAuth-Redirect-Hijacking#
Pruefen Sie die intent-filter im Manifest: ein Deep-Link-Handler mit android:autoVerify="false" oder ein custom-scheme-Redirect (myapp://callback) laesst sich von einer bosartigen App auf demselben Geraet abfangen. Der klassische Treffer ist ein OAuth-Flow, der den Authorization Code an ein nicht verifiziertes custom scheme zurueckgibt: eine zweite App registriert dasselbe Schema und faengt den Code ab. Die Gegenmassnahme sind verifizierte App Links (HTTPS mit assetlinks.json) plus PKCE, damit ein abgefangener Code ohne den Verifier wertlos ist. Testen Sie jeden exportierten Deep-Link-Endpunkt mit adb shell am start -a android.intent.action.VIEW -d "..." und beobachten Sie, welche Activity ohne Authentifizierung startet. Ein haeufiger Folgefund ist ein Deep-Link, der einen Session-Token als Query-Parameter erwartet und diesen ungeprueft in einen internen WebView weiterreicht - damit ist die Kette vom externen Intent bis zur Uebernahme der Sitzung komplett.
FAQ: Emulator oder physisches Geraet?#
Fuer die meiste Arbeit reicht ein gerooteter Genymotion-Emulator und ist schneller sowie besser wegwerfbar. Physische Geraete brauchen Sie, wenn die App hardware-gebundene Attestation, SafetyNet/Play Integrity mit strengem Verdict, NFC, Bluetooth-Peripherie oder gerate-spezifische Sensoren nutzt, die der Emulator nicht sauber nachbildet. Ein pragmatischer Mix: Emulator fuer schnelle Iteration, ein dediziertes Test-Handy fuer die Faelle, die der Emulator blockiert.
FAQ: Wie umgehe ich Play Integrity ohne physischen Root?#
Sauber gesagt: nicht immer, und das ist Absicht. Play Integrity mit MEETS_STRONG_INTEGRITY ist hardware-attestiert und soll genau modifizierte Umgebungen ablehnen. In einem autorisierten Test dokumentieren Sie, dass die Kontrolle greift, statt sie um jeden Preis zu brechen - ein bestandener Integrity-Check ist ein positiver Befund. Wo die App nur das schwache Verdict prueft oder das Ergebnis clientseitig auswertet, ist genau das der eigentliche Fehler, den Sie melden.
Fazit und praktischer Takeaway#
Betreiben Sie Genymotion, MobSF und Frida in einer dedizierten VM mit sauberem Snapshot pro Engagement, niemals an Ihre persoenliche Identitaet gebunden. Arbeiten Sie den Workflow in fester Reihenfolge ab: Scope, statisch, dekompilieren, Traffic, Backend, Custom Hooks, Storage, Runtime-Defenses, Report. Die meisten schweren Findings sitzen nicht in exotischer Krypto, sondern in banaler Autorisierung serverseitig und in im Klartext persistierten Tokens - genau dort suchen Sie zuerst, und dort liegt der Wert fuer den Kunden.


