Как некоторые приложения для Android запоминают, что это не первый раз, когда они устанавливаются?

33

Некоторые приложения для Android могут помнить, были ли они установлены на том же устройстве ранее. Предположим, вы удалили приложение год назад. Через год, если вы снова установите это же приложение, оно сможет распознать, что оно было установлено ранее на том же телефоне.

Этот метод используется онлайн-приложениями, чтобы навсегда запретить пользователям когда-либо снова создавать новую учетную запись, если им было запрещено использовать службу один раз. Когда такие пользователи создают новую учетную запись, переустанавливая приложение позже, эти приложения могут обнаружить свое «первое присутствие» и отправить эту информацию на серверы, чтобы пользователя можно было снова заблокировать.

Как они это делают даже после очистки их данных и их полной деинсталляции? Это означает, что они хранят какой-то файл в телефоне, который не удаляется после удаления. Как отключить это обнаружение?

defalt
источник
Почему вы хотите удалить эту информацию? У создателей приложений есть права? Я не ожидаю, что это будет популярный комментарий, но подумайте, потратили ли вы время и усилия на создание приложения.
С. Митчелл
6
@ S.Mitchell Today Некоторые разработчики приложений и крупные рекламные компании пытаются получить доступ к ненужным деталям невинных пользователей. Мало того, что они хотят MAC-адрес, но они также хотят знать ваш Wi-Fi SSID. Google дал им хороший урок, реализовав, какие разрешения вы не хотите давать им в Android 6. Но рекламодатели не останавливаются здесь, они всегда находят способ обойти. Я хочу обеспечить эту систему конфиденциальности.
дефолт
1
@ С.Митчелл Привет Митчелл. Вы можете судить меня неправильно из-за моего вопроса. Нет, я не заблокирован ни в социальных сетях, ни в онлайн-сервисах, ни в обмене на стек, если вы сомневаетесь Но для меня знание - это обучение. Я не занимаюсь практической работой с ответами, которые я получил здесь. Но определенно они помогают понять, как все работает. Нельзя создать защиту от взлома, если не знаешь, как взломать. Та же аналогия здесь. Если я не могу узнать, как работают приложения, нет смысла делать это.
defalt
7
@ S.Mitchell: Do app creators have rights?На самом деле, на моем телефоне они не. Я мог бы позволить им запускать свой код и хранить свои данные на моем телефоне, но они не имеют права, и я оставляю за собой право отменить обе привилегии по своему усмотрению.
dotancohen
2
@ S.Mitchell, я бы посоветовал ответить на все вопросы, независимо от того, почему вы думаете, что они существуют. хорошо, что вы не запускаете этот сайт!
Извиниться и восстановить Монику

Ответы:

33

Существует несколько способов идентифицировать уникальное устройство или его пользователя:

  1. Храните файл в некотором (не по умолчанию) каталоге : вы уже сказали это; приложения часто могут записывать во внутреннее хранилище устройства. Этот метод прост, работает в автономном режиме и его не так просто обнаружить (поместите файл в какой - то системный каталог, и никто не потрудится удалить его).
  2. Отслеживать уникальные устройства ANDROID_ID(уникальные для каждой новой установки) : этот метод прост, но требует доступа в Интернет, по крайней мере, при первом использовании. Это не очень навязчиво и не сохраняется в случае сброса настроек. Это также уникально для каждого пользователя. Смотрите эту информацию .
  3. IMEI : очень навязчивый, неизменный, но требует устройства с поддержкой SIM-карты. IMEI уникален для каждого устройства, не может быть изменен и не отслеживает пользователя. Это означает, что, если вы продадите свое устройство, нового владельца приветствует экран, сообщающий ему, что приложение уже было на телефоне.
  4. Следите за учетной записью пользователя Google : это почти то же самое, что и ANDROID_IDподход, но требует явного разрешения (Android 6.0+) от пользователя для доступа. Таким образом, приложения, использующие преимущества экосистемы учетных записей Google (например, рекорды и достижения в играх), могут следовать за конкретным пользователем и получать больше информации, чем просто было установлено приложение или нет.

2, 3 и 4 требуется сетевое соединение и сервер на стороне разработчика.

GiantTree
источник
Я могу управлять 2,3 и 4-й частью, используя Xprivacy. Я буду обманывать каждого из них. Но первое, это не так легко определить. Могу ли я обнаружить эту уязвимость?
дефолт
3
Это не уязвимость, а просто злоупотребленная функция. Очень похоже на приложения, хранящие файлы в реестре. Вы ничего не можете сделать, кроме как просмотреть все каталоги на внутренней памяти телефона и найти подозрительные файлы.
GiantTree
1
Удачи в поиске / создании этого приложения. Система не может аварийно завершить работу из-за отсутствия файла во внутренней памяти. Как правило, приложения используют те же фреймворки, которые используют одни и те же файлы, но, как вы уже отметили, эти файлы невозможно найти (не всегда, но в большинстве случаев). Файлы, содержащие такие вещи, как «id», «user» или аналогичные, часто содержат такой идентификатор, и эти идентификаторы обычно используются для рекламы.
GiantTree
2
@ S.Mitchell Нет. Мне никогда не запрещали какие-либо онлайн-сервисы, веб-приложения и онлайн-игры. Но я считаю, что знание того, как система работает за ее интерфейсом, является правильным шагом для развития Android.
дефалт
8
@ user334283 "никогда не знаешь, какое имя файла ты ищешь". Это неверно Android, как ОС Linux, имеет straceутилиту, которую можно использовать для отслеживания всех системных вызовов. Поэтому вы должны запустить свое приложение, используя straceи проверять все системные вызовы, связанные с файлами на устройстве, и вы обнаружите все файлы, прочитанные / проверенные на наличие приложением. Конечно: вероятно, это довольно сложно сделать на смартфоне, но определенно возможно .
Бакуриу
2

Он связан не с хранилищем, а с облаком. Вот как он запоминает, даже если вы удалили свои данные. Чтобы отключить это, перейдите в приложение настроек вашего устройства, нажмите учетные записи Google в разделе «Личные» (нажмите учетную запись, которую вы хотите, если у вас несколько учетных записей), затем отключите приложения, которые вы не хотите автоматически синхронизировать.

Девин Эрсой
источник
Автосинхронизация не является основной проблемой. Сторонние серверы должны убедиться, что их приложение способно собирать ваш MAC-адрес, IMEI, идентификатор устройства, рекламный идентификатор и сохранять их на серверах для повторного обнаружения устройства в будущем. Подмена этих данных сохранит вашу конфиденциальность, но если приложение пишет «записи реестра», как в Windows, проблема не будет обнаружена.
дефолт
2

Ответ GiantTree охватывает это лучше всего, но есть еще один момент, о котором стоит подумать. Очевидно, это был бы « темный шаблон », но эту идентификацию можно также сделать путем снятия отпечатков пальцев с определенных пользовательских данных - это можно рассматривать как вариант по его первому пункту («сохранить файл»), но его будет сложнее обнаружить и менее удобно избегать.

Насколько это устойчиво, зависит от выбранных данных. Наиболее очевидный метод - просмотр контактных данных и использование какой-либо формы отпечатка пальца; альтернативой может быть использование временных меток фотографий и других метаданных. Ясно, что они со временем меняются, поэтому любой использованный метод должен был дать точный ответ после модификации (так что он отличается от традиционной хеш-функции). Также нет гарантии, что пользователь не просто удалит отслеживаемые данные, но во многих случаях люди предпочтут этого не делать.

Возможно, вы захотите взглянуть на дактилоскопию браузера, чтобы понять, как это работает, хотя это будет несколько иначе, потому что аппаратное обеспечение телефона обычно более однородно, чем аппаратное обеспечение ПК. Тем не менее, добавление определенных деталей телефона может помочь немного сузить отпечаток пальца.

В частности, этот подход не работает, если пользователь переключает телефоны и переносит их данные на новый телефон - в этом случае (если данные телефона не входят в отпечаток пальца) новый телефон может быть обнаружен как уже имеющий установку, как вопрос задан. Однако вполне вероятно, что в сценарии, когда приложение пытается заблокировать пользователя, это может быть желаемым результатом (а не запретом конкретного телефона).

Пожалуйста, обратите внимание: я ни в коем случае не говорю, что это правильно или «хорошо» как способ работы, если вы пишете приложения, но кажется разумным обсудить это, поскольку только в ходе обсуждения люди выяснят, являются ли они достаточно обеспокоен, чтобы что-то с этим сделать и что это может быть.

Нил
источник
1

Существует класс SharedPreferences - https://developer.android.com/reference/android/content/SharedPreferences.html, который некоторые приложения используют для хранения данных о предпочтениях. Эти данные не удаляются при удалении приложения. Если приложение позднее переустанавливается, все ранее сохраненные ключи SharedPreferences по-прежнему доступны для него.

Дэвид Беннетт
источник
6
SharedPreferencesна самом деле удаляются при удалении приложения. Разработчики могут создавать резервные копии, но по умолчанию они удаляются при удалении. (Источник: как разработчик, я удаляю свои приложения, чтобы очистить настройки. См. Также: stackoverflow.com/a/9815641/1438733 )
Эрик
1

Есть и другая возможность - использовать постоянные куки с очень большим «сроком действия». Я думаю, именно так несколько приложений одного и того же разработчика традиционно делятся учетными данными, когда сохраненные учетные данные с помощью функции учетных записей не были настолько открыты / известны общественности.

computingfreak
источник