¿Se puede usar el permiso RECEIVE_SMS para interceptar mensajes SMS?

13

He notado que algunas aplicaciones solicitan el RECEIVE_SMSpermiso . Aquí hay dos cosas claras para mí:

  • RECEIVE_SMS permite que una aplicación "ajuste" los SMS entrantes
  • READ_SMS solo aplica a SMS ya almacenados

Como algunas de las aplicaciones solo pedían RECEIVE_SMS, pero no por ellas READ_SMS, sentí curiosidad: esto parece implicar RECEIVE_SMSque no solo está dirigido a la parte receptora, sino que la aplicación también puede hacer lo que quiera con el mensaje recibido, por ejemplo, léelo, luego tírelo en silencio (para que el usuario ni siquiera note que hay un SMS, que podría ser la forma en que los troyanos TAN actúan para ajustar identificadores para transacciones bancarias en línea).

¿Pero también sería posible que una aplicación de este tipo "interceptara" el mensaje, es decir, lo recibiera, lo leyera (y procesara su contenido de cualquier manera, por ejemplo, reenviarlo por otros medios, como a través de IP), y luego transmitirlo como si nada hubiera pasado? En otras palabras: ¿puede espiar al usuario de esta manera?

Izzy
fuente

Respuestas:

13

Sí, puede, pero solo en Android 4.3 y versiones anteriores. Esto se usa por ejemplo en Whatsapp. Cuando activa la aplicación, Whatsapp envía un SMS al número que informó, y la aplicación lo intercepta silenciosamente e informa a los servidores que ha recibido el SMS. Así es como la cuenta está vinculada a su número.

Por supuesto, esto también se puede usar en aplicaciones dañinas. Si una aplicación se registra como un receptor de SMS con la prioridad más alta, la aplicación puede escuchar los SMS entrantes, procesarlos y descartarlos sin que el usuario se dé cuenta, o reenviar al siguiente oyente de SMS con la segunda prioridad más alta.

Esto se rehizo en Android 4.4, y si entendí correctamente, solo la aplicación de SMS predeterminada tiene acceso a todos los SMS entrantes ( SMS_DELIVER_ACTION), y las otras aplicaciones con los permisos correctos solo recibirán una notificación del mensaje entrante ( SMS_RECEIVED_ACTION). Además, la SMS_RECEIVEDintención no es abortable, no se puede detener. Supongo que en Android 4.4, esto se hace para permitir que el usuario vea todos los mensajes SMS entrantes en la aplicación predeterminada.

Editar: Encontré información más útil en el Blog de desarrolladores de Android . Lo probaría más, pero mi único teléfono Android actualmente solo tiene WiFi, así que no hay SMS: /

onik
fuente
Muchas gracias por las ideas, onik! No sabía sobre esos cambios de KitKat. Con esos en su lugar, ¿entendí correctamente que, por ejemplo, WhatsApp ahora también necesitaría el READ_SMSpermiso para acceder a su "código de activación", o hacer aplicaciones con el RECEIVE_SMSpermiso "recibir una copia" ahora (excepto la aplicación de SMS predeterminada, que " recibir el original ")?
Izzy
@Izzy Tengo una pregunta sobre esto también. ¿Vería ahora el usuario estos textos de control directamente en su aplicación predeterminada ahora? ¿O sería una opción poder ver textos "consumidos", pero en realidad no aparecer en su aplicación de texto normal?
Cruncher
1
@Izzy Si entendí correctamente, las aplicaciones que no están configuradas como la aplicación de SMS predeterminada pueden acceder a un proveedor de solo lectura, lo que significa que no necesitan READ_SMSpermiso, pero no pueden editar el SMS (marcar como leído, eliminar, etc. )
onik
1
@Cruncher Los mensajes deben aparecer en su aplicación de SMS predeterminada, ya que solo esa aplicación puede escribir en el Proveedor de SMS para eliminar los mensajes.
onik
1
"Sí puede". Pero solo en Android 4.3 y versiones anteriores. Desde 4.4 SMS_RECEIVED es un intento no abortable. Por favor agregue ese hecho importante. Consulte también stackoverflow.com/questions/20021492/…
Flujo el
10

Como son las cosas

  1. Android 4.3 y versiones posteriores sin la aplicación Hangouts: cualquier aplicación con permiso SMS_RECEIVE puede leer / cancelar un SMS entrante (ala Whatsapp)
  2. Android 4.3 y versiones posteriores con Hangouts (modo SMS activado): cualquier aplicación con permiso SMS_RECEIVE puede leer pero no cancelar un SMS entrante
  3. Android 4.4 y superior: cualquier aplicación con permiso SMS_RECEIVE puede leer pero no cancelar un SMS entrante

En los tres casos, READ_SMS dará permiso a la aplicación para leer todos los SMS, no solo los nuevos SMS entrantes.

Como onik mencionó, las cosas han cambiado bastante en Android 4.4

daamitt
fuente
1
¡Gracias por señalar que Hangouts puede marcar la diferencia para Android <4.4! Supongo que corresponde a lo que onik señaló con una aplicación que se registra como un receptor de SMS con la máxima prioridad , y Hangouts está haciendo exactamente eso (para que ninguna otra aplicación pueda superarlo).
Izzy