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ügen

Option 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.41

USB-Debugging aktivieren

Bevor ADB ein Gerät erkennt, muss USB-Debugging auf dem Android-Gerät eingeschaltet sein:

  1. Einstellungen → Über das Telefon → Software-Informationen
  2. 7-mal auf "Build-Nummer" tippen — Entwickleroptionen werden freigeschaltet
  3. Einstellungen → Entwickleroptionen → USB-Debugging aktivieren
  4. 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    device

BLE-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.funkyglassesplus

Falls 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.apk

Schritt 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

BefehlFunktion
adb devicesVerbundene Geräte anzeigen
adb shellInteraktive 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.apkAPK auf dem Gerät installieren
adb logcatSystem-Log in Echtzeit lesen
adb shell screencap /sdcard/screen.pngScreenshot aufnehmen
adb shell screenrecord /sdcard/rec.mp4Bildschirm aufzeichnen
adb shell pm list packages -3Nur 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-Logs

Die 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.txt

Relevante Log-Tags für BLE:

  • BluetoothGatt — GATT-Verbindungen, Service Discovery, Characteristic-Reads/Writes
  • GattService — Server-seitige GATT-Ereignisse
  • BtGatt.GattService — Detaillierte GATT-Stack-Logs
  • BLE — 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    device

Ab 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.xml

Häufige Probleme

ProblemUrsacheLösung
no devices/emulators foundUSB-Debugging nicht aktiv oder Kabel-ProblemUSB-Debugging prüfen, anderes Kabel versuchen
unauthorizedRSA-Schlüssel noch nicht bestätigtAuf dem Gerät den Fingerabdruck-Dialog bestätigen
device offlineADB-Daemon hängtadb kill-server && adb start-server
Permission deniedRoot-Rechte fehlen für /data/data/adb shell run-as <paketname> für Debug-Apps
APK-Pull schlägt fehlPfad falsch (Split APKs)pm list packages -f für alle Pfade
HCI-Log leerLogging nach dem Aktivieren nicht neu gestartetBluetooth 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 pull extrahieren
  • USB-Debugging muss in den Entwickleroptionen aktiviert sein; der RSA-Fingerabdruck muss bestätigt werden
  • adb logcat -s BluetoothGatt:D filtert 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