Como alguns aplicativos Android lembram que essa não é a primeira vez que estão sendo instalados?

33

Alguns aplicativos para Android lembram se foram instalados no mesmo dispositivo anteriormente. Suponha que você tenha desinstalado um aplicativo há um ano. Após um ano, se você instalar o mesmo aplicativo novamente, ele poderá reconhecer que ele foi instalado anteriormente no mesmo telefone.

Essa técnica é usada pelos aplicativos on-line para banir permanentemente os usuários de nunca criarem uma nova conta novamente, caso tenham sido banidos do uso do serviço uma vez. Quando esses usuários criam uma nova conta reinstalando o aplicativo posteriormente, esses aplicativos conseguem detectar sua "presença inicial" e enviar essas informações aos servidores para que o usuário possa ser banido novamente.

Como eles fazem isso mesmo depois de limpar seus dados e desinstalá-los completamente? Isso significa que eles mantêm algum arquivo em algum lugar do telefone, que não é excluído após a desinstalação. Como desativo essa detecção?

desfigurar
fonte
Por que você deseja excluir essas informações? Os criadores de aplicativos têm direitos? Não espero que seja um comentário popular, mas considere se você gastou tempo e dificuldade para criar um aplicativo.
S. Mitchell
6
@ S.Mitchell Today Alguns desenvolvedores de aplicativos e grandes empresas de publicidade tentam acessar detalhes desnecessários de usuários inocentes. Não apenas eles querem o endereço MAC, mas também querem saber o seu SSID wifi. O Google deu uma boa lição ao implementar quais permissões você não deseja conceder no android 6. Mas os anunciantes não param por aqui, sempre encontram um maneira de se locomover. Eu quero garantir esse sistema de privacidade.
defalt
1
@ S.Mitchell Olá Mitchell. Você pode estar me julgando errado por causa da minha pergunta. Não, eu não sou banido de nenhum serviço social ou online e nem da troca de pilhas, se você duvida disso. Mas para mim saber é aprender. Não estou fazendo nenhum trabalho prático com as respostas que recebi aqui. Mas definitivamente eles ajudam a saber como as coisas funcionam. Não se pode criar segurança anti-hacking se não se sabe como invadir. A mesma analogia está aqui. Se eu não conseguir aprender como os aplicativos funcionam, não há sentido em poder fazer um.
Defalt
7
@ S.Mitchell: Do app creators have rights?Na verdade, no meu telefone, eles não. Posso deixá- los executar seu código e armazenar seus dados no meu telefone, mas eles não têm o direito e eu me reservo o direito de revogar os dois privilégios, a meu critério.
dotancohen 26/09/16
2
@ S.Mitchell, eu incentivaria respostas a todas as perguntas, independentemente do motivo que você acha que elas existem. Ainda bem que você não administra este site!
Peça desculpas e reinsira Monica

Respostas:

33

Existem várias maneiras de identificar um dispositivo exclusivo ou seu usuário:

  1. Mantenha um arquivo em algum diretório (não padrão) : você já disse isso; os aplicativos geralmente podem gravar no armazenamento interno de um dispositivo. Esse método é fácil, funciona offline e não é o mais fácil de localizar (coloque o arquivo em algum diretório semelhante ao sistema e ninguém se incomodará em excluí-lo).
  2. Mantenha o controle de um dispositivo único ANDROID_ID(único por instalação nova) : esse método é simples, mas requer acesso à Internet, pelo menos no primeiro uso. Não é muito invasivo e não persiste no caso de uma redefinição de fábrica. Também é único por usuário. Veja esta informação .
  3. IMEI : muito invasivo, imutável, mas requer um dispositivo compatível com SIM. O IMEI é exclusivo para cada dispositivo, não pode ser alterado e não segue o usuário, o que significa que, se você vender o dispositivo, o novo proprietário será recebido com uma tela informando que o aplicativo já estava no telefone.
  4. Siga a conta do Google de um usuário : é praticamente a mesma da ANDROID_IDabordagem, mas requer permissão explícita (Android 6.0 ou superior) do usuário para acessar. Os aplicativos que tiram proveito do ecossistema da conta do Google (por exemplo, recordes e conquistas em jogos) podem, portanto, seguir um usuário específico e obter mais informações do que se o aplicativo foi instalado ou não.

2, 3 e 4 requerem uma conexão de rede e um servidor ao lado do desenvolvedor.

GiantTree
fonte
Eu posso gerenciar 2,3 e 4 parte usando o Xprivacy. Vou falsificar cada um deles. Mas o primeiro, isso não é fácil de detectar. Existe alguma maneira de detectar essa vulnerabilidade?
defalt
3
Não é uma vulnerabilidade, apenas um recurso abusado. Muito parecido com aplicativos que mantêm arquivos no registro. Não há muito o que fazer além de procurar em todos os diretórios do armazenamento interno do telefone e procurar arquivos suspeitos.
GiantTree 25/09/16
1
Boa sorte em encontrar / criar este aplicativo. O sistema não pode falhar por causa de algum arquivo ausente no armazenamento interno. Geralmente, os aplicativos tendem a usar as mesmas estruturas que usam os mesmos arquivos, mas, como você já apontou, é impossível encontrar esses arquivos (nem sempre, mas na maioria das vezes). Arquivos que contêm itens como "id", "usuário" ou similar geralmente contêm esse ID e esses IDs são geralmente usados ​​para publicidade.
GiantTree 25/09/16
2
@ S.Mitchell Não, nunca fui banido de nenhum serviço online, aplicativo da web e jogos online. Mas acredito que saber como o sistema funciona por trás de sua interface é o passo certo para avançar no desenvolvimento do Android.
Defalt
8
@ user334283 "nunca sabe qual nome de arquivo você está procurando". Isto é falso. O Android, sendo um sistema operacional Linux, possui o straceutilitário que pode ser usado para acompanhar todas as chamadas do sistema. Portanto, você deve iniciar o aplicativo usando stracee verificar todas as chamadas do sistema relacionadas aos arquivos no dispositivo e identificará todos os arquivos lidos / verificados quanto à existência do aplicativo. Claro: provavelmente muito difícil de fazer no smartphone, mas definitivamente possível .
Bakuriu 26/09/16
2

Não está conectado ao armazenamento, mas à nuvem. É assim que ele se lembra, mesmo que você tenha excluído seus dados. Para desativar isso, acesse o aplicativo de configurações do dispositivo, toque em contas google em pessoal (toque na conta que você deseja se tiver várias contas) e depois desative os aplicativos que não deseja sincronizar automaticamente.

Devin Ersoy
fonte
A sincronização automática não é o problema raiz. Servidores de terceiros garantem que o aplicativo seja capaz de coletar seu endereço MAC, IMEI, ID do dispositivo, ID de publicidade e armazená-lo nos servidores para detectar o dispositivo novamente no futuro. A falsificação desses detalhes manterá sua privacidade, mas se um aplicativo estiver escrevendo "entradas do Registro", como no problema do Windows, será indetectável.
Defalt 25/09
2

A resposta da GiantTree cobre melhor, mas há outro ponto em que pensar. Seria claramente um " padrão escuro ", mas essa identificação também poderia ser feita através de impressão digital de certos dados do usuário - isso pode ser visto como uma variante do primeiro ponto ("manter um arquivo"), mas seria mais difícil de detectar e menos conveniente evitar.

A resiliência disso dependeria dos dados escolhidos. O método mais óbvio seria olhar para detalhes de contato e usar alguma forma de impressão digital disso; uma alternativa pode ser o uso de carimbos de data e hora da foto e outros metadados. Claramente, essas alterações são alteradas ao longo do tempo, portanto, qualquer que seja o método usado, ainda é necessário fornecer uma resposta próxima após a modificação (por isso difere da função tradicional de hash). Também não há garantia de que um usuário não limpe simplesmente os dados rastreados, mas em muitos casos as pessoas preferem não fazer isso.

Você pode examinar as impressões digitais do navegador para ter uma idéia de como isso funciona, mesmo que seja um pouco diferente porque o hardware do telefone é normalmente mais uniforme que o hardware do PC. Dito isto, a adição de certos detalhes do telefone pode ajudar a diminuir um pouco a impressão digital.

Onde essa abordagem é mais complicada é se um usuário alternar telefones e levar seus detalhes com eles para um novo telefone - nesse caso (a menos que os detalhes do telefone estejam entrando na impressão digital), o novo telefone poderá ser detectado como já tendo uma instalação, como a pergunta. No entanto, parece bastante provável que, em um cenário em que um aplicativo esteja tentando banir um usuário, esse possa realmente ser o resultado desejado (em vez de banir o telefone específico)

Observe: de nenhuma maneira estou dizendo que isso é correto ou "bom" como uma maneira de operar se você estiver escrevendo aplicativos, mas parece razoável discuti-lo, pois é somente através da discussão que as pessoas descobrirão se estão preocupado o suficiente para fazer algo sobre isso e o que pode ser.

Neil
fonte
1

Há uma classe SharedPreferences - https://developer.android.com/reference/android/content/SharedPreferences.html - que alguns aplicativos usam para armazenar dados de preferência. Esses dados não são excluídos quando o aplicativo é desinstalado. Se o aplicativo for reinstalado posteriormente, quaisquer chaves SharedPreferences salvas anteriormente ainda estarão disponíveis.

David Bennett
fonte
6
SharedPreferencessão realmente excluídos quando o aplicativo é desinstalado. Existem maneiras de os desenvolvedores configurarem backups, mas por padrão eles são removidos na desinstalação. (Fonte: Como um desenvolvedor, posso desinstalar meus apps para limpar as preferências Veja também:. Stackoverflow.com/a/9815641/1438733 )
Eric
1

Há outra possibilidade - o uso de cookies persistentes com um "tempo para expirar" muito grande. Eu acho que é assim que vários aplicativos do mesmo desenvolvedor costumavam compartilhar credenciais tradicionalmente, quando as credenciais armazenadas pelo recurso de contas não eram tão abertas / conhecidas do público.

computerfreak
fonte