¿Cómo recuerdan algunas aplicaciones de Android que no es la primera vez que se instalan?

Algunas aplicaciones de Android pueden recordar si se instalaron anteriormente en el mismo dispositivo. Suponga que desinstaló una aplicación hace un año. Después de un año, si vuelve a instalar esa misma aplicación, esa aplicación podrá reconocer que se instaló antes en el mismo teléfono.

Las aplicaciones en línea utilizan esta técnica para prohibir permanentemente a los usuarios que vuelvan a crear una nueva cuenta si se les prohibió usar el servicio una vez. Cuando dichos usuarios crean una nueva cuenta reinstalando la aplicación más tarde, estas aplicaciones pueden detectar su "presencia por primera vez" y enviar esta información a los servidores para que el usuario pueda ser prohibido nuevamente.

¿Cómo lo hacen incluso después de borrar sus datos y desinstalarlos por completo? Significa que guardan algún archivo en algún lugar del teléfono, que no se elimina después de la desinstalación. ¿Cómo desactivo esta detección?

¿Por qué desea eliminar esta información? ¿Los creadores de aplicaciones tienen derechos? No espero que este sea un comentario popular, pero considere si se ha tomado el tiempo y la molestia de crear una aplicación.
@S.Mitchell Today Algunos desarrolladores de aplicaciones y grandes empresas de publicidad intentan acceder a detalles innecesarios de usuarios inocentes. No solo quieren la dirección MAC, sino que también quieren saber su SSID wifi. Google les dio una buena lección al implementar qué permisos no desea otorgarles en Android 6. Pero los anunciantes no se detienen aquí, siempre encuentran un manera de moverse. Quiero asegurar este sistema de privacidad.
@S.Mitchell Hola Mitchell. Puede que me estés juzgando mal por mi pregunta. No, no estoy prohibido en ningún servicio social o en línea y tampoco en el intercambio de pilas si lo dudas. Pero para mí conocer es aprender. No estoy haciendo ningún trabajo práctico con las respuestas que he recibido aquí. Pero definitivamente ayudan a uno a saber cómo funcionan las cosas. No se puede crear seguridad antipiratería si no se sabe cómo piratear. La misma analogía está aquí. Si no puedo aprender cómo funcionan las aplicaciones, no tiene sentido que pueda crear una.
@S.Mitchell: Do app creators have rights?En realidad, en mi teléfono, no lo hacen. Podría permitirles ejecutar su código y almacenar sus datos en mi teléfono, pero no tienen derecho y yo me reservo el derecho de revocar ambos privilegios a mi discreción.
@S.Mitchell, alentaría las respuestas a todas las preguntas, independientemente de por qué cree que existen. ¡Qué bueno que no manejas este sitio!

Respuestas (5)

Hay varias formas de identificar un dispositivo único o su usuario:

  1. Mantenga un archivo en algún directorio (no predeterminado) : Ya dijo esto; las aplicaciones a menudo pueden escribir en el almacenamiento interno de un dispositivo. Este método es fácil, funciona sin conexión y no es el más fácil de detectar (coloque el archivo en algún directorio similar al sistema y nadie se molestará en eliminarlo).
  2. Realice un seguimiento de un dispositivo único ANDROID_ID(único por instalación nueva) : este método es simple pero requiere acceso a Internet, al menos en el primer uso. No es muy intrusivo y no persiste en caso de un restablecimiento de fábrica. También es único por usuario. Consulte esta información .
  3. IMEI : muy intrusivo, inalterable pero requiere un dispositivo compatible con SIM. El IMEI es único para cada dispositivo, no se puede cambiar y no sigue al usuario, lo que significa que si vende su dispositivo, el nuevo propietario será recibido con una pantalla que le indicará que la aplicación ya estaba en el teléfono.
  4. Seguir la cuenta de Google de un usuario : esto es más o menos lo mismo que el ANDROID_IDenfoque, pero requiere un permiso explícito (Android 6.0+) del usuario para acceder. Las aplicaciones que aprovechan el ecosistema de cuentas de Google (p. ej., puntuaciones más altas y logros en juegos) pueden seguir a un usuario específico y obtener más información además de si la aplicación se instaló o no.

2, 3 y 4 requieren una conexión de red y un servidor del lado del desarrollador.

Puedo administrar 2, 3 y 4 partes usando Xprivacy. Voy a engañar a cada uno de ellos. Pero el primero, que no es fácil de detectar. ¿Hay alguna forma en que pueda detectar esta vulnerabilidad?
No es una vulnerabilidad, solo una característica abusada. Al igual que las aplicaciones que guardan archivos en el registro. No hay mucho que pueda hacer además de revisar todos los directorios en el almacenamiento interno de su teléfono y buscar archivos sospechosos.
Pasar por todos los directorios será imposible porque nunca sabrá qué nombre de archivo está buscando, cuál es su extensión de archivo, tamaño de archivo. E incluso si encuentra uno y lo elimina y luego se da cuenta de que ese archivo no era el archivo real que está buscando, terminará con un bloqueo del sistema. Espero que haya una aplicación de administrador que pueda detectar si el archivo está asociado a qué aplicación.
Buena suerte para encontrar/crear esta aplicación. El sistema no puede fallar debido a que falta algún archivo en el almacenamiento interno. Generalmente, las aplicaciones tienden a usar los mismos marcos que usan los mismos archivos pero, como ya señaló, esos archivos son imposibles de encontrar (no siempre, pero la mayoría de las veces). Los archivos que contienen cosas como "id", "usuario" o similares a menudo contienen dicha identificación y esas identificaciones generalmente se usan para publicidad.
@S.Mitchell No, nunca me prohibieron ningún servicio en línea, aplicaciones web ni juegos en línea. Pero creo que saber cómo funciona el sistema detrás de su interfaz es el paso correcto para avanzar en el desarrollo de Android.
@ user334283 "nunca se sabe qué nombre de archivo está buscando". esto es falso Android, al ser un sistema operativo Linux, tiene la straceutilidad que se puede usar para realizar un seguimiento de todas las llamadas del sistema. Por lo tanto, debe iniciar su aplicación stracey verificar todas las llamadas del sistema relacionadas con los archivos en el dispositivo y detectará todos los archivos leídos / verificados por la aplicación. Claro: probablemente bastante difícil de hacer en el teléfono inteligente, pero definitivamente posible .
@Bakuriu Thnx por agregar esto. Puedo encontrar la publicación relacionada del comando strace para Android en el sitio nativo. stackoverflow.com/q/12166917/6538535 stackoverflow.com/q/16247565/6538535
Otra forma: también existe el servicio de copia de seguridad de Android, ¿eso no restaura la configuración de las aplicaciones instaladas previamente (al menos, si está habilitado)?
@derobert Android 6 permite esto: stackoverflow.com/a/36471154/6538535
@Bakuriu: No es nada difícil si tiene un teléfono rooteado y un servidor ssh en el teléfono. SSHDroid facilita la instalación de uno que se ejecute como root si es posible.

No está conectado al almacenamiento, sino a la nube. Así es como lo recuerda a pesar de que borró sus datos. Para desactivar esto, vaya a la aplicación de configuración de su dispositivo, toque cuentas de Google en personal (toque la cuenta que desee si tiene varias cuentas), luego apague las aplicaciones que no desea sincronizar automáticamente.

La sincronización automática no es la raíz del problema. Los servidores de terceros se aseguran de que su aplicación sea capaz de recopilar su dirección MAC, IMEI, ID de dispositivo, ID de publicidad y almacenarlos en servidores para detectar el dispositivo nuevamente en el futuro. La falsificación de estos detalles mantendrá su privacidad, pero si una aplicación está escribiendo "entradas de registro" como en Windows, el problema será indetectable.

La respuesta de GiantTree lo cubre mejor, pero hay otro punto en el que pensar. Claramente sería un " patrón oscuro ", pero esta identificación también podría realizarse mediante la toma de huellas dactilares de ciertos datos del usuario; esto puede verse como una variante de su primer punto ("mantener un archivo"), pero sería más difícil de detectar y menos conveniente. para evitar.

La resiliencia dependerá de los datos elegidos. El método más obvio sería mirar los detalles de contacto y usar algún tipo de huella digital de esto; una alternativa podría ser el uso de marcas de tiempo de fotos y otros metadatos. Claramente, estos cambian con el tiempo, por lo que cualquiera que sea el método que se use, aún debe dar una respuesta cercana después de la modificación (por lo que difiere de una función hash tradicional). Tampoco hay garantía de que un usuario simplemente no borre los datos rastreados, pero en muchos casos la gente preferirá no hacerlo.

Es posible que desee observar las huellas dactilares del navegador para tener una idea de cómo funciona esto, aunque va a ser algo diferente porque el hardware del teléfono suele ser más uniforme que el hardware de la PC. Dicho esto, la adición de ciertos detalles del teléfono puede ayudar a reducir un poco la huella digital.

Donde este enfoque falla en particular es si un usuario cambia de teléfono y lleva sus datos con él a un nuevo teléfono; en este caso (a menos que los detalles del teléfono entren en la huella digital) el nuevo teléfono podría detectarse como si ya tuviera una instalación, como se hace la pregunta. Sin embargo, parece bastante probable que en un escenario en el que una aplicación intente prohibir a un usuario, este podría ser el resultado deseado (en lugar de prohibir el teléfono específico en sí)

Tenga en cuenta: de ninguna manera estoy diciendo que esto sea correcto o "bueno" como una forma de operar si está escribiendo aplicaciones, pero parece razonable discutirlo, ya que solo a través de la discusión las personas descubrirán si están lo suficientemente preocupado como para hacer algo al respecto y lo que podría ser.

Hay una clase SharedPreferences, https://developer.android.com/reference/android/content/SharedPreferences.html , que algunas aplicaciones usan para almacenar datos de preferencias. Estos datos no se eliminan cuando se desinstala la aplicación. Si la aplicación se reinstala más tarde, las claves de SharedPreferences guardadas previamente seguirán estando disponibles.

SharedPreferencesen realidad se eliminan cuando se desinstala la aplicación. Hay formas para que los desarrolladores configuren copias de seguridad, pero de forma predeterminada se eliminan al desinstalar. (Fuente: como desarrollador, desinstalo mis aplicaciones para borrar las preferencias. Consulte también: stackoverflow.com/a/9815641/1438733 )

Existe otra posibilidad: el uso de cookies persistentes con un "tiempo de caducidad" muy grande. Supongo que así es como varias aplicaciones del mismo desarrollador solían compartir credenciales tradicionalmente, cuando las credenciales almacenadas a través de la función de cuentas no eran tan abiertas/conocidas por el público.