ADB
Android-Geräte steuern, APKs extrahieren und Logs analysieren
Lernziel
Nach dieser Seite kannst du ADB installieren, ein Android-Gerät verbinden und APK-Dateien direkt vom Gerät extrahieren. Du weißt, wie du HCI-Snoop-Logs für BLE-Debugging aktivierst und Logcat nach BLE-Ereignissen filterst.
Was ist ADB?
ADB (Android Debug Bridge) ist ein Kommandozeilen-Tool aus dem Android SDK Platform Tools-Paket. Es stellt eine direkte Kommunikationsverbindung zwischen einem Computer und einem Android-Gerät her — über USB oder WLAN. Mit ADB kannst du Shell-Befehle auf dem Gerät ausführen, Dateien übertragen, Apps installieren und Systemlogs in Echtzeit lesen.
Im Kontext der BLE-Sicherheitsanalyse ist ADB das wichtigste Werkzeug für Phase 1 (APK extrahieren) und als Hilfsmittel in Phase 2 (HCI-Logs für BLE-Traffic ohne nRF-Dongle).
Kein Root erforderlich für APK-Extraktion
Die meisten ADB-Befehle, die in diesem Guide benötigt werden, funktionieren ohne Root-Rechte auf dem Android-Gerät. Lediglich das Auslesen von App-Daten aus /data/data/ erfordert Root oder einen Debug-Build der App.
Installation
ADB ist Teil der Android SDK Platform Tools. Du hast zwei Installationswege:
Option 1: Standalone (empfohlen)
# Linux (Debian/Ubuntu)
sudo apt install adb
# macOS (Homebrew)
brew install --cask android-platform-tools
# Windows: platform-tools.zip von developer.android.com herunterladen und entpacken
# Dann den Ordner zur PATH-Variable hinzufügenOption 2: Über Android Studio
Android Studio installiert die Platform Tools automatisch unter:
- Linux:
~/Android/Sdk/platform-tools/ - macOS:
~/Library/Android/sdk/platform-tools/ - Windows:
%LOCALAPPDATA%/Android/Sdk/platform-tools/
Installation prüfen:
adb version
# Ausgabe: Android Debug Bridge version 1.0.41USB-Debugging aktivieren
Bevor ADB ein Gerät erkennt, muss USB-Debugging auf dem Android-Gerät eingeschaltet sein:
- Einstellungen → Über das Telefon → Software-Informationen
- 7-mal auf "Build-Nummer" tippen — Entwickleroptionen werden freigeschaltet
- Einstellungen → Entwickleroptionen → USB-Debugging aktivieren
- USB-Kabel anschließen — auf dem Gerät die RSA-Schlüssel-Anfrage bestätigen
# Verbundene Geräte anzeigen
adb devices
# Ausgabe:
# List of devices attached
# R5CW3xxxxxxx deviceBLE-Beispiel: LED-Brille APK extrahieren
Die LED-Brille wurde mit der App com.pinkysinyeeho.funkyglassesplus gesteuert. Um die APK für die Analyse mit JADX zu extrahieren, sind drei Schritte nötig.
Schritt 1: Paketname herausfinden
# Alle installierten Pakete auflisten und nach dem App-Namen filtern
adb shell pm list packages | grep -i funky
# Ausgabe: package:com.pinkysinyeeho.funkyglassesplusFalls du den genauen Namen nicht kennst:
# Alle Pakete ausgeben (ohne System-Apps)
adb shell pm list packages -3
# Paket für aktuell angezeigte App finden
adb shell dumpsys window | grep -i focus
# Zeigt: mCurrentFocus=Window{... com.pinkysinyeeho.funkyglassesplus/...}Schritt 2: Pfad der APK-Datei ermitteln
adb shell pm path com.pinkysinyeeho.funkyglassesplus
# Ausgabe: package:/data/app/~~randomstring==/com.pinkysinyeeho.funkyglassesplus-xyz/base.apkSchritt 3: APK auf den Computer kopieren
adb pull /data/app/~~randomstring==/com.pinkysinyeeho.funkyglassesplus-xyz/base.apk ./funkyglasses.apk
# Ausgabe: /data/app/.../base.apk: 1 file pulled, 0 skipped. 8.3 MB/s (4231680 bytes in 0.485s)Die extrahierte funkyglasses.apk kann jetzt mit JADX-GUI geöffnet werden.
APK bei gesplitteten Apps
Neuere Android-Apps werden manchmal als Split APKs ausgeliefert (ein Basis-APK plus mehrere Split-APKs für verschiedene Architekturen). pm list packages -f zeigt alle Dateipfade. Du kannst alle mit adb pull holen und in JADX alle auf einmal öffnen.
Features im Überblick
| Befehl | Funktion |
|---|---|
adb devices | Verbundene Geräte anzeigen |
adb shell | Interaktive Shell auf dem Gerät öffnen |
adb pull <gerät> <lokal> | Datei vom Gerät kopieren |
adb push <lokal> <gerät> | Datei auf das Gerät kopieren |
adb install app.apk | APK auf dem Gerät installieren |
adb logcat | System-Log in Echtzeit lesen |
adb shell screencap /sdcard/screen.png | Screenshot aufnehmen |
adb shell screenrecord /sdcard/rec.mp4 | Bildschirm aufzeichnen |
adb shell pm list packages -3 | Nur Drittanbieter-Apps auflisten |
Fortgeschrittene Anwendungen
BLE HCI-Snoop-Log aktivieren
Android kann alle BLE-HCI-Pakete in einer Log-Datei aufzeichnen — ohne nRF-Dongle. Das ist nützlich, wenn du die BLE-Kommunikation aus der App-Perspektive erfassen willst.
# 1. HCI-Logging aktivieren (Entwickleroptionen → Bluetooth-HCI-Snoop-Log aktivieren)
# Oder per ADB:
adb shell setprop persist.bluetooth.btsnoopenable true
# 2. Bluetooth aus- und wieder einschalten, damit das Logging startet
# 3. App verwenden (BLE-Verbindung herstellen, Befehle senden)
# 4. Log-Datei auf den Computer kopieren
# Pfad variiert je nach Android-Version:
adb pull /data/misc/bluetooth/logs/btsnoop_hci.log ./btsnoop.log
# Alternativ:
adb bugreport # Erstellt vollständiges Bug-Report-ZIP inkl. BLE-LogsDie btsnoop.log-Datei kann direkt in Wireshark geöffnet werden und zeigt den vollständigen BLE-Traffic der App.
Speicherpfad je nach Android-Version unterschiedlich
Der Pfad zur HCI-Snoop-Log-Datei hat sich über Android-Versionen geändert. Auf Android 12+ ist er oft /data/misc/bluetooth/logs/. Bei Zugriffsproblemen: adb shell find /data/misc/bluetooth -name "*.log" 2>/dev/null.
Logcat nach BLE-Ereignissen filtern
Logcat gibt alle System-Logs aus — das sind schnell tausende Zeilen. Mit Tags und Grep kannst du gezielt BLE-relevante Ereignisse herausfiltern:
# Alle BLE-relevanten Log-Einträge (Tags: BluetoothGatt, BLE, GattService)
adb logcat -s BluetoothGatt:D GattService:D BtGatt:D
# Nach Paketname filtern (nur Logs der LED-Brille-App)
adb logcat | grep com.pinkysinyeeho.funkyglassesplus
# Logs mit Zeitstempel in Datei speichern
adb logcat -v time > ble_log.txt
# Vorherige Logs löschen, dann frisch aufzeichnen
adb logcat -c && adb logcat -v time > fresh_log.txtRelevante Log-Tags für BLE:
BluetoothGatt— GATT-Verbindungen, Service Discovery, Characteristic-Reads/WritesGattService— Server-seitige GATT-EreignisseBtGatt.GattService— Detaillierte GATT-Stack-LogsBLE— Allgemeine BLE-Ereignisse
ADB über WLAN (kabelloser Modus)
Für Tests, bei denen das USB-Kabel stört (z. B. wenn das Smartphone gleichzeitig über USB geladen werden soll):
# Gerät zunächst per USB verbinden, dann WLAN-Modus aktivieren
adb tcpip 5555
# USB-Kabel trennen
# IP-Adresse des Geräts herausfinden (Einstellungen → WLAN → Gerät-IP)
adb connect 192.168.1.42:5555
# Verbindung prüfen
adb devices
# Ausgabe: 192.168.1.42:5555 deviceAb Android 11 geht das noch einfacher: Entwickleroptionen → Kabelloses Debugging → mit QR-Code oder Kopplungscode verbinden (kein USB-Kabel nötig).
App-Daten sichern (Debug-Apps)
Wenn die Ziel-App als Debug-Build vorliegt oder das Gerät gerootet ist:
# App-Daten-Verzeichnis inspizieren
adb shell run-as com.pinkysinyeeho.funkyglassesplus ls -la /data/data/com.pinkysinyeeho.funkyglassesplus/
# SharedPreferences (oft gespeicherte Schlüssel oder Konfiguration) lesen
adb shell run-as com.pinkysinyeeho.funkyglassesplus cat /data/data/com.pinkysinyeeho.funkyglassesplus/shared_prefs/prefs.xmlHäufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
no devices/emulators found | USB-Debugging nicht aktiv oder Kabel-Problem | USB-Debugging prüfen, anderes Kabel versuchen |
unauthorized | RSA-Schlüssel noch nicht bestätigt | Auf dem Gerät den Fingerabdruck-Dialog bestätigen |
device offline | ADB-Daemon hängt | adb kill-server && adb start-server |
Permission denied | Root-Rechte fehlen für /data/data/ | adb shell run-as <paketname> für Debug-Apps |
| APK-Pull schlägt fehl | Pfad falsch (Split APKs) | pm list packages -f für alle Pfade |
| HCI-Log leer | Logging nach dem Aktivieren nicht neu gestartet | Bluetooth deaktivieren und wieder aktivieren |
ADB und udev unter Linux
Unter Linux erkennt ADB das Gerät nur, wenn eine passende udev-Regel für den USB-Vendor-ID existiert. Einfachste Lösung: sudo apt install android-sdk-platform-tools installiert die nötigen Regeln automatisch. Alternativ: github.com/M0Rf30/android-udev-rules für eine vollständige Regelliste.
Zusammenfassung
- ADB ist das zentrale Werkzeug für Phase 1: APK mit
pm path+adb pullextrahieren - USB-Debugging muss in den Entwickleroptionen aktiviert sein; der RSA-Fingerabdruck muss bestätigt werden
adb logcat -s BluetoothGatt:Dfiltert gezielt BLE-GATT-Ereignisse- HCI-Snoop-Log zeichnet rohen BLE-Traffic ohne Dongle auf — direkt in Wireshark öffnen
- Kabelloses ADB (ab Android 11 ohne USB) ist praktisch für Szenarien mit belegtem USB-Port