ADB vs Spy Cam & Mic

¿Cómo verificar si alguna aplicación en el teléfono inteligente Android tiene un informe de foto o video, aunque nunca lo necesita? La siguiente opción no es perfecta en absoluto, pero no requiere un firmware "raíz" o personalizado.

PD: agregué una descripción del monitoreo del acceso de las aplicaciones al micrófono al artículo.

Lo que necesitas instalar:
  • ADB ( Android Debug Bridge ) (por ejemplo, como parte de las herramientas de la plataforma Android SDK ; puede descargarlo aquí );
  • controlador para el teléfono (si es necesario, por ejemplo, el controlador USB de Google se puede descargar aquí ).

Activamos el modo de depuración USB en el teléfono y conectamos el teléfono inteligente al puerto USB de la computadora, y debe seleccionar el modo de conexión USB , que no sea "Solo carga".
Texto oculto
En el teléfono inteligente "Administrador de dispositivos" se muestra, por ejemplo, de la siguiente manera:
en el modo "Foto" o "Archivos"

en modo de unidad USB

Y así, en la salida del comando lsusb :


Abra la línea de comando en el directorio en el que están instaladas las "herramientas".
Verifique que la conexión sea exitosa (se muestra el número de serie del teléfono inteligente conectado):
adb devices 
(para ventanas )

Para Linux, el comando se vería así:
 ./adb devices 

Si la computadora no está autorizada para su uso con este teléfono inteligente (para Android 4.2.2 y posterior), aparecerá el mensaje de advertencia " no autorizado " junto al número de serie.
Para la autorización, debe confirmar el permiso de depuración a través de USB en el teléfono inteligente.
Texto oculto
En Linux , puede aparecer el mensaje " sin permisos "; en mi caso, logré resolver el problema cambiando el teléfono inteligente al modo "Dispositivo de medios ( MTP )".

Inicie el shell en el dispositivo (obtenemos el mensaje "$"):
 adb shell 



Luego presentamos los siguientes símbolos "mágicos":
 while true; do ps `while ! (dumpsys media.camera | grep -E "PID") do done | grep -o "[^PID: ][0-9]*$"` | grep -o "[^S ]*$" ; date; sleep 1; done 



Versión mejorada, eliminando la salida "NOMBRE" y líneas vacías:
 while true; do ps `while ! (dumpsys media.camera | grep -E "PID") do done | grep -o "[^PID: ][0-9]*$"` | grep -o "[^S ]*$" | grep -v "NAME" | grep .; date; sleep 1; done 


Y no pasa nada :-) Hasta que algo decide tomar una pequeña foto :-)

El conjunto de caracteres "mágico" indicado comienza a monitorear el acceso al servicio de la cámara - media.camera lo más rápido posible (este servicio es implementado por la biblioteca libcameraservice.so ). Si la cámara no está activa, dumpsys muestra algo como esto:

Y si se necesita una cámara, entonces esto aparece:


grep comprueba la presencia de un " PID " y, si existe esta cadena, cortan el número de proceso de la cadena y lo envían al comando ps , que muestra datos sobre este proceso, y otro grep corta su nombre. Después de detectar la actividad de la cámara, haga una pausa por un segundo para que los mensajes no se derramen con demasiada frecuencia. Para interrumpir el comando, use la combinación de teclas CTRL-C y para salir del shell: CTRL-D .

El ejemplo más simple es que después de iniciar la aplicación de teléfono inteligente normal para la toma de fotos / videos, los mensajes con el nombre del proceso y la fecha / hora comienzan a llegar a intervalos de 1 segundo:

"

Pero hay aplicaciones más astutas, se pueden encontrar con la palabra clave "cámara espía" (usando un truco, por ejemplo, con una vista previa de un solo píxel ( http://www.ez.ai/2014/05/exploring-limits-of-covert-data .html )). Tal creación se colapsa al comienzo de los disparos y los informes, pero los mensajes fluyen regularmente:



También verifiqué la funcionalidad del método propuesto en una aplicación que toma una sola foto al hacer clic en un botón flotante sin ninguna ventana de vista previa visible.
El guión capturó con éxito una llamada a la cámara y emitió dos mensajes con cada disparo:


Pero no hay nada que le impida implementar una funcionalidad similar en una aplicación con un nombre más inocuo ( https://www.zdnet.com/article/this-scary-android-malware-can-record-audio-video-and-steal-your- datos / ) y permisos: bueno, hay todo tipo de casos. Y la aplicación "legal" puede informar cuando lo desee (he conocido la mención de uno de esos casos). Y no es en vano que Android P haya tomado medidas para evitar que las aplicaciones en segundo plano accedan a la cámara.

El método se ha probado en los teléfonos inteligentes Huawei SCL-L01 ( Android 5.1.1) y Huawei G700-U20 ( Android 4.2.1), en otros modelos de teléfonos inteligentes el formato de salida de dumpsys puede diferir (no está estandarizado para el servicio media.camera ), lo que requerirá corrección de código .
El formato del mensaje está codificado en la biblioteca /system/lib/libcameraservice.so , por ejemplo, para el teléfono inteligente Huawei SCL-L01 :

En el comentario , una pista sobre cómo cambiar el código para trabajar con un teléfono inteligente con Android 9.
Este comentario muestra el registro de acceso a la cámara mantenido por HTC U11 .
Pero, por ejemplo, en el "antiguo" Huawei U8650 ( Android 2.3.4) dumpsys funciona bien:

Y los derechos no son suficientes para ... grep :-)


Monitoreo de acceso de micrófono

Se puede aplicar un método similar para monitorear el acceso de las aplicaciones al micrófono. En este caso, debe supervisar el servicio media.audio_flinger .
Ingresamos el comando en el "shell" (el código dado funciona en el teléfono inteligente Huawei SCL-L01 ( Android 5.1.1)):
 while true; do ps `while ! (dumpsys media.audio_flinger | grep -A20 Input| grep -A1 Client | grep yes | grep -o "[^yes ].*" | grep -o [0-9]*) do done` | grep -o "[^S ]*$" | grep -v "NAME" | grep .; date; sleep 1; done 

Si alguna aplicación graba sonido a través de un micrófono, en la salida de dumpsys media.audio_flinger hay un fragmento similar:

( Hilo de entrada - flujo de entrada, 22467 - PID del proceso de grabación de sonido).
Al grabar sonido a través de la aplicación estándar "Grabadora de voz" y la monitorización está habilitada (a través del código anterior), aparecen los siguientes mensajes:

Pero qué mensajes se vierten cuando se activa la entrada de voz del traductor de Google :

En otros teléfonos inteligentes, el formato de salida de dumpsys puede ser diferente, lo que requerirá una corrección de código.
Por ejemplo, en un teléfono inteligente Huawei G700-U20 ( Android 4.2.1):

En este caso, el código de monitoreo se verá así:
 while true; do ps `while ! (dumpsys media.audio_flinger | grep -A3 Input| grep -A1 Clien | grep -o "[^ ].*" | grep -o [0-9]*) do done` | grep -o "[^S ]*$" | grep -v "NAME" | grep .; date; sleep 1; done 

Así es como la "revivida" Alice se manifiesta en este caso:

Source: https://habr.com/ru/post/es435098/


All Articles