J'ai téléchargé un APK depuis une source tierce (pas Google Play). Ma question est la suivante : cette application Android, bien qu'elle indique qu'elle ne peut accéder qu'à mon stockage USB, peut-elle également faire d'autres choses (comme lire l'IMEI) sans l'indiquer explicitement ? En fait, ce que je me demande, c'est si le système Android l'empêche réellement ou si c'est simplement quelque chose que le développeur indique dans son manifeste ?
Réponses
Trop de publicités?Como Meer Borg déclare correctement dans sa réponse : lorsqu'une application est installée, le gestionnaire de paquets lit son Manifest
et note les permissions demandées dans les fichiers que le système Android contrôle ( /data/system/packages.xml
, /system/etc/permissions/*.xml
(un fichier par application)). En outre, pour chaque autorisation, il existe un fichier spécifique de groupe d'utilisateurs qui sera attribué à l'application 1 . Ainsi, à chaque fois que l'application tente d'accéder à une fonctionnalité nécessitant une autorisation, celle-ci est vérifiée : si l'autorisation a été déclarée dans la section Manifest
l'accès est accordé - sinon il est refusé. Notez qu'il s'agit d'une description simplifiée, mais
Bien que ce soit la règle générale, pour certaines choses, il est possible de contourner les autorisations. Si une application veut, par exemple, envoyer quelque chose à l'internet, elle peut aussi le faire en appelant une "intention", en demandant au navigateur d'ouvrir une certaine page (comme par ex. http://bad.server/collector.php?info1=some_info&info2=more_info
). Cependant, cela ne passe pas inaperçu pour l'utilisateur, car le navigateur s'ouvre au premier plan et affiche cette action. Ainsi, si une application utilisait cette fonctionnalité, le tollé serait entendu (en général).
Si un développeur veut vraiment faire de "mauvaises choses", il peut aussi utiliser une autre méthode : avoir une application avec toutes les permissions requises, et une seconde avec presque aucune. Si l'utilisateur a les deux applications installées, la seconde pourrait appeler la première (avec de grandes permissions) pour traiter les "choses" qu'elle ne peut pas faire elle-même (en raison du manque de permissions) - de la même manière que celle décrite ci-dessus pour l'accès à Internet. notez que ce principe est utilisé par exemple pour les addons, et la "communication inter-app" dans un sens positif, aussi
TL;DR :
Une application est limitée aux autorisations qu'elle demande, et ne peut pas directement accéder à d'autres "choses". Un accès "indirect" ne passerait pas inaperçu.
P.S. :
Il s'agit juste d'une présentation abstraite et simplifiée. Je ne suis pas dans le développement d'Android, donc un développeur pourrait avoir une meilleure compréhension et me corriger, ou ajouter à ce qui précède.
1 Exemple (notez la liste des "groupes") :
shell@android:/ $ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats)
Le site id
(sans paramètres) affiche des informations sur l'"utilisateur actuel". Dans ce cas, j'utilisais adb shell
L'utilisateur est donc l'"application shell" (plutôt que l'application intégrée). shell Unix ). La liste des groupes montre quelles permissions sont accordées au shell, il peut donc par exemple lire et écrire sur la SDCard, accéder à Bluetooth et à Internet (et d'autres choses encore).
Chaque application que vous installez contient un fichier appelé manifest.xml qui détermine ce à quoi l'application est autorisée à accéder. Lorsque vous installez une application, elle vérifie ce fichier et vous indique les autorisations nécessaires pour installer cette application.
Donc, à moins que votre téléphone soit enraciné, et utilise un exploit. Ou vous repackagez ce fichier et son fichier manifeste pour ajouter plus de permissions...il n'accèdera qu'au stockage USB tel que cité. Le système Android empêche tout autre accès et le code qui tente d'accéder à ces autres permissions renverra simplement une erreur du point de vue du programme.
Mais je crois que même l'accès au stockage USB est un problème parce qu'il peut accéder à tous les autres fichiers que d'autres programmes créent en utilisant le stockage USB, pas le système de fichiers entier, juste une sous-partie de celui-ci qui est définie comme "stockage USB". Mais comme l'application n'accède pas à l'internet, tout ce à quoi l'application accède reste sur votre appareil.