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
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.
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.
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
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
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.
@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 sobrestrace
esmensaje 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.
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
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
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.
- 1. ¿Cómo se escucha en múltiples direcciones IP?
- 2. ¿Cómo se escucha el teclado abrir/cerrar en Javascript/Sencha?
- 3. Cómo agregar escucha de acción que escucha varios botones
- 4. ¿Cómo escucha Symfony al _switch_user?
- 5. ¿Cómo obtener puertos en los que se escucha un proceso?
- 6. ¿Cómo se escucha presionar Ctrl-P en JavaScript?
- 7. ¿Escucha el botón Hecho en EditText?
- 8. escucha() ignorando el valor de retraso acumulado
- 9. ¿Escucha el cambio de contenido del portapapeles?
- 10. ¿Cómo puedo obtener el puerto que escucha un servicio WCF?
- 11. socket escucha el parámetro de backlog, cómo determinar este valor?
- 12. cómo cambiar el puerto de escucha Postgresql en Windows?
- 13. cómo funciona la escucha de un socket
- 14. Cómo resolver el error de escucha ¿Iniciar cuando se implementa una aplicación web en Tomcat 5.5?
- 15. estado de escucha WIFI
- 16. ¿Escucha de cambio de volumen?
- 17. AS3 - Escucha de eventos que solo se activa una vez
- 18. ¿Cómo se escucha que un elemento HTML se mueva en JavaScript?
- 19. C#: Oído de escucha UDP
- 20. Tomcat se inicia sin errores pero no escucha en 8080
- 21. ExtJS Escucha de carga de la tienda no se invoca
- 22. C# escucha UDP Async SocketException
- 23. Escucha de directorio en C#
- 24. recibir paquetes transmitidos cuando se escucha a un puerto específico
- 25. Escucha teclado USB con Python
- 26. jQuery botón de entrada clic en el agente de escucha
- 27. ¿Por qué el cliente DHCP escucha en el puerto 68?
- 28. Java - Escucha cambio de variable
- 29. Escucha DependencyProperty evento modificado y obtener el valor antiguo
- 30. poniendo escucha "On Change" en jFormattedTextField
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
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
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