Dédicaces Je dédie ce travail à Mes chers parents pour tous leurs sacrifices, leurs amours, leur soutien et leurs prières tout au long de mes études. Trouvez en ce travail le fruit de vos sacrifices et dévouement, et l’expression de ma gratitude et mon profond amour. Que Dieu vous accordait santé, bonheur et longue vie. Ma chère sœur Malek et mon cher frère Mohamed, en témoignage de l’attachement, de l’amour et de l’affection que je porte pour vous. Je vous remercie pour votre affection si sincère et vos encouragements. Je vous souhaite une vie pleine de succès et de bonheur. La mémoire de ma grand-mère, J’aurais tant aimé que vous soyez présente. Que Dieu ait votre âme dans sa sainte miséricorde. A ma chère cousine Rim, ma fidèle accompagnante dans les moments les plus délicats de ma vie. Je vous dédie ce travail avec tous mes vœux de bonheur, de santé et de réussite. Mes plus proches amis Safa, Khouloud, Aymen et Firas je vous remercie pour votre présence tout le temps que j’avais besoin de vous, de votre aide et de votre soutien. Je vous souhaite tout le succès et le bonheur du monde. Toute ma grande famille, qui a cru en moi et qui est toujours à côté de moi pour féliciter mes succès. i REMERCIEMENTS Je tiens à exprimer ma sincère gratitude et ma profonde reconnaissance à toutes les personnes qui ont contribué au succès de mon projet de fin d’étude et qui m’ont aidé lors de la rédaction de ce rapport. Tout d’abord, j’adresse mes vifs remerciements à mon encadrant, Monsieur Mohamed Aymen Saied pour le temps passé ensemble et le partage de son expertise. Grâce aussi à sa confiance et ses conseils j’ai pu m’accomplir totalement dans mes missions. Il fut d’une aide précieuse dans les moments les plus délicats. Ensuite, j’exprime mes sincères remerciements également à Monsieur Chokri Abdelmoula, mon encadrant académique à l’Ecole Nationale d'Electronique et des Télécommunications de Sfax (ENET'Com), pour son suivi, sa disponibilité et ses directives tout au long de ce travail. Je souhaite, aussi, adresser mes remerciements aux membres du jury, pour l’honneur qu’ils m’ont fait en examinant ce projet de fin d’études, en espérant qu’ils trouvent dans ce rapport les qualités de clarté et de motivation qu’ils attendent. De même, je présente mes remerciements à tous les enseignants qui ont participé à notre évolution scientifique durant les années écoulées de formation à l’ENET’Com. Enfin, je tiens à remercier toute ma famille, tous mes proches et amis qui m’ont toujours soutenu et encouragé au cours de la réalisation de ce projet. ii Table des matières CHAPITRE 1 : INTRODUCTION...................................................................................................... 1 1.1 Introduction ........................................................................................................................... 1 1.2 Contexte.................................................................................................................................. 1 1.3 Problématique........................................................................................................................ 2 1.4 Contribution........................................................................................................................... 3 1.5 Conclusion .............................................................................................................................. 4 CHAPITRE 2 : ÉTAT DE L’ART ....................................................................................................... 5 2.1 Introduction ........................................................................................................................... 5 2.2 Généralités ............................................................................................................................. 5 2.2.1 Architecture du système d'exploitation Android ........................................................ 5 2.2.2 Applications Android .................................................................................................... 6 2.2.3 Modèle de permission Android .................................................................................. 10 2.3 Travaux reliés ...................................................................................................................... 15 2.4 Conclusion ............................................................................................................................ 17 CHAPITRE 3 : ESTIMATION DE LA CONSOMMATION ÉNERGÉTIQUE DES APPLICATIONS ANDROID ............................................................................................................. 18 3.1 Introduction ......................................................................................................................... 18 3.2 Outils utilisés pour l’estimation de la consommation d’énergie ...................................... 18 3.3 PETrA: Power Estimation Tool for Android Applications ............................................. 19 3.3.1 Environnement ............................................................................................................ 20 3.3.2 Principe de fonctionnement ........................................................................................ 21 3.4 Résultats ............................................................................................................................... 25 3.5 Conclusion ............................................................................................................................ 27 CHAPITRE 4 : ÉTUDE DE DÉPENDANCE ENTRE PERMISSIONS ....................................... 28 4.1 Introduction ......................................................................................................................... 28 4.2 Généralités ........................................................................................................................... 28 4.2.1 Clustering ..................................................................................................................... 28 iii 4.2.2 Les clusters ................................................................................................................... 29 4.2.3 Méthodes de Clustering .............................................................................................. 30 4.2.4 Notion de Cluster basé sur la densité ......................................................................... 30 4.3 Extraction de patrons de permissions................................................................................ 32 4.4 Étude de cas ......................................................................................................................... 34 4.4.1 Ensemble de données................................................................................................... 35 4.4.2 Application du Clustering........................................................................................... 35 4.4.3 Métriques ..................................................................................................................... 37 4.4.4 Recommandation des permissions ............................................................................. 41 4.5 Conclusion ............................................................................................................................ 44 CHAPITRE 5 : CONCLUSION ET PRESPECTIVES ................................................................... 45 Bibliographie........................................................................................................................................ 47 iv Table des figures Figure 1: Logo de Mitacs Figure 2: Université Laval ........................................................................... 3 Figure 3: Architecture du système d'exploitation Android [8] ................................................................ 6 Figure 4: Fichier AndroidManifest.xml d'Angry Birds Space [9] ......................................................... 10 Figure 5: Un exemple de balise XML <use-permission> [11] .............................................................. 11 Figure 6: Affichage des permissions Android requises pour 'Maps' [12].............................................. 12 Figure 7: Paramètres de permission d'une application [14]................................................................... 14 Figure 8: Scénario représentatif ............................................................................................................ 20 Figure 9: Interface de MonkeyRecorder................................................................................................ 21 Figure 10: Interface de PETrA .............................................................................................................. 22 Figure 11: Workflow de PETrA ............................................................................................................ 23 Figure 12: Résultat de PETrA ............................................................................................................... 25 Figure 13: Statistiques de PETrA .......................................................................................................... 26 Figure 14: Consommation d'énergie totale pour chaque application .................................................... 26 Figure 15: Relation entre le nombre de permissions et la consommation énergétique ......................... 27 Figure 16: Différence entre Clustering par DBSCAN et Clustering par k-means ................................ 30 Figure 17: Clustering par DBSCAN...................................................................................................... 31 Figure 18: Ligne de commande pour exécuter DBSCAN ..................................................................... 34 Figure 19: Entrée de l'algorithme DBSCAN ......................................................................................... 36 Figure 20: Sortie de l'algorithme DBSCAN .......................................................................................... 36 Figure 21: Dépendance du nombre de Clusters à la valeur d'Epsilon ................................................... 37 Figure 22: Exemple de calcul de PUC .................................................................................................. 38 Figure 23: Exemple de calcul de la valeur ACP.................................................................................... 39 Figure 24: Calcul de la valeur PUC pour Base1.................................................................................... 40 Figure 25: Calcul de la valeur PUC pour Base2.................................................................................... 40 Figure 26: Calcul de la valeur PUC pour Base3.................................................................................... 41 Figure 27: Exemple de résultat de recommandation ............................................................................. 42 Figure 28: Recommandation en se basant sur Base1 ............................................................................ 43 Figure 29: Recommandation en se basant sur Base2 ............................................................................ 43 Figure 30: Recommandation en se basant sur Base3 ............................................................................ 43 v Table des tableaux Tableau 1: Groupe de permissions dangereuses .................................................................................... 14 Tableau 2: Matrice d'utilisation de cinq applications avec sept permissions ........................................ 33 vi Liste des abréviations GPS Global Positioning System Mitacs The Mathematics of Information Technology and Complex Systems SDK Software Development Kit APK Android application Package API Application Programming Interface CPU Central processing unit SD Secure Digital LCD Liquid Crystal Display HTML HyperText Markup Language CSV Comma Separated Values JSON JavaScript Object Notation vii CHAPITRE 1 : INTRODUCTION 1.1 Introduction Ce projet s’inscrit dans le cadre de mon projet de fin d’études pour l’obtention du diplôme national d’ingénieur en télécommunications. Nous commençons par un chapitre introductif consacré principalement à la présentation du contexte général du projet. Nous y exposons par la suite la problématique de notre sujet ainsi que ses objectifs. 1.2 Contexte Ces dernières décennies, nous assistons à une évolution technologique considérable notamment pour les téléphones mobiles. Ces derniers existent sous différents systèmes d'exploitation et sont commercialisés par plusieurs constructeurs. Les périphériques présents aujourd’hui sur le marché sont d’un point de vue technologique, de plus en plus comparables à des micro-ordinateurs puisqu’ils offrent une vaste gamme de services tels que gestion de courriels, navigation Internet, achat en ligne, accès au compte bancaire, etc. Cette gamme de services augmente jour après jour en raison de la croissance du nombre d'applications innovantes disponibles sur le marché mobile. Néanmoins, les développeurs sont souvent confrontés à des contraintes de temps lors du développement de leurs applications. Ils sont donc forcés de développer rapidement les applications afin de respecter les délais de livraison et faire face à la concurrence. Par conséquent, les développeurs se focalisent plus sur les fonctionnalités attendues de l'application et négligent souvent des critères primordiaux tels que la performance, la consommation d'énergie et l'expérience utilisateur. Cependant, la question souvent posé par un utilisateur lorsqu'il exécute une application mobile est « combien de temps puis-je utiliser mon téléphone en exécutant cette application ? ». Savoir mesurer la consommation de l'énergie des applications mobiles devient donc d'une importance cruciale pour avoir la quantité d'énergie utilisée afin de faire fonctionner les services proposés. 1 Actuellement, Android est le système d’exploitation mobile le plus utilisé dans le monde avec 82.8% de parts de marché dans les smartphones. Son concurrent le plus proche est Apple, avec 13,9% du marché [1]. Android fournit aux développeurs d'applications un modèle de sécurité basé sur les permissions, qui contrôlent l'accès aux ressources système, incluant le matériel, les paramètres et les données utilisateur. Nous intéressons donc à savoir si ce système de permissions peut avoir un impact direct sur la consommation énergétique des appareils mobiles. 1.3 Problématique Malgré l’avancée technologique des systèmes mobiles, ils se trouvent toujours face à la problématique de la consommation d’énergie. L’utilisation intensive des appareils mobiles alimentés par des sources d'énergie limitée représente donc un défi sur lequel les chercheurs travaillent afin de faire augmenter au maximum la durée de fonctionnement du mobile par : • L’augmentation de l'autonomie des batteries • La minimisation de la consommation d'énergie disponible tout en assurant les bonnes fonctionnalités du mobile. Puisque les améliorations dans la technologie de la batterie n'ont pas pu suivre l'évolution de la demande d'énergie imposée par les nouvelles fonctionnalités d’un smartphone, on a opté à améliorer l'efficacité énergétique par la deuxième méthode. Parmi les sources de consommation d'énergie dans le mobile on peut citer : • La transmission sans-fil (2G/3G/4G), WiFi, bluetooth ou autres • Les applications qui s'exécutent dans le mobile Certaines applications sont susceptibles d'être gourmandes en énergie, par exemple les jeux vidéo ou les applications utilisant des appareils tels que le GPS, ces applications causent le déchargement rapide de la batterie sans aucune raison apparente. Plusieurs études ont identifié comme causes d'une consommation d'énergie élevée dans les appareils mobiles, des utilisations abusives des wakelocks qui maintiennent inutilement les composants matériels en éveil [2,3]. 2 Android utilise un système de permission pour contrôler les privilèges d’accès et limiter l’accès de l’application durant l'exécution seulement aux ressources autorisées [4]. Ce mécanisme exige que les développeurs déclarent quelles ressources leurs applications utilisent. Malheureusement, plusieurs recherches d'utilisateurs ont montré que la plupart des utilisateurs ne prêtaient pas attention ou ne comprenaient pas les avertissements de permission [5]. D'autre part, les développeurs ne respectent pas toujours les règles de bonnes pratiques fournies par Android ce qui rendent les applications plus sensibles au problème de haute consommation énergétique. Dans le cadre de notre étude, nous nous concentrons sur les permissions utilisées et leur impact au niveau de la consommation d'énergie d'une application Android. 1.4 Contribution Dans le cadre d’un stage de recherche financé par Mitacs, un organisme à but non lucratif qui se consacre à encourager les réseaux de recherche internationaux entre les universités canadiennes et le monde [6], et sous la supervision d’un professeur, M. Mohamed Aymen Saied, de l’établissement d’enseignement d’accueil Université Laval, qui se classe parmi les plus prestigieuses universités canadiennes avec 404 M$ en fonds de recherche et plus de 1600 professeurs répartis dans 17 facultés [7], j’ai réalisé un travail de recherche en partant d’une revue de littérature effectué dans le même domaine. Figure 1: Logo de Mitacs Figure 2: Université Laval Nos objectifs principaux sont les suivants : o Trouver une solution simple et précise pour mesurer la consommation énergétique des applications Android. o Identifier les applications les plus gourmandes en énergie par le calcul de la consommation d’énergie moyenne en se basant sur des scénarios représentatifs. 3 o Chercher des liens entre les permissions et la consommation énergétique d’une application en identifiant des patrons d’utilisation des permissions par la méthode de clustering et en appliquant quelques métriques pour l’analyse de ces patrons. o Trouver une méthode pour recommander à un développeur des permissions pour son application. Pour la réalisation de ces études nous avons utilisé des données qui ont été collectées en 2014 et nous avons effectué une vérification sur l’ensemble des applications en juin 2021 afin de valider la disponibilité de l’application dans le marché Google Play. Le présent rapport synthétise notre projet et contient cinq chapitres : ce premier chapitre introductif, un deuxième chapitre intitulé « Etat de l’art » dédié pour la présentation du système d’exploitation Android et quelques solutions existantes, le troisième chapitre constitue la partie de l’estimation de la consommation énergétique en présentant les techniques possibles et la méthode adopté, dans le quatrième chapitre nous décrivons en détail l’algorithme de Clustering utilisé et nous présentons une étude de cas concernant les patrons d’utilisations de permissions et leur impact sur la consommation d’énergie, Enfin, le cinquième et dernier chapitre conclut le présent mémoire en identifiant notamment certains axes d’amélioration et travaux futurs. 1.5 Conclusion Dans ce chapitre nous avons élaboré le cadre du stage en déterminant les problématiques. De plus nous avons présenté brièvement l’organisme d’accueil. Enfin nous avons cité les objectifs du notre projet. En vue d’avoir une idée plus claire sur le projet, le prochain chapitre sera consacré à une étude préalable afin de comprendre le système d’exploitation Android et d’étudier les solutions existantes. 4 CHAPITRE 2 : ÉTAT DE L’ART 2.1 Introduction La totalité de nos travaux est effectuée avec le système d'exploitation Android vu sa distribution open source et sa dominance sur la grande part du marché des smartphones. Dans la première partie de ce chapitre, nous introduisons des généralités du système d’exploitation mobile Android et nous explorons dans la deuxième partie les travaux reliés aux permissions dans les applications mobiles et à la consommation énergétique de applications Android. 2.2 Généralités Android est distribué en Open Source sous licence Apache. Il est conçu spécialement pour les smartphones et les tablettes tactiles. Avec le concept central d'une communauté open source, Android offre ses outils, ses suites et son code source gratuitement au public. Pour les développeurs, cela permet l'innovation dans la construction d'applications. 2.2.1 Architecture du système d'exploitation Android Android est un système d'exploitation mobile basé sur le noyau Linux, développé par Google et lancé en juin 2007. L'architecture des systèmes Android peut être divisée en quatre couches comme illustré dans la figure 3. La couche supérieure, Applications, contient les applications Android. Les applications développées sont installées au niveau de cette couche. Application Framework, est la couche qui regroupe les services proposés aux développeurs, sous forme de classes Java, lors du développement de leur application. La couche inférieure regroupe les librairies offertes par le système Android en plus des librairies standards, équivalentes au Java SE, qui sont localisées dans le Core Libraries. Au niveau de cette couche, plus précisément dans le Android Runtime, on retrouve aussi le cadre d'exécution de nos applications, Dalvik Virtual Machine. Dalvik est une implémentation de la machine virtuelle Java spécialement optimisée et conçue pour Android. Dans la dernière couche, Linux Kernel, on retrouve le noyau Linux sur lequel le système Android est basé. 5 Figure 3: Architecture du système d'exploitation Android [8] 2.2.2 Applications Android Une application Android est développée en Java et compilée dans un seul fichier d'archive à l'aide de la trousse d'outils SDK d’Android. Cela prend le code Java et le compile dans un fichier de package Android, appelé APK (.apk). Ce fichier APK contient toutes les ressources et les données pertinentes requises pour installer et exécuter une application sur un appareil Android. Le principe de Android s'appuie sur des classes qui sont en fait les bases élémentaires sur lesquelles les futures applications reposent, Elles sont indispensables pour la construction de toute application. 6 2.2.2.1 Composants principaux d’Android Dans cette partie on va décrire les principales classes du système Android • Activity : Les applications Android sont composées d'activités, qui sont des tâches autonomes conçues pour fournir des informations à l'utilisateur. Les activités représentent habituellement un seul écran d'information, comme la composition d'un message instantané ou d'un courrier électronique. Les activités sont proactives, elles commencent et s'annulent mutuellement, créant un flux d'informations clair sur l'interface utilisateur, y compris les activités d'appel d'autres applications installées sur l'appareil. • Content Provider : Un Content Provider est un composant qui sert à gérer les données associées à une application Android, partagée ou privée. Ces données peuvent être stockées dans un système de fichiers tel qu’une base de données SQLite, sur le Web ou tout autre emplacement de 9 stockage persistant. Les applications font appel au content provider pour consulter ou modifier les données stockées (uniquement avec l'autorisation du content provider des applications). Par exemple, les informations de contact comme les noms et les numéros peuvent être utilisés de manière dynamique sur une grande variété d'applications Android, un Content Provider est mis en place pour distribuer et contrôler les modifications et le flux de ces données. • Service : Le composant Service des applications Android n'a pas d'interface utilisateur et est responsable de l'exécution de tous les processus d'arrière-plan des applications, y compris l'extraction de données à distance sur un réseau alors qu'un utilisateur interagit avec d'autres applications sur son appareil. Les services sont généralement appelés via une activité pour fournir d'autres fonctionnalités à une application. • Broadcast Receiver : Un Broadcast Receiver est responsable d'annoncer des notifications à l'échelle du système. Ce composant n’est pas associé à une interface graphique utilisateur, cependant, il peut toujours annoncer des notifications telles que la batterie faible et d'autres messages système à l'utilisateur. Pour les applications Android, Broadcast Receiver permettra à une application de diffuser des notifications à d'autres applications, y compris les nouvelles initiations de données, activités ou services. Référé en tant que passerelle à d'autres composants, le Broadcast Receiver est destiné à effectuer moins de travail que les autres composants de l'application. 7 • Intent : Intent est un objet de messagerie asynchrone pour activer ces composants individuels et leur permettre d'envoyer des messages et des commandes les uns aux autres. Intent peut être considérer comme un messager qui demande une action à partir d'un autre composant 2.2.2.2 Android package Android Package est la forme sous laquelle une application Android est proposée pour les utilisateurs. Il s’agit d’une archive, communément appelée apk, contenant le code de l’application et les ressources qu’elle utilise. Nous présentons dans ce qui suit le contenu principal d’un apk : • AndroidManifest.xml : AndroidManifest.xml est un fichier XML créé par le développeur de l’application. Il contient les informations liées à l’application qui sont nécessaires au système. Parmi Ces informations, nous pouvons citer : o Le nom du package de l’application o Le nom de l'activité principale (Main Activity), qui représente le point d'entrée de l’application o La liste des composants de l'application, les activités, les services, etc o La liste des permissions qui permettent à l'application d'avoir accès à des parties protégées de l'API, comme par exemple permettre à l'application d'avoir accès à Internet o La liste des librairies requises o Le niveau minimal du SDK Android pour que l’application puisse fonctionner La figure 4 présente le fichier AndroidManifest.xml d’une version d’Angry Birds Space. À la deuxième ligne sont définis l’endroit où l’application sera installée (ici on a laissé au choix du système) et le nom du package de l’application. Ensuite, de la ligne 5 à la ligne 20 sont listées les permissions demandées par l’application. Dans cet exemple, l’application demande par exemple l’accès à la mémoire externe, au réseau, aux informations liées au téléphone, aux données de géolocalisation et au système de payement proposé par Google [8]. Les ligne 22 et 23 décrivent comment l’application sera présentée dans le menu des applications une fois installée : l’icône à utiliser et le nom à afficher. Dans le reste du fichier, on trouve les composants de l’application et les informations qui y sont liées. L’application a ainsi quatre 8 composants : deux de type Activity, un de type Service et un de type Broadcast Receiver. Il faut savoir qu’il est possible de filtrer les messages Intent à destination des composants de l’application. Dans AndroidManifest.xml, on peut faire ça via les entrées intent-filter. Ainsi le premier Activity ne recevra que les Intents dont l’attribut action a la valeur android.intent.action.MAIN et la catégorie est android.intent.category.LAUNCHER. Cela signifie que lorsque l’utilisateur cliquera sur l’icône de l’application dans le menu de son téléphone c’est ce composant qui sera lancé. Quant au Broadcast Receiver, il ne réagira qu’aux intents dont l’attribut action vaut com.android.vending.billing.RESPONSE_CODE. • Classes.dex : Le code de chaque classe d’une application Java standard est stocké dans des fichiers .class différents. Mais sous Android, ce n’est pas le cas. Tout est stocké dans un seul et unique fichier « Classes.dex ». De plus, le code des applications Java est lui compilé en byte code Java, alors que, celui des applications Android est lui compilé dans un autre format qui est le byte code Dalvik. C’est le contenu de ce fichier, ou plus précisément une version optimisée de celui-ci, qui sera interprété par la machine virtuelle Dalvik afin d’exécuter l’application. • Autres : Un apk contient aussi d’autres entrées telles que les répertoires METAINF, res, jni et lib. Le répertoire META-INF contient ainsi des fichiers liés à l’identification de son développeur et au contrôle d’intégrité de l’application. Le répertoire res contient toutes les ressources utilisées par l’application telle que des images, sons, etc. Les répertoires jni et lib contiennent les bibliothèques utilisées par l’application. 9 Figure 4: Fichier AndroidManifest.xml d'Angry Birds Space [9] 2.2.3 Modèle de permission Android Le système d'exploitation Android, sur lequel nous avons fait nos études, est un système Linux multi-utilisateurs dans lequel chaque application est associée à un compte utilisateur 10 (user) diffèrent. C’est pour cela que le système attribue par défaut, à chaque application un User-ID (UID) unique et non connu de l'application. En fait, chaque application s'exécute avec une identité de système distincte et est isolée dans un sandbox virtuel par le noyau Linux, en les séparant d'autres applications pour protéger l'intégrité du système et la confidentialité de l'utilisateur. Par défaut, chaque application accède uniquement aux composants nécessaires à son exécution. En fait, si une application nécessite d’utiliser des ressources ou des informations en dehors de son sandbox, elle doit demander explicitement l'autorisation. En fonction du type de permission demandée par l'application, le système peut l’accorder directement, ou le système peut demander à l'utilisateur d'accorder la permission [10]. Une application Android de base ne possède aucune permission associée par défaut, le développeur de l’application est le responsable du la remplir avec des permissions, adaptées à ses fonctionnalités. Précédemment discutées dans la section 2.2.2.2, les permissions d'applications sont stockées dans un fichier appelé « AndroidManifest.xml » situé dans le fichier « Android Package (.apk) » de l'application. La balise est un élément du fichier AndroidManifest.xml qui permet aux développeurs de déclarer quelles permissions doivent être accordées pour avoir le bon fonctionnement de l'application. Ces permissions sont par la suite accordées par l'utilisateur lorsque l'application est installée sur des appareils fonctionnant sous la version Android 5.1 ou lorsque l'application est exécutée sur des appareils exécutant la version Android 6.0 ou supérieurs. La figure ci-dessous présente un exemple de la balise demandant la permission d'écrire sur le stockage externe. Figure 5: Un exemple de balise XML <use-permission> [11] 2.2.3.1 Les permissions d'application avant la mise à jour Android 6.0 Marshmallow Les permissions sont un aspect du modèle de sécurité d'Android, qui permet aux utilisateurs d'avoir un pouvoir sur ce qu'ils peuvent et ne peuvent pas accepter sur leurs périphériques mobiles. Comme mentionné précédemment une application Android est exécutée dans un sandbox avec une gamme limitée de ressources système. Lorsqu'une application est installée 11 sur un périphérique exécutant Android 5.1 ou inférieur, Android restreint automatiquement la capacité de l'application jusqu'à ce que l'utilisateur accepte explicitement l'installation de cette application sur son appareil et l'accès au système d'exploitation ou aux fonctionnalités requises pour fonctionner correctement. La figure 6 décrit l'affichage habituel des permissions demandées par une application à l’utilisateur au moment de l'installation. Figure 6: Affichage des permissions Android requises pour 'Maps' [12] Sur les périphériques exécutant Android 5.1 ou moins, les permissions d'une application sont toutes requises ou rien, c'est-à-dire que les utilisateurs n’ont pas le choix, ils doivent accepter toutes les permissions d'une application ou refuser l'application complètement et dans ce cas, il ne peut pas utiliser l’application parce qu’il n’est pas d’accord avec certaines permissions demandées. 12 2.2.3.2 Android 6.0 Marshmallow : Les modifications apportées au modèle de permission Android 6.0 Marshmallow a été publié en octobre 2015. Le but de chaque mise à jour Android conçue est de donner à l'utilisateur un environnement mobile plus convivial, plus interactif et plus sûr. La mise à jour 6.0 s'est vantée de fournir aux utilisateurs une assistance contextuelle, une meilleure durée de vie de la batterie et des niveaux de productivité, de connectivité et d'internationalisation plus élevés, mais ses plus grandes améliorations ont été les changements dynamiques apportés à la fonctionnalité de sécurité et à la réorganisation du gestionnaire des permissions [13]. À partir de la version d'Android 6.0, on ne demande plus la permission d'être accordée lors de l'installation initiale d'une application, les utilisateurs deviennent capables d’accorder des permissions pendant l'exécution des applications. Cette approche est conçue pour donner à l’utilisateur plus de contrôle et simplifier le processus d'installation de l'application. En fait, la mise à jour 6.0 a fourni aux utilisateurs une fonctionnalité avancée et un contrôle sur leurs applications, en leur permettant de révoquer les autorisations individuelles d'une application via l'interface des paramètres de l'application [14]. Par exemple, l’utilisateur pourrait choisir de donner à une application de transport un accès à l'emplacement de son appareil mais rejeter l'accès pour afficher sa liste de contacts ou ses services SMS. La figure 7 montre la nouvelle interface utilisateur pour ce contrôle avancé [14]. 13 Figure 7: Paramètres de permission d'une application [14] Une appareil mobile exécutant Android 6.0 ou supérieur définit maintenant les permissions dangereuses dans ce qu’Android appelle « groupes de permission ». Le tableau 2 décrit les 9 groupes de permissions et leurs permissions dangereuses associées. Tableau 1: Groupe de permissions dangereuses Groupe de permission Permission dangereuse Lire_Calendrier Calendrier Ecrire_Calendrier Camera Camera Lire_Contact Contacts Ecrire_Contact Obtenir_Compte Location ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION 14 Microphone Enregistrement_Audio Lire_L’état_de_téléphone Appel_Téléphonique Lire_Journal_D’appels Phone Ecrire_ Journal_D’appels Ajouter_des messages vocaux Utilisation_SIP Processus_Appels_Sortants Capteurs Capteurs_Du_Corps Envoyer_SMS Recevoir_SMS SMS Ecrire_SMS Recevoir_MMS Lire_Stockage_Externe Stockage Ecrire_ Stockage_Externe 2.3 Travaux reliés Les travaux relatifs à cette recherche se divisent en deux catégories soit la consommation énergétique des applications mobiles et l’analyse du modèle de permission Android. L'aspect énergétique est devenu un facteur clef dans le développement d'applications en tout genre et spécifiquement les applications mobiles, en raison de la faible capacité des batteries présentes sur ces périphériques. Une première technique pour mesurer la consommation d'énergie des appareils est basée sur le matériel, car des kits d'outils matériels spécifiques sont nécessaires pour effectuer les mesures. Flinn et Satyanarayanan [15] ont proposé un outil nommé POWERSCOPE. Il repose sur l'adoption d'un multimètre numérique connecté à un ordinateur, qui permet de suivre les 15 variations d'énergie, enregistrées par le multimètre, des processus qui s'exécutent sur un ordinateur portable. D'autres chercheurs ont exploité le moniteur de puissance MONSOON [16] pour mesurer la consommation d'énergie des API d'applications Android [17]. Les exigences matérielles coûteuses nécessaires pour le profilage énergétique basé sur le matériel ont encouragé les chercheurs à trouver des moyens alternatifs pour approximer la consommation d'énergie. Les approches logicielles utilisent exclusivement les fonctionnalités du système pour estimer la consommation électrique, sans nécessiter de matériel supplémentaire, Do et al. [18] ont développé PTOP, une approche proposée qui prend en compte la fréquence CPU, la consommation de disque dur et de mémoire comme sources d'information pour estimer les joules consommés par un processus. ELENS [19] fournit une estimation plus fine de la consommation d'énergie au niveau de la méthode, du chemin ou de la ligne de source. Il repose sur une combinaison d'analyse de programme et de modélisation énergétique et produit un retour (feedback) pour aider les développeurs à mieux comprendre le comportement de l'application. A la différence des techniques/outils évoqués ci-dessus, PETrA [20], l’outil auquel nous allons apporter des modifications pour l’utiliser dans notre approche, ne nécessite aucun équipement matériel supplémentaire et donc aucune solide expérience dans la mise en place du banc d'essai. Il utilise des outils fiables issus de l'Android Toolkit. Enfin, contrairement aux outils mesurant la consommation d'énergie au niveau du processus, PETrA fonctionne à une granularité au niveau de la méthode. En plus de cela, la plupart des approches proposées dans la littérature (y compris PTOP et ELENS) ne sont pas accessibles au public. Dans [21], les auteurs ont étudié l'hypothèse largement répandue selon laquelle les profils de consommation d'énergie calculés à l'aide d'outils logiciels sont moins précis que les valeurs réelles mesurées à l'aide d'outils matériels, ils ont comparé les résultats obtenus par PETrA par les résultats de [16] pour montrer que les estimations produites par PETrA sont très proches des valeurs réelles calculé par l’approche de MONSOON. De nombreux chercheurs ont proposé des approches pour aider les utilisateurs et même les développeurs à comprendre les autorisations utilisées dans les applications Android. 16 Frank et al. ont sélectionné 188 389 applications à partir du marché officiel d’Android et ont analysé les combinaisons de demandes de permissions par ces applications [22]. Une méthode probabiliste a été proposée pour déduire les patrons d’utilisation de permissions les plus répandus en fonction de la popularité des applications (notes et nombre de revues). Les auteurs ont identifié plus de 30 modèles communs de demandes de permissions. Leur objectif principal était d’étudier l'écart des demandes de permissions pour les applications à rang élevé et celles à faible rang, les résultats ont montré que les applications à faible réputation s'écartent très souvent des modèles de demande de permissions identifiés pour les applications à haute réputation. 2.4 Conclusion Dans ce chapitre, nous avons présenté le système d’exploitation Android et ces applications et nous avons fourni un aperçu sur les travaux reliés aux techniques de mesure de la consommation énergétique et aux permissions dans les applications mobiles. Nous présentons dans le prochain chapitre notre proposition pour l’estimation de la consommation d’énergie des applications Android. 17 CHAPITRE 3 : ESTIMATION DE LA CONSOMMATION ÉNERGÉTIQUE DES APPLICATIONS ANDROID 3.1 Introduction Dans le chapitre précédent, nous avons décrit les deux techniques de mesure de la consommation énergétique, la technique basée sur le matériel et la technique basé sur un logiciel, dans notre approche nous avons opté pour la deuxième technique. La solution que nous allons présenter par la suite, adopte aussi la méthode d’analyse dynamique. Nous allons donc décrire dans ce chapitre les outils utilisés par cette solution, l’environnement nécessaire pour le bon fonctionnement, et le principe suivis par cette solution. Outils utilisés pour l’estimation de la consommation d’énergie 3.2 Les appareils mobiles modernes sont équipés de plusieurs composants matériels intégrés entre eux. Les composants typiques incluent Le CPU, wifi, mémoire, Carte SD, téléphone, Bluetooth, GPS, appareil photo, accéléromètre, Écran LCD, écran tactile… Il est courant pour les applications Android d'utiliser plusieurs composants simultanément afin d'offrir une meilleure expérience à l'utilisateur. Les états d'alimentation de chaque composant consomment chacun une quantité d'énergie différente. Pour bien connaître où l'énergie est dissipée et la valeur de la quantité d'énergie consommée on a employé plusieurs outils, principalement : • BatteryStats [23] est un outil open source du framework Android capable de collecter les données de batterie de l'appareil en cours d'évaluation. En particulier, il est capable de montrer quels processus consomment de l'énergie de la batterie et quelles tâches doivent être modifiées afin d'améliorer la durée de vie de la batterie. Il est exécutable via la ligne de commande. Les données collectées peuvent être analysées sous forme de fichier journal ou peuvent être converties en une visualisation HTML pouvant être visualisée dans un navigateur à l'aide de Battery Historian. • Systrace [24] est un outil qui peut être utilisé pour analyser les performances des applications. Il capture et affiche les temps d'exécution des processus actifs d'un 18 smartphone, en combinant les données du noyau Android, c'est-à-dire le planificateur du processeur, l'activité du disque et les threads d'application. Les données peuvent être visualisées sous la forme d'un rapport HTML qui montre la vue d'ensemble des processus dans une fenêtre de temps donnée. • Dmtracedump [25] fournit un moyen d'afficher les fichiers journaux de suivi (trace log files). Les fichiers générés par dmtracedump sont faciles à analyser et permettent aux développeurs d'établir avec précision, à une granularité de la microseconde, quand un appel de méthode a été invoqué et quand il est retourné. 3.3 PETrA: Power Estimation Tool for Android Applications PETrA [21] est un logiciel open source écrit en Java, depuis l’année 2016, capable d'estimer la consommation d'énergie des appels de méthode dans les applications Android. Il est basé sur certains outils Android tels que Monkey, Batterystats, Systrace et dmtracedump. PETrA utilise la méthode d’analyse dynamique, Ce genre de méthodes calculent les métriques nécessaires à l'exécution de l'application via du profilage. Cet outil utilise Monkey [26] et Monkeyrunner[27] pour exercer l’application à analyser. Les outils Systrace et dmtracedump sont fournis dans le package Android SDK Tools, plus précisément, dans android-sdk/platform-tools/. PETrA utilise la version 25 de SDK alors qu’on est arrivé aujourd’hui à la version 31, par suite de cette évolution, le logiciel n’est plus capable à analyser les fichiers générés par ces deux outils à cause des changements effectués au niveau de la structure de ses fichiers. Nous avons donc contribué en apportant des modifications au code PETrA pour qu’il puisse supporter les nouveaux formats de fichiers résultants de Systrace et dmtracedump. Nous avons pu aussi élargir le champ d’intervention de cette solution, pour qu’elle soit capable d’estimer la consommation énergétique de tout type de méthode même les appels au Java APIs. De cette manière, nous pouvons avoir une estimation de la quantité d’énergie consommée par l’application plus précises. Pour le fonctionnement, PETrA nécessite plusieurs entrées et paramètres en plus d’un environnement bien déterminé. 19 3.3.1 Environnement Pour l’exécution de PETrA, nous avons utilisé le système d’exploitation Linux, en plus nous avons utilisé pour cette expérience un Samsung Galaxy Grand Prime puisqu’il est très proche dans ses caractéristiques à LG Nexus 4 utilisé dans [21], ces deux smartphones sont composés de 4 cores CPU. Pour exécuter une application sur le smartphone elle doit tout d’abord être debuggable, pour cela nous avons eu besoin dans certain cas de décompiler l’APK, ajouter dans la balise « application » du fichier manifeste android : debuggable=true et générer à un nouveau APK signé. Pour l’utilisation de MonkeyRunner, on a besoin d’un scénario de test, ce scénario doit être représentatif, c'est-à-dire un scénario d’utilisation typique pour avoir une meilleure estimation de la consommation. Pour ce faire, nous avons exploité la base de données de l’approche de MONSOON, la figure 8 montre un exemple des scénarios de la base de données de MONSOON. Figure 8: Scénario représentatif En fait, parmi les 55 applications analyser par MONSOON, nous avons pu télécharger 10 applications en utilisant un outil de téléchargement appelé APK-Downloader[28], les autres ne sont plus disponibles, et nous avons créé des script pour les scénario en utilisant MonkeyRecorder[27] qui existe dans les outils de SDK. En exécutant la commande monkeyrunner monkey-recorder.py nous obtenons une interface qui représente l’écran de notre smartphone, toute action faite sur l’écran va être enregistrer comme une ligne de script de test. La figure 9 montre l’interface de MonkeyRecorder et la création du script pour le scénario de la figure 8. 20 Figure 9: Interface de MonkeyRecorder 3.3.2 Principe de fonctionnement PETrA prend plusieurs entrées comme indique son interface graphique dans la figure 10, principalement, l’emplacement de l’APK à analyser. Elle peut aussi prendre l’emplacement du fichier Power Profile qui est un fichier caractérisant le smartphone ou bien elle peut l’obtenir directement du smartphone lors du profilage puisque ce fichier est fourni par le fabricant de l’appareil. En plus, PETrA prend comme paramètre le nombre d’exécution de l’application pour le calcul de la consommation, il est représenté par ‘Runs’ dans l’interface, si Runs=n>1, on doit refaire l’estimation n fois et on obtient à la fin la valeur moyenne de la consommation de chaque appel de méthode, en augmentant la valeur de ‘Runs’, on augmente la précision de PETrA. L’utilisateur doit aussi choisir entre Monkey et MonkeyRunner. Puisque nous avons besoin des scénarios représentatif et non pas des actions arbitraires, nous avons choisi MonkeyRunner, de cette façon on peut avoir une estimation d’une utilisation typique et efficace de l’application. Suite à notre choix, nous devons fournir l’emplacement du script de test et la durée nécessaire pour exécuter un tel test. 21 Figure 10: Interface de PETrA En branchant le smartphone et exécutant PETrA on passe aux étapes suivantes comme indiqué dans la figure 11 : • Installation de l’APK en utilisant Android Debug Bridge (adb), un outil qui permet de communiquer avec un appareil, • Au début de chaque exécution, le cache de l'application est nettoyé et Batterystats est réinitialisé pour éviter tout processus inutile sur l'appareil, • Exécution de scénario de test, • Collection des résultats des outils BatteryStats, Systrace et Dmtracedump en plus de l’obtention du fichier power profile, • Calcul de la consommation énergétique de chaque appel de méthode en utilisant les données obtenues, • Sauvegarde des résultats, • Si on n’a pas encore atteint le nombre d’exécution demandé, on reprend la démarche à partir de la deuxième étape, sinon on désinstalle l’application. 22 Figure 11: Workflow de PETrA Pour la collection des données et le calcul de la consommation énergétique, PETRA s'appuie sur dmtracedump pour stocker les traces d'exécution de l'application en cours d'analyse. Pour chaque appel de méthode, cet outil fournit l'heure d'entrée et de sortie. La sortie finale est une liste des appels de méthode exécutés pendant l'exécution. Elle utilise aussi l’outil Batterystats pour récupérer les composants actifs du smartphone et leur état dans une fenêtre de temps spécifique. En outre, il peut fournir des informations sur la tension de l'appareil. A partir de ces informations, il est alors possible de calculer l'énergie consommée par le smartphone pendant une fenêtre temporelle. Et les informations fournies par Systrace, mentionnées dans la section 3.3, sont utilisées pour capturer la fréquence du CPU dans une fenêtre de temps donnée. Considérant que les CPUs ont des consommations différentes car leur fréquence varie, cette information complète celle fournie par Batterystats améliorant les estimations. Après avoir rassemblé les informations relatives aux composants actifs avec leur statut, les fréquences CPU et les appels de méthode, le fichier de profil de puissance est chargé. Le but de ce fichier étant d'estimer la décharge de la batterie de manière appropriée, les valeurs du profil de puissance sont données en courant (ampères). Le framework Android multiplie le courant par le temps pendant lequel le sous-système était actif et calcule la valeur mAh, qui est ensuite utilisée pour estimer la quantité de batterie déchargée par l'application / le sous-système. 23 Compte tenu des données précédentes, il est possible de calculer l'énergie consommée pour chaque invocation d'appel de méthode. Tout d'abord, étant donné un appel de méthode et sa terminaison, nous pouvons calculer la fenêtre temporelle globale Tw comme la différence arithmétique entre les deux instants temporels où ces deux événements se sont produits. Cependant, l'énergie consommée au cours d'une seule fenêtre temporelle n'est pas constante mais peut changer en raison d'une variation de la fréquence du processeur ou d'un changement d'état du composant. Par conséquent, nous avons divisé les fenêtres de temps en unités de temps plus petites, c'est-à-dire des trames de données T∆. Lorsque l'entrée dans une méthode est enregistrée, une nouvelle fenêtre temporelle Tw et une nouvelle période temporelle T∆ démarrent. A chaque fois qu'un composant change d'état, la trame temporelle existante T∆ est terminée et une nouvelle (pour le nouvel état) est démarrée. Lorsque le point de sortie vers une méthode est enregistré, alors la fenêtre temporelle correspondante Tw est terminée ainsi que la dernière trame temporelle T∆. De cette manière, chaque trame de données T∆ est caractérisée par des états de composants cohérents (par exemple, la fréquence CPU) et par un drain d'énergie cohérent (constant). Par exemple, si le CPU travaille à la fréquence maximale et qu'aucun des composants ne change d'état, les fenêtres temporelles Tw seront composées d'une seule trame temporelle T∆ de même durée, c'est-à-dire la différence entre la saisie de la méthode et sortir. Par conséquent, nous pouvons calculer l'intensité de puissance actuelle à chaque intervalle de temps T∆ comme suit : 𝐼∆ = ∑𝑐∈𝐶 𝐼∆,𝑐,𝑠 Où C’est l'ensemble des composants matériels du smartphone, I∆,c,s est l'intensité actuelle du composant c avec l'état s dans l'intervalle de temps actuel T∆. Après avoir calculé l'intensité du courant, il est possible de calculer l'énergie consommée dans un laps de temps, comme suit : J∆ = I∆ × V∆ × T∆. Où J∆ est l'énergie consommée en Joule, I∆ est l'intensité du courant en Ampère, V∆ est la tension de l'appareil en Volt et T∆ est la durée de la période en secondes. Enfin, l'énergie consommée par un appel de méthode peut être calculée en additionnant l'énergie consommée dans chaque période pendant laquelle l'appel de méthode était actif : 𝐽 = ∑𝑇 ∆ ∈𝑇𝑤 (𝐼∆ ×𝑉∆ ×𝑇∆ ) 24 3.4 Résultats La solution PETrA ne nécessite aucun équipement matériel supplémentaire mais elle a pu démontrer son efficacité et sa précision. Elle offre comme résultat final, un fichier CSV, contenant la signature de chaque méthode appelée, sa consommation énergétique moyenne calculée et la durée d’exécution de cette méthode. La figure 12 représente une partie du fichier résultant. Figure 12: Résultat de PETrA En plus, PETrA fourni une fonctionnalité très intéressante pour les développeurs des applications Android, à la suite du calcul de la consommation d’énergie pour chaque méthode, PETrA offre des statistiques pour définir les 5 méthodes les plus gourmandes en énergie. Dans le cas de notre exemple, les résultats sont présentés dans la figure 13, les cinq méthodes les plus consommatrice sont tous des méthodes qui exposent des classes d'interface utilisateur de base qui gèrent la disposition de l'écran et l'interaction avec l'utilisateur. 25 Figure 13: Statistiques de PETrA Pour continuer notre analyse et notre travail de recherche nous avons calculé la consommation d’énergie totale pour les dix applications comme le montre la figure 14, et nous avons divisé ces données en 5 applications plus consommatrices et 5 applications moins consommatrices. Figure 14: Consommation d'énergie totale pour chaque application 26 Nous avons appliqué aussi sur ces 10 applications l’outil APK-Analyzer [29] qui créé un fichier JSON pour chacune des applications dans lequel on trouve des informations sur l’APK, notamment les permissions utilisées et nous avons répondu à une des questions les plus courantes, « est-ce que les applications qui utilisent plus de permissions sont plus gourmande en énergie ? ». À partir des résultats que nous avons obtenus, nous avons créé le diagramme de la figure 15, les applications sont dans l’ordre décroissant de la consommation énergétique donc on peut remarquer que le nombre des permissions n’a aucun impact sur la consommation énergétique d’une application. Figure 15: Relation entre le nombre de permissions et la consommation énergétique 3.5 Conclusion Dans ce chapitre nous avons concentré sur la première partie du projet, qui est la solution de l’estimation de la consommation énergétique, nous reviendrons par la suite aux résultats de cette partie pour les utilisés dans notre analyse. 27 CHAPITRE 4 : ÉTUDE DE DÉPENDANCE ENTRE PERMISSIONS 4.1 Introduction Le but de ce chapitre est d’identifier des patrons de permissions communs et de vérifier jusqu’à quel point ces patrons sont suivis par les applications Android. Ce chapitre est organisé en quatre sections. La première section présente quelques définitions indispensables pour la compréhension de notre approche, ainsi que l’algorithme que nous avons utilisé. Dans la deuxième section, nous allons décrire notre approche d’extraction de patrons de permissions et nous présentons une étude de cas dans la troisième section. Nous clôturons ce chapitre par une conclusion. 4.2 Généralités Dans cette section nous allons présenter en détail la méthode utilisée pour l’extraction des patrons d’utilisation de permissions. 4.2.1 Clustering La notion de Clustering est une technique d'apprentissage non supervisée largement utilisée comme outil d'analyse de données. Le contexte est quand nous ne connaissons pas les regroupements naturels des données, les algorithmes de Clustering les identifient et peuvent produire une représentation basée sur certaines caractéristiques ou caractéristiques communes. Le Clustering est considéré une méthode statistique d'analyse des données. Elle vise à diviser un ensemble de données en différents « paquets » homogènes, dans le sens que les données de chaque sous-ensemble partagent des caractéristiques communes, qui correspondent le plus souvent à des critères de proximité : • Des différences intra-classe minimales pour obtenir des clusters. • Des différences inter-classes maximales afin d'obtenir des sous-ensembles bien différenciés. 28 Les algorithmes de Clustering permettent de partitionner les données en sous-groupes d'observations similaires. Ils peuvent être utilisés pour : • Mieux comprendre ces données ; • Faciliter la visualisation de ces données ; • Inférer des propriétés de ces données. 4.2.2 Les clusters Un cluster est un ensemble d’éléments. Cet ensemble est distinct des autres. Donc chaque élément d’un cluster a de fortes ressemblances avec les autres éléments de ce même cluster, alors qu’il doit être différent des éléments des autres clusters. Il existe deux types de clusters : • Les clusters durs qui sont totalement distincts les uns des autres, donc un élément d’un cluster n’appartient à aucun autre [30]. • Les clusters mous comportent des éléments dont l’appartenance est pondérée, donc un élément peut appartenir à plusieurs clusters en même temps [30]. Les deux propriétés importantes définissant un cluster pertinent sont : • Sa cohésion interne (que les éléments appartenant à ce cluster soient les plus proches possible) • Son isolation externe (que les éléments appartenant aux autres clusters soient les plus éloignés possible). Pour observer cela, plusieurs mesures sont associées à chaque cluster : • Sa densité (la masse d’objets par unité volumique), • Sa variance (le degré de dispersion des objets dans l’espace depuis le centre du cluster), • Sa dimension (typiquement son rayon ou son diamètre), • Sa forme (hyper sphérique/allongée/concave/convexe…) • Sa distance (par rapport aux autres clusters). 29 Si on regarde un cluster, il forme un ensemble, et cet ensemble occupe un espace. Ainsi, pour pouvoir mesurer l’appartenance d’un objet à un cluster et pouvoir prendre des décisions, il nous faut une fonction de mesure. On utilise souvent la distance euclidienne [30]. 4.2.3 Méthodes de Clustering On distingue trois grands types de méthodes de Clustering : • Les méthodes hiérarchiques, dont le but est de former une hiérarchie de clusters, de telle sorte que plus on descend dans la hiérarchie, plus les clusters sont spécifiques à un certain nombre d’objets considérés comme similaires [30]. • Les méthodes centoïdes, La méthode centroïde la plus classique est la méthode Kmeans, dont le but est d’identifier un certain nombre (K) de points représentatifs des clusters, auxquels sont ensuite associés l’ensemble des autres points, selon leur proximité avec les points représentatifs considérés. • Les méthodes à densité, dont le but est d’identifier, dans l’espace, les régions homogènes de fortes densités entourées par des régions de faible densité, qui formeront les clusters. DBSCAN est un exemple d’algorithme appartenant à cette catégorie. La figure 16 représente un exemple de données regroupées par 2 types de Clustering différents. Figure 16: Différence entre Clustering par DBSCAN et Clustering par k-means 4.2.4 Notion de Cluster basé sur la densité Lorsqu’on visualise les regroupements simples de points de la figure 17, il est possible de détecter facilement et sans aucune ambigüité les points qui appartiennent à un cluster et ceux qui n’appartiennent à aucun et qui sont donc non significatifs (on parle dans ce cas de bruit). 30 La raison principale qui nous permet de les reconnaître est qu’à l’extérieur des clusters la densité des zones de bruit est inférieure à celle de chacun des clusters. Dans ce qui suit, nous allons essayer de formaliser cette notion intuitive de cluster et de bruit dans une base de données D de points d’un espace S de k dimensions. On fixe, tout d’abord, epsilon 𝜀 le rayon du voisinage à étudier et MinPts le nombre minimum de points qui doivent être contenus dans le voisinage. L’idée clé du Clustering basé sur la densité est que pour chaque point d’un cluster, ses environs pour un rayon donné 𝜀 doit contenir un nombre minimum de points MinPts. Cette forme de voisinage est déterminée par le choix d’une fonction de distance de 2 points p et q, noté dist(p,q). Figure 17: Clustering par DBSCAN DBSCAN (Density-Based Spatial Clustering of Applications with Noise) est un algorithme qui a été conçu pour découvrir les clusters et le bruit dans une base de données spatiale [31]. Parmi ses points forts, c’est qu’il s’applique aussi bien dans un espace 2D, 3D euclidien ou aux espaces comportant de nombreuses dimensions. Pour trouver un cluster, DBSCAN commence par un point p choisit arbitrairement et recherche tous les points de densité accessibles à partir de p. Si p est un point central, la procédure ajoute p au cluster. Si p est un point de bordure alors aucun point n’est atteignable à partir de ce point et DBSCAN visitera le prochain point de la base de données. Grâce à l’utilisation des valeurs globale 𝜀 et MinPts, DBSCAN peut fusionner 2 clusters dans le cas où 2 clusters de densité différente se trouvent proches l’un de l’autre. Deux ensembles de points ayant au moins la densité la plus petite seront séparés l’un de l’autre si la distance entre les deux est plus large que 𝜀. En conséquence, un appel récursif de DBSCAN peut se révéler nécessaire pour les clusters détectés avec la plus haute valeur de MinPts [31]. Cela n’est pas forcément un inconvénient car l’application 31 récursive de DBSCAN reste un algorithme basique, et n’est nécessaire que sous certaines conditions. Ainsi, pour chaque objet que l’on ajoute, on a une zone de croissance qui va permettre d’étendre le cluster. Évidemment plus cette zone (une sphère) est grande, plus le cluster aura de chances de s’étendre. La notion de voisinage est la clé de cette méthode. On forme donc le cluster de proche en proche. La difficulté que nous pouvons rencontrer c’est le choix de la taille de la zone (rayon de la sphère) d’extension. 4.3 Extraction de patrons de permissions Dans cette section, nous détaillons notre approche pour détecter des patrons d'utilisation de permissions. Nous fournissons en premier lieu une définition plus approfondie des patrons d'utilisation de permissions et de leur représentation dans notre approche, ensuite nous décrivons l’utilisation de l’algorithme DBSCAN pour nous permettre d’identifier les patrons d’utilisation de permissions dans le contexte de notre base de données. Nous définissons un Patron d'Utilisation de Permissions (PUP) en tant que groupe (c'est-à-dire, un cluster) de permissions que le système Android utilise pour contrôler les privilèges d'accès à des informations sensibles par les applications. Un Patron d'Utilisation de Permissions (PUP) est un ensemble de permissions que le développeur doit déclarer lors de l'implémentation de l'application. Ces permissions spécifient les ressources sensibles que l'application peut utiliser. Cependant, il est impossible d'analyser tous les scénarios d'utilisations possibles des permissions, en raison de leurs grands nombres et leurs utilisations variées. Nous avons besoin ainsi d'une technique permettant d'identifier les patrons d'utilisation de permissions indépendamment du scénario de déclaration de la permission dans le code source de l’application. Par conséquent, notre méthode d'identification des patrons d'utilisation de permissions doit : • Capturer les interférences dans les relations de co-utilisation entre les permissions des applications • Isoler les bruits par rapport au degré de relations de co-utilisation dans les patrons détectés. Notre approche prend en entrée les applications à étudier et les permissions utilisées par chacune des applications. Les résultats de notre approche sont un ensemble de patrons d'utilisation de permissions. L'approche de détection des patrons d'utilisation de permission se 32 déroule comme suit. Comme première étape, le fichier manifeste.xml de l'application est analysé de manière statique pour extraire les permissions utilisées par une application. L'analyse statique est réalisée en utilisant l'outil APK-Analyzer. Pour la deuxième étape, nous calculons les vecteurs d'utilisation pour l'application. Chaque application est caractérisée par un vecteur d'utilisation qui code les informations liées aux demandes de permissions de l’application. Enfin dans la dernière étape, nous utilisons l'analyse de Clustering pour regrouper les demandes de permissions les plus souvent co-utilisées par les applications. Dans notre approche, nous représentons l'ensemble de données des demandes de permissions des applications comme une matrice binaire avec N le nombre de lignes étant le nombre d'applications, et D le nombre de colonnes étant le nombre total de permissions possibles x∈{0, 1}𝑁×𝐷 . L'entrée 𝑥𝑖𝑑 = 1 signifie que l'application i demande la permission d. La ligne 𝑥𝑖∗ ∈ {0, 1}𝐷 représente toutes les permissions requises de l'application i. Par exemple, dans le tableau 2, nous représentons une matrice d'utilisation de sept permissions par cinq applications. Le vecteur d’utilisation de permissions montre que l’application 1 utilise les quatre permissions suivantes∶ 𝑝𝑒𝑟𝑚1, 𝑝𝑒𝑟𝑚2 , 𝑝𝑒𝑟𝑚5 , et 𝑝𝑒𝑟𝑚6, on peut remarquer que ces permissions sont également utilisées par l’application 2 et l’application 4. Tableau 2: Matrice d'utilisation de cinq applications avec sept permissions App/perm 𝑝𝑒𝑟𝑚1 𝑝𝑒𝑟𝑚2 𝑝𝑒𝑟𝑚3 𝑝𝑒𝑟𝑚4 𝑝𝑒𝑟𝑚5 𝑝𝑒𝑟𝑚6 𝑝𝑒𝑟𝑚7 𝑎𝑝𝑝1 1 1 0 0 1 1 0 𝑎𝑝𝑝2 1 1 1 0 1 1 0 𝑎𝑝𝑝3 0 1 1 0 1 0 0 𝑎𝑝𝑝4 1 1 1 0 1 1 0 𝑎𝑝𝑝5 0 0 0 1 0 0 1 DBSCAN construit des groupes de permissions en regroupant ceux qui sont proches les unes des autres et forment une région dense. À cette fin, nous définissons la distance euclidienne entre deux permissions p et q : 2 𝑑Eucl (𝑝, 𝑞)=√∑𝑁 𝑖=1(𝑝𝑖 − 𝑞𝑖 ) 33 DBSCAN a besoin ainsi de deux paramètres pour effectuer le Clustering. Le premier paramètre est le nombre minimum de permissions par un cluster. Nous l'avons fixé à deux, de sorte qu'un patron d'utilisation doit inclure au moins deux permissions. Le deuxième paramètre, epsilon 𝜀, est la distance maximale à l'intérieur de laquelle deux permissions peuvent être considérées comme voisines l'une de l'autre. En d'autres termes, la valeur epsilon contrôle la densité minimale qu'une région en cluster peut avoir. Plus la distance entre les permissions d'un cluster est courte, plus le cluster est dense. Dans DBSCAN, la valeur du paramètre epsilon influence énormément les clusters résultants. En effet, dans notre approche, pour epsilon égal à 0, ça signifie que chaque cluster doit contenir uniquement des permissions qui sont complètement similaires (c'est-à-dire que la distance entre les permissions appartenant au même cluster doit être 0). La relaxation du paramètre epsilon va détendre la contrainte sur la densité demandée dans les clusters cherchés. D'une part, si nous attribuons à epsilon une petite valeur fixe, cela produira des patrons d'utilisation très denses. Cependant, les patrons d'utilisation résultants ne captureront pas les interférences dans les relations de co-utilisation entre les permissions de l’application : un patron d'utilisation inclura seulement les permissions qui sont toujours co-utilisées ensemble. D'autre part, en fixant epsilon à une valeur relativement grande, DBSCAN risque de produire des patrons d'utilisation qui incluent certains bruits. 4.4 Étude de cas Dans notre approche, nous avons exploité un logiciel open source, SPMF [32], qui représente une bibliothèque d’exploration de données écrites en Java et propose des implémentations de 224 algorithmes d’exploration des données. Nous avons utilisé SMPF à partir des lignes de commande pour appliquer l’algorithme de DBSCAN comme illustre la figure 18, mais avant tout, nous avons créé notre base de données. Figure 18: Ligne de commande pour exécuter DBSCAN 34 4.4.1 Ensemble de données Nous avons commencé à partir d'un ensemble de données existant exploré depuis le Google Play Store en 2014 par un outil appelé PlayDrone[33]. Ce dernier est un système qui utilise diverses techniques de piratage pour contourner la sécurité de Google afin d'explorer avec succès Google Play. Pour l'étude de l'utilisation de la permission, nous avons nettoyé l'ensemble de données pour conserver uniquement les applications disponibles. Pour réaliser cette étape, nous avons utilisé APK-Downloader qui est un script écrit en Python et sert à télécharger un nombre illimité d’APKs. Avant le téléchargement, nous avons analyser les fichiers JSON de la base de données de PlayDrone pour avoir un lien de chaque APK appelé (share-url) avec lequel on pourrait faire le téléchargement. À partir de ces liens nous avons apporté quelques modifications à APK-Downloader pour qu’il puisse distinguer les APKs disponibles et les télécharger d’un seul coup. Notre base de données contient plus que 15000 applications utilisant plus que 200 permissions différentes. Pour chaque application, nous extrayons les permissions utilisées par cette dernière. Pour ce faire, nous décomposons l'APK de l'application et nous décodons les ressources en utilisant l’outil APK-Analyzer qui est basé sur Apktool [34]. Nous avons donc créé un outil qui utilise les fichiers JSON résultant de APK-Analyzer pour créer la matrice x ∈{0, 1}𝑁×𝐷 expliqué dans la section 4.3. 4.4.2 Application du Clustering À partir de la matrice x ∈{0, 1}𝑁×𝐷 , notre outil écrit en Java créé un fichier texte sous une forme bien déterminé pour qu’il soit l’entrée de l’algorithme DBSCAN. Pour simplifier, nous avons créé une simple petite base de données composé de 11 applications et de 7 permissions et nous avons appliqué notre approche pour avoir le fichier texte montré dans la figure 19. Les premières lignes sont réservées pour les noms des applications de la base de données, ensuite, chaque permission est décrite par deux lignes. La première ligne contient la chaîne "@NAME=" suivie du nom de la permission, et la deuxième ligne fournit une liste de valeurs séparées par des espaces simples. Ces valeurs correspondent respectivement aux applications, si la première application utilise la permission alors on trouve comme première valeur 1. 35 Figure 19: Entrée de l'algorithme DBSCAN En fixant MinPts=2 et 𝜀=2 nous avons appliqué le Clustering par DBSCAN et nous avons eu 2 patrons d’utilisation des permissions. Le premier patron contient {p3, p6, p1, p4, p7} et le deuxième contient {p5, p2}. Le fichier de sortie de DBSCAN est présenté par la figure 20. Figure 20: Sortie de l'algorithme DBSCAN Nous avons donc appliqué la même démarche sur la grande base de données de 15000 applications et nous avons remarqué qu’à chaque fois on augmente la valeur de 𝜀 le nombre de Clusters diminue comme illustre la figure 21, on trouve parfois des exceptions qui sont dues aux bruits. 36 Figure 21: Dépendance du nombre de Clusters à la valeur d'Epsilon 4.4.3 Métriques Sachant qu’un patron d’utilisation de permissions représente un groupe de permissions qui sont toujours co-utilisées ensemble et une application associée à un patron implique que cette application utilise une ou plusieurs permissions de ce patron, nous avons définis plusieurs métriques pour analyser les résultats obtenus : • Pattern Usage Cohesion (PUC) : PUC est inspiré de [35], les auteurs ont utilisé cette métrique pour évaluer la co-utilisation des bibliothèques dans un patron d’utilisation. Dans notre cas nous avons besoin d’évaluer la co-utilisation des permissions dans un patron d’utilisation de permissions, nous avons donc définit PUC pour un patron d’utilisation p comme suit : PUC(p) = ∑𝑎𝑝𝑝 𝑃𝑒𝑟𝑚(𝑝∩𝑎𝑝𝑝) 𝑃𝑒𝑟𝑚(𝑝) 𝐴𝑝𝑝(𝑝) Avec app est l’une des applications associées à p, App(p) est le nombre d’application associée à ce patron, Perm(p) est le nombre de permissions dans ce patron et Perm(p∩ 𝑎𝑝𝑝) est le nombre de permissions de ce patron utilisées par l’application app. Les valeurs PUC sont dans la plage [0,1]. Plus les permissions d’un même patron sont coutilisées ensemble, plus la valeur de PUC est grande. C'est-à-dire, un patron d’utilisation a 37 une cohésion d’utilisation est dite idéale (PUC=1) si tous ses permissions sont toujours utilisés ensembles. Figure 22: Exemple de calcul de PUC • Application Conformity to Patterns (ACP): Nous nous sommes intéressés au calcul du score de conformité d’une application aux patrons d’utilisation de permissions pour connaitre si les applications suivent des patrons d’utilisations de permissions et jusqu’à quels points ces patrons suivis sont respectés. Pour calculer le score de conformité d’une application aux patrons d’utilisation de permissions auxquels elle est associée suite à l’application de notre approche, nous avons définit la métrique suivante : ACP (app) = ∑𝑝 𝑃𝑒𝑟𝑚(𝑝∩𝑎𝑝𝑝) 𝑃𝑒𝑟𝑚(𝑝) 𝑃(𝑎𝑝𝑝) Avec P(app) est le nombre de patrons auxquels l’application est associée. Une application ayant ACP=1 est une application qui utilise toutes les permissions dans les patrons auxquels elle est associée. Elle est donc conforme aux patrons. 38 Figure 23: Exemple de calcul de la valeur ACP Par exemple, dans la figure 23 qui présente la sortie de notre script de calcul de conformité, {4=1} signifie que l’application org.premiumsecurity utilise une seule permissions du Cluster numéro 4. • Generalizability of a Pattern (GP): Un patron d’utilisation des permissions est dit généralisable s’il est caractérisé par une valeur de PUC élevé dans le contexte de différentes bases de données. Pour décider si un patron est généralisable ou non, nous avons divisé notre base de données en 3 parties (Base1, Base2, Base3) et nous avons appliqué notre approche sur chacune de ces bases de données pour avoir son ensemble de patrons d’utilisation des permissions. Puis, nous avons cherché les patrons généralisables. Nous avons commencé par calculer les valeurs de PUC des patrons de Base1, les résultats sont illustrés dans la figure suivante : 39 Figure 24: Calcul de la valeur PUC pour Base1 Avec une valeur MinPts=2 et 𝜀=10 nous avons obtenus 3 patrons d’utilisation des permissions, deux de ces patrons ont des valeurs de PUC élevés : {READ_CALENDAR, WRITE_ CALENDAR} avec PUC=0.92105263 {READ_EXTERNAL_STORAGE, WRITE_ EXTERNAL_STORAGE} avec PUC=0.99734247 Ensuite nous avons calculé les valeurs de PUC des trois patrons dans les autres bases de données. Nous avons obtenu les résultats dans les figures 25 et 26 suivantes : Figure 25: Calcul de la valeur PUC pour Base2 {READ_CALENDAR, WRITE_ CALENDAR} avec PUC=0.90957445 {READ_EXTERNAL_STORAGE, WRITE_ EXTERNAL_STORAGE} avec PUC=0.99666 40 Figure 26: Calcul de la valeur PUC pour Base3 {READ_CALENDAR, WRITE_ CALENDAR} avec PUC=0.91129035 {READ_EXTERNAL_STORAGE, WRITE_ EXTERNAL_STORAGE} avec PUC=0.9968355 Les résultats obtenus montrent que ces deux patrons sont généralisables, c'est-à-dire les permissions qu’ils contiennent sont généralement utilisés ensemble. Pour l’autre patron qui contient 228 permissions, il n’est pas généralisable puisque la co-utilisation de ses permissions est très faible. Toutes les figures précédentes de cette partie sont les résultats des algorithmes que nous avons écrits pour calculer les métriques et pouvoir analyser nos données. Ces algorithmes sont écrits en Java et ils prennent comme entrée la sortie de l’algorithme DBSCAN qui est un fichier texte contenant les patrons d’utilisation des permissions. L’algorithme de GP nécessite aussi le fichier CSV qui contient la matrice de la base de données dans laquelle nous testons la généralisabilité des patrons. 4.4.4 Recommandation des permissions À la fin de notre projet, nous avons essayé de trouver la relation entre les permissions utilisées par une application Android et sa consommation énergétique. En plus, nous avons cherché à aider le développeur en lui proposant des permissions probablement utiles pour son application et à augmenter la conscience de l’utilisateur sur l’importance des permissions et leur impact sur l’autonomie de la batterie de son mobile. Pour cela, nous avons considéré les dix applications du troisième chapitre puisque nous avons déjà les valeurs de la consommation énergétique de chacune d’entre elles. Pour chaque application, nous avons pris la liste des permissions utilisées et nous l’avons divisé par deux, la première partie présente l’entrée du système de recommandation (𝐿𝑆𝑦𝑠𝑅𝑒𝑐 ) et l’autre partie 41 présente les permissions à recommander (𝐿𝑃𝑅𝑒𝑐 ), le principe est de faire semblant qu’on ne connaît que la première partie et on doit pouvoir faire des recommandations de permissions à cette application qui existent réellement dans la deuxième partie. Nous avons écrit un algorithme qui suit les étapes suivantes : à partir de la grande base de données, on prend les patrons d’utilisation à condition que chacun de ces patrons contient au moins une permission de 𝐿𝑆𝑦𝑠𝑅𝑒𝑐 et on calcule l’indice de recommandation de chacune des permissions des patrons considérés. Pour avoir l’indice de recommandation d’une permission, au début, on calcule les distances euclidiennes entre cette permission et chacune des permissions dans la 𝐿𝑆𝑦𝑠𝑅𝑒𝑐 , puis on prend la valeur minimale de ces distances, cette valeur présente l’indice de recommandation, elle s’écrit donc comme suit : IndRec(p)= min {𝑑𝑒𝑢𝑐𝑙 (𝑝, 𝑝𝑒𝑟𝑚𝑖 ) / 𝑝𝑒𝑟𝑚𝑖 ∈ 𝐿𝑆𝑦𝑠𝑅𝑒𝑐 } Nous classons les permissions des patrons en fonction de leur indice de recommandation, plus le IndRec est faible, plus la permission est susceptible d’être parmi la liste des permissions à recommander. La figure 27 présente une partie de la sortie de notre algorithme, pour une application org.iii.romulus.meridian, avec Input représente 𝐿𝑆𝑦𝑠𝑅𝑒𝑐 et GroundTruth représente 𝐿𝑃𝑅𝑒𝑐 . Figure 27: Exemple de résultat de recommandation Pour évaluer le classement, nous avons défini deux métriques : Recall rate@k = ∑𝑎𝑝𝑝 𝑖𝑠𝐶𝑜𝑟𝑟𝑒𝑐𝑡(𝑎𝑝𝑝,𝑇𝑜𝑝−𝑘) 𝑁 Avec Top-k est la liste des k permissions ayant les plus faibles valeurs de IndRec, en se basant sur [36] on peut choisir une valeur de k= 1,3,5,7 ou 10, et on a N le nombre d’application qui 42 cherchent des recommandations. isCorrect(app,Top-k)=1 si au moins l’une des permissions dans Top-k est utilisée dans app. Mean reciprocal rank (MRR) = 1 𝑁 ∑𝑁 𝑖=1 1 𝑟𝑎𝑛𝑘𝑖 Avec 𝑟𝑎𝑛𝑘𝑖 est le rang de la première recommandation pertinente pour l’application, c'est-àdire, le rang de la première permission qui existe réellement dans 𝐿𝑃𝑅𝑒𝑐 . Figure 28: Recommandation en se basant sur Base1 Figure 29: Recommandation en se basant sur Base2 Figure 30: Recommandation en se basant sur Base3 Les figures 28, 29 et 30 montrent que le changement de la base de données n’a pas changé le fait que l’algorithme a réussi à faire des recommandations pertinentes seulement pour les applications les moins consommatrices en énergie, c'est-à-dire, les applications gourmandes en énergie ne suivent pas les patrons d’utilisation des permissions. Pour la valeur de Recall Rate, nous avons toujours eu la même valeur, car, sur les dix applications, même si on change la base de données et par la suite, on change les patrons d’utilisation trouvé, on a pu trouver que deux recommandations pertinentes qui sont parmi les Top-k. Exemple des recommandations pertinentes faites par notre algorithme : • 𝐿𝑆𝑦𝑠𝑅𝑒𝑐 ={INTERNET} l’algorithme a recommandé ACCESS_NETWORK_STATE, 43 • 𝐿𝑆𝑦𝑠𝑅𝑒𝑐 ={READ_EXTERNAL_STORAGE} nous avons eu comme recommandation pertinente WRITE_ EXTERNAL_STORAGE • 𝐿𝑆𝑦𝑠𝑅𝑒𝑐 = {INTERNET, ACCESS_NETWORK_STATE, RESTART_PACKAGES} la recommandation été PACKAGE_USAGE_STATS. 4.5 Conclusion Ce chapitre présente une nouvelle technique qui identifie les patrons d’utilisations de permissions. Nous avons appliqué quelques métriques pour analyser les patrons trouvés tels que la co-utilisation des permissions, la généralisabilté du patron et la conformité. Nous avons proposé en plus une méthode de recommandation des permissions qui a prouvé son efficacité dans les cas des applications non gourmande en énergie. 44 CHAPITRE 5 : CONCLUSION ET PRESPECTIVES Aujourd'hui, plus de 2 milliards d'utilisateurs utilisent des smartphones et des tablettes pour effectuer leurs activités quotidiennes. De ce fait, la consommation d'énergie devient un facteur critique de la satisfaction des utilisateurs, pour cela, nous proposons PETRA, un outil spécifique à Android pour estimer la consommation énergétique des applications mobile, qui s’appuie sur des outils accessibles au public. Nous avons donc utilisé des scénarios représentatifs pour exécuter les applications et estimer la consommation d’énergie de chaque méthode appelée, ensuite, nous avons additionné ces valeurs pour avoir la valeur d’énergie consommée par chaque application au cours de son test. Nous avons proposé aussi une approche qui permet d’identifier des patrons d’utilisation de permissions. L’approche décrite est basée sur l’algorithme de Clustering DBSCAN, il s’agit d’un algorithme basé sur la densité, c'est-à-dire les clusters sont formés en reconnaissant des régions denses de points dans l'espace de recherche. L'idée principale est que chaque point à regrouper doit avoir au moins un nombre minimum de points dans son voisinage. En d'autres termes, l'algorithme regroupe uniquement les points pertinents et omet les points bruyants. Dans notre approche, nous représentons l'ensemble de données des demandes de permissions des applications par une matrice binaire avec N le nombre d'applications, et D le nombre total de permissions possibles x ∈ {0, 1}𝑁×𝐷 . Les résultats de notre approche sont un ensemble de patrons d'utilisations de permissions. L'approche de détection des patrons d'utilisation de permission se compose de trois phases : L’analyse du fichier manifeste.xml de chaque application pour extraire les permissions utilisées, le calcul du vecteur d’utilisation de permissions pour chacune des applications étudiées et enfin l’application de la méthode de Clustering pour regrouper les demandes de permissions les plus souvent co-utilisées par les applications. Nous avons réalisé une étude de cas sur plus de 200 permissions pour plus de 15 000 applications de Google Play Store. Notre étude de cas avait pour but d’identifier des patrons d’utilisation de permissions et de vérifier jusqu’à quel point les patrons identifiés sont suivis par les applications. Nous avons calculé pour chaque patron un score de co-utilisation PUC. 45 Selon les valeurs de PUC trouvées pour un patron dans différentes bases de données, nous avons pu déterminer les patrons généralisables. Nous avons calculé aussi pour chaque application un score de conformité aux patrons pour savoir à quel niveau ces patrons sont suivies par les applications. Nous avons également effectué une étude empirique des permissions dans les applications Android. Cette étude avait pour but de trouver une méthode de recommandation des permissions. L’étude a démontré que les recommandations faites, sont pertinentes que pour les applications non-consommatrices en énergie. Notre étude est bénéfique pour les utilisateurs et les développeurs puisqu’elle permet à l’utilisateur de comprendre les permissions et de consacrer plus d’attention à ces dernières pour protéger son périphérique et ses informations personnelles. Quant aux développeurs, elle leur permet des recommandations pertinentes en assurant le bon fonctionnement des applications. Malgré ces résultats très encourageants, il existe de nombreuses pistes d’amélioration qui méritent d’être explorées. Dans de futurs travaux, nous comptons à calculer la consommation énergétique d’autre application pour généraliser nos résultats et augmenter aussi la base de données pour avoir plus des patrons d’utilisation de permissions généralisables. 46 Bibliographie [1] IDC, (2015) IDC: Smartphone OS Market Share. Disponible en ligne à : http://www.idc.com/promo/smartphone-market-share/os (Consulté : 20 Septembre 2021). [2] A. Pathak, Y. Hu, and M. Zhang. Where is the energy spent inside my app? fine grained energy accounting on smartphones with eprof. In EuroSys’12, pages 29–42, 2012. [3] A. Pathak, A. Jindal, Y. Hu, and S. P. Midkiff. What is keeping my phone awake? characterizing and detecting no-sleep energy bugs in smartphone apps. In MobiSys’12, pages 267–280, 2012. [4] K. W. Y. Au, Y. F. Zhou, Z. Huang, and D. Lie. Pscout: analyzing the android permission specification. In ACM Conference on Computer and Communications Security (CCS), pages 217–228. [5] A. Porter Felt, E. Ha, S. Egelman, A. Haney, E. Chin, and D. Wagner. Android Permissions: User Attention, Comprehension, and Behavior. In Proceedings of the 8th Symposium on Usable Privacy and Security, 2012. [6] Mitacs. https://www.mitacs.ca/fr/news-type/media-kit?language=fr [7] Université Laval. https://immigrantquebec.com/fr/identifier/universite-laval [8] Architecture du système Android. https://www.geeksforgeeks.org/android-architecture/ [9] Radoniaina ANDRIATSIMANDEFITRA RATSISAHANANA. Caractérisation et détection de malware Android basées sur les flux d’information. Thèse de doctorat. [10] Android Developpers, Requesting Permissions, Disponible en ligne à : https://developer.android.com/guide/topics/permissions/requesting.html [11] Android developpers, disponible en ligne à : https://developer.android.com/guide/topics/manifest/uses-permission-element.html (Consulté : 20 Septembre 2021). 47 [12] Android, (2017) Application Security, disponible en ligne à : https://source.android.com/security/overview/app-security (Consulté: 20 Septembre 2021). [13] Android Marshmallow, (2016) Android – Marshmallow. Disponible en ligne à : https://www.android.com/versions/marshmallow-6-0/?gclid=CjwKEAiAgKu2BRDu1OGw3KXokwSJAB_Yy2QVhdelA0Y2awKEncwMwxQp8_wTKfH8FlO_KG2N9pWWBoCp_Pw_ wc (Consulté : 21 Septembre 2021). [14] R. Amadeo, (2015) Android 6.0 Marshmallow, thoroughly reviewed. Disponible en ligne à : http://arstechnica.com/gadgets/2015/10/android-6-0-marshmallow-thoroughly- (Consulté : 21 Septembre 2021). [15] J. Flinn and M. Satyanarayanan, “Powerscope: A tool for profiling the energy usage of mobile applications,” in WMCSA’99, 1999, pp. 1–9. [16] Moonsoon-solutions. power monitor. [Online]. Available: http://www.msoon.com/LabEquipment/PowerMonitor/ [17] M. Linares-Vasquez, G. Bavota, C. Bernal-C ´ ardenas, R. Oliveto, ´ M. Di Penta, and D. Poshyvanyk, “Mining energy-greedy api usage patterns in android apps: An empirical study,” in Proceedings of the 11th Working Conference on Mining Software Repositories, ser. MSR 2014. New York, NY, USA: ACM, 2014, pp. 2–11. [Online]. Available: http://doi.acm.org/10.1145/2597073.2597085 [18] T. Do, S. Rawshdeh, and W. Shi, “ptop: A process-level power profiling tool,” in in Proceedings of the 2nd Workshop on Power Aware Computing and Systems (HotPower09, 2009. [19] S. Hao, D. Li, W. G. J. Halfond, and R. Govindan, “Estimating mobile application energy consumption using program analysis,” in Proceedings of the 2013 International Conference on Software Engineering, ser. ICSE ’13. Piscataway, NJ, USA: IEEE Press, 2013, pp. 92–101. [Online]. Available: http://dl.acm.org/citation.cfm?id=2486788.2486801 [20] D. Di Nucci, F. Palomba, A. Prota, A. Panichella, A. Zaidman and A. De Lucia, "PETrA: A Software-Based Tool for Estimating the Energy Profile of Android Applications," 2017 IEEE/ACM 39th International Conference on Software Engineering Companion (ICSE-C), 2017, pp. 3-6, doi: 10.1109/ICSE-C.2017.18. 48 [21] D. Di Nucci, F. Palomba, A. Prota, A. Panichella, A. Zaidman and A. De Lucia, "Softwarebased energy profiling of Android apps: Simple, efficient and reliable?," 2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER), 2017, pp. 103-114, doi: 10.1109/SANER.2017.7884613. [22] M. Frank, B. Dong, A. P. Felt, and D. Song. Mining permission request patterns from Android and Facebook applications. In Proc. of the Data Mining (ICDM), 2012 IEEE 12th International Conference on, 2012. [23] BatteryStats. https://developer.android.com/studio/profile/battery-historian.html [24] Systrace. https://developer.android.com/studio/profile/systrace-commandline.html [25] Dmtracedump. https://developer.android.com/studio/profile/traceview.html [26] Monkey. http://tinyurl.com/gvnxdd3 [27] MonkeyRunner. https://developer.android.com/studio/test/monkeyrunner/index.html [28] APK-Downloader. https://github.com/HamidrezaMoradi/APK-Downloader [29] APK-Analyzer. https://github.com/MartinStyk/ApkAnalyzer#Analyze_APKs [30] Matthieu FOUQUIN (2004) DATAMINING C4.5 – DBSCAN. Disponible en ligne à : http://devezeb.free.fr/downloads/ecrits/datamining.pdf (Consulté : 20 Septembre 2021) [31] M. Ester, H. peter Kriegel, and X. Xu, “A density-based algorithm for discovering clusters in large spatial databases with noise,” in International Conference on Knowledge Discovery and Data Mining, 1996, pp. 226–231. [32] SPMF. https://www.philippe-fournier-viger.com/spmf/ [33] Nicolas Viennot, Edward Garcia, and Jason Nieh. 2014. A measurement study of google play. SIGMETRICS Perform. Eval. Rev. 42, 1 (June 2014), 221–233. DOI: https://doi.org/10.1145/2637364.2592003 [34] Apktool. Disponible en ligne à : https://ibotpeaches.github.io/Apktool/ (Consulté : 20 Novembre 2021) 49 [35] SAIED, Mohamed Aymen; OUNI, Ali; SAHRAOUI, Houari A.; KULA, Raula Gaikovina; INOUE, Katsuro; and LO, David. Improving reusability of software libraries through usage pattern mining. (2018). Journal of Systems and Software. 145, 164-179. Research Collection School Of Information Systems. [36] Avazpour, I., Pitakrat, T., Grunske, L., Grundy, J., 2014. In: Robillard, M.P., Maalej, W., Walker, R.J., Zimmermann, T. (Eds.), Recommendation Systems in Software Engineering. Springer Berlin Heidelberg, pp. 245–273. https://doi.org/10.1007/978- 3-642-45135-5_10 . 50