2012-02-17 28 views
8

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

5

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.

+1

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

+1

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

+0

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

3

È 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.

+0

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

+0

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

2

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.

1

@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 rispetto strace è

    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.

+0

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

+0

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

2

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.

Problemi correlati