Armadilhas da identificação de um dispositivo Android


Alguns desenvolvedores podem precisar identificar os dispositivos Android de seus usuários. Na maioria das vezes, isso é feito não para reconhecer o dispositivo, mas para determinar a instalação específica do aplicativo. Também conheci vários casos quando necessário, se o desenvolvedor tivesse vários aplicativos e quisesse entender que eles trabalham no mesmo ambiente.

O Google diz que identificar um dispositivo é fácil. Mas estamos falando de Android :)

Este artigo se concentra em aplicativos ou bibliotecas que não desejam se conectar aos serviços do Google.

Então, vamos mergulhar nessa maravilhosa aventura de obter um identificador de dispositivo exclusivo.

Aqui vemos várias maneiras:


  • ID de publicidade
  • IMEI
  • Endereço MAC
  • Número de série
  • ID do Android

Até agora não parece ruim, parece? Existem até cinco maneiras de obter um identificador exclusivo para um dispositivo Android. Tenho certeza de que, se você ainda mexer na rede, certamente encontrará mais algumas maneiras, mas aqui fiz as mais populares. Então vamos em ordem.

ID de publicidade


Este é um identificador de publicidade exclusivo fornecido pelos serviços do Google Play. É necessário que a publicidade funcione, para que o Google entenda quais anúncios podem ser exibidos para um usuário específico e quais já foram exibidos usando os banners de publicidade incorporados aos aplicativos. E isso também significa que você perderá esse identificador se o aplicativo for baixado, por exemplo, da Amazon e, além disso, será necessário arrastar as bibliotecas do Google para o aplicativo.

dependencies { compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.google.android.gms:play-services:6.5.87' } 

Conclusão: não identificamos o dispositivo em todos os casos.

Mas queremos com certeza, certo? Então siga em frente.

IMEI


Este é o identificador internacional para equipamentos móveis usados ​​em telefones GSM. O número IMEI é usado pelas redes para identificar smartphones e bloquear o acesso a uma rede de dispositivos roubados ou na lista negra. Infelizmente, com o IMEI, vários problemas podem surgir:


 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { String imei = telephonyMgr.getImei(); } else { String imei = telephonyMgr.getDeviceId(); } 

Conclusão: não identificamos o dispositivo em todos os casos, e eles também podem nos enganar: C

Endereço MAC


Não é 100% confiável. O próprio Google fala sobre isso , mas, infelizmente, eu realmente conheci alguns aplicativos que dependiam do endereço MAC do dispositivo. Não faça isso.
Pode ser possível recuperar um endereço Mac a partir do hardware WiFi ou Bluetooth de um dispositivo. Não recomendamos o uso como um identificador exclusivo. Para começar, nem todos os dispositivos têm Wi-Fi. Além disso, se o Wi-Fi não estiver ativado, o hardware poderá não informar o endereço do Mac.

Número de série


É considerado um número de série único do dispositivo, que permanece com ele até o "final". Você pode obtê-lo desta maneira:

 //Until Android 7.1 (SDK 25) Build.SERIAL //Android 8 (SDK 26) ++ Build.getSerial() 

E agora sobre os problemas. Primeiro, para obter um número de série, você precisará solicitar permissão ao usuário READ_PHONE_STATE , e o usuário poderá recusar. Em segundo lugar, o número de série pode ser alterado .

Conclusão: não identificamos o dispositivo em todos os casos, devemos solicitar permissão do usuário, que os trapaceia e ainda pode nos enganar.

ID do Android


Aqui está! - devemos gritar. - A solução para todos os nossos problemas!

O Android ID também é um identificador de dispositivo exclusivo. É um valor de 64 bits que é gerado e armazenado durante a primeira inicialização do dispositivo.
Você pode obtê-lo assim:

 Secure.getString(getContentResolver(), Secure.ANDROID_ID); 

Parece que uma linha tão curta nos salva de uma dor de cabeça na identificação do dispositivo. Até os caras do Google usam o Android_ID para LVL no exemplo.

E aqui nossas esperanças estão desmoronando e nada será o mesmo. Após a atualização para o Android 8, o Android_ID tornou -se exclusivo para cada aplicativo instalado. Além disso, o Google se preocupa conosco, de modo que os aplicativos que foram instalados antes da atualização permanecerão com os mesmos identificadores que o Google salva usando um serviço especialmente criado para isso. Mas se o aplicativo for desinstalado e reinstalado, o Android_ID será diferente. Para impedir que isso aconteça, você precisa usar KeyValueBackup.


Mas esse serviço de backup precisa ser registrado, também o nome do pacote a ser especificado. Além disso, a documentação diz que isso pode não funcionar por qualquer motivo. E quem é o culpado? Ninguém, assim mesmo.

Conclusão geral


Se você possui um bom back-end, basta coletar a transmissão do dispositivo (aplicativos, serviços instalados, quaisquer dados que você possa obter sobre o dispositivo) e comparar os parâmetros já existentes, considere aceitável uma porcentagem de alterações.

PS: Publico todas as coleções como sempre no canal de telegrama @paradisecurity , e o link pode ser encontrado no meu perfil ou na pesquisa de telegramas por nome.

Feliz :)

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


All Articles