
Binder Trace is a tool for intercepting and parsing Android Binder messages. Think of it as "Wireshark for Binder".
Binder Trace è uno strumento per intercettare e analizzare i messaggi Binder di Android. Pensalo come un "Wireshark per Binder".

versione di Python >= 3.9
Avrai bisogno di un dispositivo Android rooted o di un emulatore.
(solo Linux) - installa xclip o xsel per la funzionalità "copia negli appunti"
sudo apt-get install xclip
sudo apt-get install xsel
Installa da PyPi
pip install binder-trace
Controlla quale versione di frida è installata (assicurati di aver installato i requisiti con pip)
pip list | grep frida
Scarica la versione corrispondente di frida-server dalla pagina delle release di frida
Assicurati che adb sia in esecuzione come root, esegui il push di frida-server sul dispositivo e avvialo
adb root
adb push frida-server /data/local/tmp
adb shell
chmod u+x /data/local/tmp/frida-server
/data/local/tmp/frida-server
Per avviare binder trace dobbiamo scegliere un dispositivo e un processo a cui collegarci. Nell'esempio seguente usiamo adb e frida-ps per identificare un processo a cui collegarci su un emulatore locale. Trattandosi di un emulatore Android 11, scegliamo la directory delle struct di Android 11. Scegli la directory delle struct che corrisponde più fedelmente alla tua versione di Android. Se desideri le struct per una versione diversa di Android, faccelo sapere. Una volta in esecuzione, inizia a usare l'app target per generare alcune transazioni binder.
> 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
Per filtrare, definisci una o più delle opzioni interface, method, type e inclusive. Per non usare un'opzione, lasciala vuota ""
> 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->"" e android.content.IContentProvider->""->call sono stati filtrati

Le interfacce binder interne possono cambiare tra versioni minori e, poiché sono di fatto compilate tutte insieme senza informazioni sulla versione a runtime, è difficile fornire informazioni strutturali accurate al 100% per ogni release nell'ecosistema altamente frammentato di Android.
Maggiori dettagli sulle strutture sono disponibili nella pagina delle strutture.
| Argomento | Descrizione |
|---|
| -h | Stampa l'help degli argomenti. |
| -d DEVICE | Il dispositivo a cui collegarsi, es. "emulator-5554". Usa adb devices per elencare i dispositivi disponibili. Se non fornito, viene utilizzato il dispositivo USB. |
| -p PID | Il pid del processo su DEVICE a cui collegarsi. |
| -n NAME | Il nome del processo su DEVICE a cui collegarsi, es. "Messaging". |
| -a [9, 10, 11, 12, 13, 14] | La versione Android del dispositivo target. Se non viene fornito un percorso per le struct, vengono usate le struct predefinite. |
| -s STRUCTPATH | Il percorso della directory dei file delle struct. |
| -c CONFIG | Il percorso del file di configurazione per il filtraggio. |
| --spawn | Avvia il processo prima del collegamento. L'opzione -n deve essere presente e contenere un identificatore di processo valido. |
| Tasto | Azione |
|---|
up | Sposta su |
down | Sposta giù |
shift + up | Pagina su |
shift + down | Pagina giù |
home | Vai all'inizio |
end | Vai alla fine |
tab | Pannello successivo |
shift + tab | Pannello precedente |
ctrl + c | Copia il pannello negli appunti |
space | Pausa/Riprendi la registrazione delle transazioni |
c | Pulisci |
h | Apri l'help |
r | Ricarica il file di configurazione |
q | Esci |
| Tasto | Azione |
|---|
p | Inverte l'ordinamento crescente/decrescente |
w | Vai all'interfaccia successiva |
s | Vai all'interfaccia precedente |
a | Attiva tutti i filtri |
n | Disattiva tutti i filtri |
enter | Attiva/disattiva il filtro |