In Android è dev/binder
anche per comunicazione di livelli responsabile. È possibile ascoltare i messaggi? So che devono essere decodificati, ma come posso ottenere questi messaggi. Ad esempio se un'app invia un messaggio per diventare una Geolocalizzazione. Ho anche root sul mio dispositivo Android.Come ascoltare Dev/binder?
risposta
Breve: No, non dovrebbe essere possibile, anche con la radice.
Non ci sono molte informazioni su Binder in dettaglio sulla rete, ma ce ne sono alcune, specialmente sulla sicurezza. Fare riferimento a this o to point 3.8 here. Si può anche leggere la fonte del driver del kernel e la fonte di openbinder.
È possibile decodificare la maggior parte delle operazioni che vanno Binder passato con questa versione di strace: https://github.com/adetaylor/strace-android/tree/android
Ha miglioramenti per decodificare il ioctl
chiamate che sono il modo in cui i processi fanno richieste al driver del kernel Binder. Assicurati di utilizzare il ramo android
o non otterrai il beneficio di tali modifiche.
Si dovrebbe essere in grado di creare questo utilizzando una toolchain autonomo NDK. Vedere docs/STANDALONE-TOOLCHAIN.html
all'interno della documentazione di NDK di Android.
Grande, ma sfortunatamente non sono riuscito a compilarlo con NDK, dopo aver corretto un sacco di errori del compilatore (disallineamenti delle intestazioni, ecc.), Mi è stato lasciato un errore del linker, a quel punto mi sono alzato. Hai un binario statico precostruito da qualche parte? – domen
Facendolo con code -cery toolchain è stato molto più facile, senza correzioni di intestazione ecc. Ho seguito per lo più le istruzioni da: http: // muzso.hu/2012/04/21/how-to-compile-strace-per-utilizzare-su-un-android-phone-running-a-arm-cpu Si noti che make-dist è il posto dove impostare le variabili, aggiungere '- -host', e se qualcosa va storto, commenta il 'trap' per eseguirne il debug facilmente. – domen
Se siete in su per l'installazione di un kernel personalizzato, il codice del driver legante (drivers/staging/android/binder.c
) ha abbastanza buone funzionalità di debug, compresi i messaggi condizionali e funzioni in grado di stampare legante transazioni, ecc
In particolare, ti ottenere vari tipi di messaggi di debug nel log del kernel impostando binder_debug_mask
utilizzando la combinazione appropriata dei seguenti enumeratori:
BINDER_DEBUG_USER_ERROR
BINDER_DEBUG_FAILED_TRANSACTION
BINDER_DEBUG_DEAD_TRANSACTION
BINDER_DEBUG_OPEN_CLOSE
BINDER_DEBUG_DEAD_BINDER
BINDER_DEBUG_DEATH_NOTIFICATION
BINDER_DEBUG_READ_WRITE
BINDER_DEBUG_USER_REFS
BINDER_DEBUG_THREADS
BINDER_DEBUG_TRANSACTION
BINDER_DEBUG_TRANSACTION_COMPLETE
BINDER_DEBUG_FREE_BUFFER
BINDER_DEBUG_INTERNAL_REFS
BINDER_DEBUG_BUFFER_ALLOC
BINDER_DEBUG_PRIORITY_CAP
BINDER_DEBUG_BUFFER_ALLOC_ASYNC
Si potrebbe anche cospargere alcune delle print_binder_*
funzioni che sono inclusi nel binder.c
a Stra posizioni tegiche in tutto il codice. Ad esempio, print_binder_buffer()
o print_binder_transaction()
. Probabilmente vorrai renderle condizionali basate su un particolare uid o pid, dato che altrimenti ci saranno molte cose che volano nel registro.
@Adrian, un buon lavoro per il problema è stato fatto da altri sviluppatori/ricercatori, in modo da poter utilizzare i loro risultati.
Prima di tutto, vi consiglio di guardare il grande lavoro di Jonathan Levin (aka Technologeeks), vale a dire il suo libro sulle Android interni che recentemente è diventato libero e potrebbero essere accessibili al Web site del compagno del libro : newandroidbook.com. Da lì si otterrà link, descrizione e esempi di utilizzo di
- bindump
che è un semplice derivato del comando
service
, che ottiene un handle al servizio di sistema di scelta, e poi ispeziona la sua propria voce nella directory/sys/kernel/debug/binder/proc
. Poiché tutti i dati di debug del binder sono leggibili a livello mondiale, è possibile eseguire questo strumento anche su dispositivi nonrooted. - jtrace, una versione aumentata di
strace
, cui uno dei vantaggi rispettostrace
èmessaggio legante parsing (rilevato automaticamente).
Un altro grande lavoro, fatto da Opersys (con Karim Yaghmour), che è sicuramente degno di nota e guardando è
- Binder Explorer
Questo strumento funziona come un app, o insieme a HTML GUI, per mostrare una vista grafica delle connessioni in tempo reale.
Ho guardato su jtrace e sembra essere esattamente quello che voglio. Ma come ha fatto questo tipo a ficcare il naso sui messaggi di binder senza cambiare il codice del binder? – Adrian
Ho letto il PDF gratuito del ragazzo e la risposta è che abilita il debugfs che è effettivamente lo stesso risultato della ricompilazione di libbinder: il traffico di binder "sicuro" viene mostrato a tutti. Grazie per la risposta. Serviva solo a rinforzare il fatto che il ficcanaso sul raccoglitore non fosse possibile senza modifiche di Android. – Adrian
Perché, di volta in volta, fanno risposte sbagliate ottenere approvato come giusto?
Jtrace - da non confondere con il dump del contenitore - non richiede alcuna modifica di Android che sia mai stato. E può snoop i messaggi di binder - con la restrizione che devi essere jtraceing uno dei punti finali.
Bindump utilizza debugfs, ma mostra solo gli endpoint. @ Adriano - Ho paura che tu abbia sbagliato la conclusione.
Jtrace intercetta le chiamate di sys in entrata e in uscita e quindi risolve i messaggi del raccoglitore controllando la memoria del processo (utilizzando ptrace (2)). Se hai ptrace (2) nel tuo kernel (cosa che fai, dato che debugserver ne ha follemente bisogno) e tu sei root, puoi spiare i messaggi. Di nuovo - devi essere su un endpoint.
E @Luminger - mentre è soggetto - solo perché non è possibile trovare informazioni, non significa che non ci siano informazioni. Ci sono molte informazioni su Binder su NewAndroidBook.com - oltre al libro, guarda il link di presentazione di Binder.
Grazie. Questo è stato abbastanza interessante. Ma puoi dirmi qual è la ragione? Voglio solo ascoltare ciò che un'app invia al raccoglitore (in bytecode). Magari con strace o qualcosa del genere. – Aprel
Fondamentalmente funziona come ogni altra API di Linux che è "personalizzata". Vedrai solo cosa puoi vedere, in base a userid/groupid qui. Ha solo un buon controllo degli accessi per assicurare che tutto sia a posto =) – Luminger
ok ho capito. E un po 'un'altra domanda: per vedere come le app e il kernel di Linux comunicano tra loro (anche se vedo solo una piccola parte di questa comunicazione). Quale strumento posso usare per farlo? – Aprel