
Binder Trace ist ein Werkzeug zum Abfangen und Parsen von Android-Binder-Nachrichten. Stellen Sie es sich als „Wireshark für Binder“ vor.
Binder Trace ist ein Werkzeug zum Abfangen und Analysieren von Android-Binder-Nachrichten. Stell es dir wie „Wireshark für Binder“ vor.

Python-Version >= 3.9
Du benötigst ein gerootetes Android-Gerät oder einen Emulator.
(Nur Linux) - installiere xclip oder xsel für die Funktion „In die Zwischenablage kopieren“.
sudo apt-get install xclip
sudo apt-get install xsel
Installiere von PyPi
pip install binder-trace
Prüfe, welche Version von Frida installiert ist (stelle sicher, dass du die Anforderungen per pip installiert hast).
pip list | grep frida
Lade die passende Version von frida-server von der Frida-Releases-Seite herunter.
Stelle sicher, dass adb als root ausgeführt wird, übertrage frida-server auf dein Gerät und führe es aus.
adb root
adb push frida-server /data/local/tmp
adb shell
chmod u+x /data/local/tmp/frida-server
/data/local/tmp/frida-server
| Argument | Beschreibung |
|---|---|
| -h | Gibt die Hilfe zu den Argumenten aus. |
| -d DEVICE | Das Gerät, an das angehängt werden soll, z. B. „emulator-5554“. Verwende adb devices, um verfügbare Geräte aufzulisten. Falls nicht angegeben, wird standardmäßig das USB-Gerät verwendet. |
| -p PID | Die PID des Prozesses auf DEVICE, an den angehängt werden soll. |
| -n NAME | Der Name des Prozesses auf DEVICE, an den angehängt werden soll, z. B. „Messaging“. |
| -a [9, 10, 11, 12, 13, 14] | Die Android-Version des Zielgeräts. Wenn kein Strukturpfad angegeben wird, werden die Standardstrukturen verwendet. |
| -s STRUCTPATH | Der Pfad zum Verzeichnis der Strukturdateien. |
| -c CONFIG | Der Pfad zur Konfigurationsdatei zum Filtern. |
| --spawn | Startet den Prozess vor dem Anhängen. Die Option -n muss vorhanden sein und eine gültige Prozesskennung enthalten. |
Um Binder Trace zu starten, müssen wir ein Gerät und einen Prozess zum Anhängen auswählen. Im folgenden Beispiel verwenden wir adb und frida-ps, um einen Prozess auf einem lokalen Emulator zu identifizieren, an den wir uns anhängen können. Da es sich um einen Android-11-Emulator handelt, wählen wir das Strukturverzeichnis für Android 11. Wähle das Strukturverzeichnis, das am ehesten zu deiner Android-Version passt. Falls du Strukturen für eine andere Android-Version benötigst, lass es uns bitte wissen. Sobald es läuft, beginne mit der Nutzung der Ziel-App, um einige Binder-Transaktionen zu erzeugen.
> adb devices
List of devices attached
emulator-5554 device
> frida-ps -Ua
PID Name Identifier
---- ------------- ----------------------------
8334 Messaging com.android.messaging
7941 Phone com.android.dialer
9607 Settings com.android.settings
> cd binder_trace
> binder-trace -d emulator-5554 -n Messaging -a 11
| Taste | Aktion |
|---|---|
up | Nach oben |
down | Nach unten |
shift + up | Eine Seite nach oben |
shift + down | Eine Seite nach unten |
home | Zum Anfang |
end | Zum Ende |
tab | Nächster Bereich |
shift + tab | Vorheriger Bereich |
ctrl + c | Bereich in die Zwischenablage kopieren |
space | Transaktionsaufzeichnung pausieren/fortsetzen |
c | Leeren |
h | Hilfe öffnen |
r | Konfigurationsdatei neu laden |
q | Beenden |
| Taste | Aktion |
|---|---|
p | Reihenfolge auf-/absteigend umschalten |
w | Zur nächsten Schnittstelle springen |
s | Zur vorherigen Schnittstelle springen |
a | Alle Filter aktivieren |
n | Alle Filter deaktivieren |
enter | Filter umschalten |
Definiere zum Filtern eine beliebige oder alle der Optionen interface, method, type und inclusive. Wenn eine Option nicht verwendet werden soll, lasse sie leer "".
> binder-trace -d emulator-5554 -n Contacts -a 13

{
"filters": [
{
"interface": "android.gui.IDisplayEventConnection",
"method": "requestNextVsync",
"type": "",
"inclusive": false
},
{
"interface": "android.content.IContentProvider",
"method": "",
"type": "call",
"inclusive": false
}
]
}
> binder-trace -d emulator-5554 -n Contacts -a 13 -c .\binder_trace\binder_trace\config.json
android.gui.IDisplayEventConnection->requestNextVsync->"" und android.content.IContentProvider->"" ->call wurden herausgefiltert.

Interne Binder-Schnittstellen können sich zwischen kleineren Versionen ändern, und da praktisch alles zusammen kompiliert wird und keine Laufzeit-Versionsinformationen vorhanden sind, ist es schwierig, für jede Veröffentlichung in Androids stark fragmentiertem Ökosystem zu 100 % genaue Strukturinformationen bereitzustellen.
Weitere Details zu den Strukturen findest du auf der Strukturen-Seite.