Comment «ShareIt», «Xender», etc. peuvent-ils installer l'APK sans demander l'autorisation de «source inconnue»?

9

Normalement, si je dois installer un apk (disons depuis une carte SD), je dois activer "Sources inconnues" dans les paramètres de mon téléphone. Mais lorsque je transfère et installe un fichier APK à partir d'un autre téléphone à l'aide de "ShareIt", aucune autorisation de ce type n'est requise par mon téléphone.

Comment ShareIt peut-il contourner cette autorisation?

Néo
la source
ShareIt était-il préinstallé sur votre appareil ou l'avez-vous installé vous-même?
Izzy

Réponses:

8

J'ai fait un peu de fouille et c'est possible sans les autorisations système à partir d'API 21 https://developer.android.com/reference/android/content/pm/PackageInstaller.html .

En fait, il existe un exemple de code de Google qui montre comment le faire. https://github.com/googlesamples/android-testdpc/blob/master/app/src/main/java/com/afwsamples/testdpc/cosu/CosuUtils.java

Néo
la source
Félicitations pour avoir creusé cela, maintenant pour savoir si l'application a réellement utilisé cela ...
Andy Yan
2
@beeshyams - Pas vraiment. L'application ne peut pas effectuer une installation "silencieuse". Grâce à l'intention en attente, le "clic" explicite de l'utilisateur est requis au moment de l'installation.
Neo
1
@Neo Damn, donc j'ai juste supposé une installation silencieuse quand j'ai écrit ma réponse ... Mon mauvais.
Andy Yan
2
Dans d'autres nouvelles, le package de ShareIt semble être en quelque sorte obscurci, donc même si mes outils ont réussi à générer du code Java, rien de significatif ne peut être vu dans les talons.
Andy Yan
Attendez - j'ai utilisé un autre outil, et je pense que je l'ai peut-être. Je vais le faire éditer dans votre réponse après vérification.
Andy Yan
4

Si les applications sont installées en mode silencieux (sans la boîte de dialogue d'installation habituelle), ces applications appellent vraisemblablement directement pm, c'est PackageManager-à- dire qui, en tant qu'application système, est autorisée android.permission.INSTALL_PACKAGES.

Le téléphone doit être enraciné pour que l'application puisse appeler pmdans un contexte racine, sinon vous serez accueilli avec le message "Ni l'utilisateur xxxx ni le processus actuel n'ont android.permission.INSTALL_PACKAGES".

EDIT: Comme @Izzy l'a souligné dans le commentaire, android.permission.INSTALL_PACKAGESest également accordé aux applications installées sur /system. Voir le commentaire ci-dessous et cette question SO pour plus d'informations.

Andy Yan
la source
Notez que je n'ai pas réellement essayé ShareIt et analysé ce qu'il fait vraiment, en proposant simplement la théorie la plus probable. Si vous n'êtes pas enraciné et que cela fonctionne toujours, nous pourrions avoir un problème beaucoup plus intéressant à examiner.
Andy Yan
1
@beeshyams En Chine ici, de nombreux marchés d'applications tiers feraient une installation silencieuse ou automatisée. La 1ère façon est celle décrite ici, et ils demanderont l'autorisation root lors de la première installation; la 2ème consiste à vous demander d'activer un service d'accessibilité, puis d'automatiser les clics sur les boutons "installer".
Andy Yan
1
Mon téléphone n'est pas enraciné. Et il n'a pas non plus demandé d'autorisations root. Mais en Inde, ShareIt est une méthode très populaire pour installer des applications via le peer-to-peer.
Neo
1
@beeshyams Évitez cette application et son horrible taupe d'autorisations requises. Envisagez plutôt d' utiliser le partage open source via HTTP (disponible sur F-Droid). Je ne suis en aucun cas affilié à l'application.
Grimoire du
1
@beeshyams Il fonctionne avec tout appareil connecté au même réseau. Pour autant que je sache, l'hôte doit être Android, mais n'importe quel appareil peut alors se connecter au même réseau et visiter l'adresse HTTP indiquée dans l'application pour télécharger le ou les fichiers.
Grimoire