2012-02-17 8 views
8

En Android es dev/binder también para las capas de comunicación responsable. ¿Es posible escuchar mensajes? Sé que deben decodificarse, pero ¿cómo puedo obtener estos mensajes? Por ejemplo, si una aplicación envía un mensaje se convirtió en Geolocalización. También tengo la raíz en mi dispositivo Android.¿Cómo se escucha el revelador/encuadernador?

Respuesta

5

Corto: No, no debería ser posible, incluso con root.

No hay mucha información sobre Binder en detalle en la red, pero hay algunos, especialmente sobre la seguridad. Consulte this o to point 3.8 here. También puede leer la fuente del controlador del núcleo y la fuente de openbinder.

+1

Gracias. Esto fue bastante interesante. Pero puedes decirme cuál es la razón para eso. Solo quiero escuchar lo que una aplicación envía a la carpeta (en bytecode). Mayordomo con strace o algo así. – Aprel

+1

Básicamente funciona como cualquier otra aplicación de Linux que sea "personalizada". Simplemente verá lo que se le permite ver, basado en ID de usuario/grupo aquí. Simplemente tiene un buen control de acceso para garantizar que todo esté bien =) – Luminger

+0

bien lo he entendido. Y una pregunta un poco más: para ver cómo las aplicaciones y el núcleo de Linux se comunican entre sí (también si solo veo una pequeña parte de esta comunicación). ¿Qué herramienta puedo usar para hacerlo? – Aprel

3

Puede decodificar la mayoría de las transacciones de la carpeta que van más allá usando esta versión de strace: https://github.com/adetaylor/strace-android/tree/android

Tiene mejoras para decodificar los ioctl llamadas que son la forma en procesos hacen peticiones al controlador del núcleo aglutinante. Asegúrese de utilizar la rama android o no obtendrá el beneficio de esos cambios.

Debería poder construir esto usando una cadena de herramientas independiente NDK. Consulte docs/STANDALONE-TOOLCHAIN.html dentro de la documentación de Android NDK.

+0

Genial, pero desafortunadamente no pude compilarlo con NDK, después de corregir un montón de errores del compilador (incompatibilidades de encabezado, etc.), me quedé con un error de enlazador, y en ese punto me he levantado. ¿Tiene un binario estático preconstruido en alguna parte? – domen

+0

Haciéndolo con codesourcery toolchain fue mucho más fácil, sin correcciones de encabezado, etc. La mayoría seguí las instrucciones de: http: // muzso.hu/2012/04/21/how-to-compile-strace-for-use-on-an-android-phone-running-an-arm-cpu Tenga en cuenta que make-dist es el lugar para establecer variables, agregar '- -host', y si algo sale mal, comenta la 'trampa' para depurarlo fácilmente. – domen

2

Si usted está listo para la instalación de un kernel personalizado, el código del controlador aglutinante (drivers/staging/android/binder.c) tiene muy buenas características de depuración, incluyendo mensajes condicionales y funciones que pueden imprimir carpeta de transacciones, etc.

En concreto, se le obtener varios tipos de mensajes de depuración en el registro del núcleo mediante el establecimiento de binder_debug_mask usando la combinación apropiada de las siguientes enumeradores:

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 

también puede espolvorear algunos de los print_binder_* funciones que se incluyen en binder.c en Stra ubicaciones tegic en todo el código. Por ejemplo, print_binder_buffer() o print_binder_transaction(). Probablemente quiera hacer estos condicionales basados ​​en un uid o pid en particular, ya que de lo contrario habrá MUCHAS cosas volando por el registro.

1

@Adrian, un buen trabajo w.r.t el problema ha sido realizado por otros desarrolladores/investigadores, por lo que podría hacer uso de sus resultados.

En primer lugar, me gustaría recomendar a mirar a la gran obra de Jonathan Levin (también conocido como Technologeeks), es decir, su libro sobre los Android internos que recientemente se liberó y se podía acceder al sitio web complementario del libro : newandroidbook.com. Desde allí se obtendrá enlaces, descripción y ejemplos de uso de

  • bindump

    que es un simple derivado del comando service, que obtiene un identificador para el servicio del sistema de elección y, a continuación, inspecciona su entrada propia en el directorio /sys/kernel/debug/binder/proc. Debido a que todos los datos de depuración de la carpeta son legibles en todo el mundo, también puede ejecutar esta herramienta en dispositivos sin raíz.

  • jtrace, una versión aumentada de strace, cuyo una de las ventajas sobre strace es

    mensaje aglutinante análisis (auto detectado).

Otra gran obra, realizada por Opersys (con Karim Yaghmour), que es definitivamente vale la pena destacar y mirando es

  • Binder Explorer

    Esta herramienta funciona como una aplicación, o junto con HTML GUI, para mostrar una vista gráfica de las conexiones en tiempo real.

+0

Miré a jtrace y parece ser exactamente lo que quiero. ¿Pero cómo este tipo fisgoneaba en los mensajes de la carpeta sin cambiar el código de la carpeta en sí? – Adrian

+0

Leí el PDF gratuito del tipo y la respuesta es que habilita debugfs, que en realidad es el mismo resultado que recompilar libbinder: el tráfico de enlace "seguro" se emite para que todos lo vean. Gracias por la respuesta. Simplemente sirvió para reforzar que el espionaje en la carpeta no es posible sin la modificación de Android. – Adrian

2

Por qué, una y otra vez, qué respuestas incorrectas obtener aprobado como un derecho?

Jtrace - no debe confundirse con bin dump - no requiere ninguna modificación de Android nunca antes. Y puede husmear en los mensajes de encuadernación, con la restricción de que tienes que marcar uno de los puntos finales.

Bindump usa debugfs, pero eso solo muestra los puntos finales. @Adrian - Me temo que tienes una conclusión incorrecta.

Jtrace intercepta las llamadas entrantes y salientes del sistema, y ​​luego resuelve los mensajes del cuaderno inspeccionando la memoria de proceso (usando ptrace (2)). Si tiene ptrace (2) en su kernel (lo cual hace, porque el servidor de depuración lo necesita tontamente) y usted es root, puede fisgonear mensajes. De nuevo, tienes que estar en un punto final.

Y @Luminger - mientras estaba en el tema - solo porque no se puede encontrar información, no significa que no haya información. Hay mucha información en Binder en NewAndroidBook.com, además del libro, mira el enlace de presentación de Binder.

Cuestiones relacionadas