rÉpublique algÉrienne dÉmocratique et populaire … · d’un nombre toujours grandissant...
TRANSCRIPT
RÉPUBLIQUE ALGÉRIENNE DÉMOCRATIQUE ET POPULAIRE
Ministère de l’Enseignement Supérieur et de la Recherche Scientifique
Université Echahid Hamma Lakhdar –El Oued
Faculté des Sciences et Technologie
Département de Mathématiques et d’Informatique
Order №:
№ Series:
Mémoire de Master LMD Option : Intelligence Artificielle et Système Distribué
Une approche comportementale pour la
détection des fuites des données
Personnelles en Android
Réalisé par:
BOUSBIA SALAH Salima
CHAIB Yousra
Soutenu le 04 juin 2015
Membres du jury :
Examinateur 1 : Mr. Khabech Moheb Edin Université d’El-Oued
Examinateur 2 : Mr. Laouid Abd El Kader Université d’El-Oued
Encadreur : Mr. Gherbi Kaddour Université d’El-Oued
2014/2015
Une approche comportementale pour la détection des
fuites des données personnelles en Android
Encadreur: GHERBI K.
Étudiants : BOUSBIA SALAH S. et CHAIB Y.
Département de mathématiques et l’informatique, Université d’EL-Oued, Algérie
Remerciement
Tout d’abord, nous remercions notre dieu qui nous donne la force pour accomplir ce
modeste travail.
Nous adressons nos plus sincères remerciements à notre encadreur monsieur GHERBI
Kaddour pour son aide et ses conseils précieux.
Nous remercions chaleureusement les membres du jury qui nous ont fait l’honneur de
participer à notre jury et d’accepter de juger ce travail.
En fin, nous voulons encore remercier tous ceux qui nous ont consolidé et nous ont
encouragé entre autre : les parents et les amis.
Résumé
L'environnement Android est devenu le système d’exploitation de première
importance pour un nombre considérable d’équipements, notamment les smartphones et les
tablettes ainsi que des futurs équipements. Cet environnement offre aux usagers une multitude
d’applications à télécharger depuis le market officiel fourni par Google ou des Market
alternatifs. Ces applications peuvent être de toutes sortes afin de divertir ou d’aider les
usagers. Le comportement de ces applications et leur impact sur les données personnelles des
usagers (les conteurs les SMS ; les MMS, les mails, le journal d’appel, les identifiants des
comptes utilisateurs, les détails des contacts et les informations stockées par les applications)
des usagers, ainsi que les fonctions sensibles associées aux capteurs et à la téléphonie, ne sont
pas vérifiés par les fournisseurs de ces plateformes de téléchargement. Notre proposition est
basée sur l’analyse comportementale des applications qui consisté à monitorer le
comportement des applications dans un environnement de contrôle. Cette analyse, permet de
continuer à renforcer la sécurité Android. Dans ce mémoire, nous proposons une nouvelle
approche de détection des malwares. Dans un premier temps, nous appliquons le modèle
d’apprentissage SVM. Puis, nous décrivons nos propres algorithmes, nommé ACDM, pour
observer le comportement du programme. Enfin, il nous semblerait que les résultats de cette
étude sont concluants expérimentalement.
Mots-clés: Android, Analyse comportementale, Application Malware, Sécurité Android,
Détection, Apprentissage, SVM.
Abstract
The android environment has become an important operation system for considering
number of devices, including smartphones and tablets. This environment offers to users a
multitude of applications which download from the official market provided by Google or
other alternative Market. The application can be of all kinds to entertain or help users. The
behavior of these applications and their impact on users personal data (SMS, MMS, emails,
the call log, the IDs of user accounts, contact details and information stored by applications)
users and the functions associated with sensitive sensors and telephony, is not verified by the
suppliers of those downloading platforms. Our proposed is based on applications behavioral
analysis applications that able to monitor the behavior of applications in a controlled
environment. This analysis, in aimed to further strengthen of the Android security. In this
thesis we propose a new approach to malware detection. First, we implement the learning
model SVM. Then, we describe our own algorithms, named MDC, to observe the behavior of
the program. Finally, we, it seems to us that the results of this study.
Keywords: Android, Behavioral Analysis, Application malware, Learning model, SVM,
Android Security, Detection.
ملخص
من األنظمة المهمة لعدد كبير من األجهزة، بما في ذلك الهواتف الككيفة ألاألجهفزة ndroid Aأصبح نظام التشغيل
اللوحية. تقفدم ذفكا البي فة لمدفتخدميها العدنفد مفن الت بيقفاي للترميفل جبفر المت فر الروفمي الفك. نفوفرا جوجفل. حيف تفوفر
لوك ذفكا الت بيقفاي ألأهرذفا جلفب البيانفاي ت بيقاي مختلفة للترفيه أأل التعليم ألغيرذا من الم االي. في ذكا البرف نفد س وف
الشخصففية لالروففاال، البرنففد انل،ترألنففي، وفف ل الم،المففاي، تفاصففبل انتصففام، ألالمعلومففاي المخزنففة مففن بففل الت بيقففاي
األخرى(، كما ند س الوظاا المرتب ة بأجهزة. فإ تراحنا نقوم جلب ترليل أل صد وفلوك الت بيقفاي ففي البي فة المد ألوفة،
نصف هفم، SVMاألال جلينفا ا ننففك نمفوذت لتعلفيم .لل،ش جن البرامج الضفا ة جدند نهج الي نت رقاألطرألحة في ذكا
خيفرا ترليفل ألجفرل النتفااج أجلب برنام نا الخاص بمرا بة الدلوك. ألACDM االوم اطلقنا الصدد ذدا ألفي. خوا زمياتنا
. الت رنبية
ال،ش ndroid ,A امن الـ ,البرم ياي الخبيثه,الترليل الدلوكي , Androidنظام التشغيل :الكلمات المفتاحية
SVMالتعلم ،
Glossaire
ACDM: Approche Comportementale Détection Malware.
UID System: User ID System.
OEM: Originally Equiped Machine.
API: Application Programming Interface.
APK: Android application package.
Server C&C: Commande and Contrôle Serveur.
Android SDK: Software Development Kit.
IDS: Intrusion Detection System.
SVM: Support Vectore Machines.
AVDS: The Automated Vulnerability Detection System.
i
Table des matières
TABLE DES ILLUSTRATIONS ............................................................................................ IV
INTRODUCTION GENERALE ................................................................................................ 1
CHAPITRE 1 ETAT DE L’ART ........................................................................................... 3
Introduction ................................................................................................................................ 3
1.1 Système Android ............................................................................................................. 4
1.1.2 Applications Android .................................................................................................. 6
1.2 Sécurité du système Android ........................................................................................... 7
1.2.1 Permissions .................................................................................................................. 7
1.2.2 Signature des applications ........................................................................................... 9
1.3 Limite des mécanismes de sécurité Android ................................................................... 9
1.3.1 Abus de permission ..................................................................................................... 9
1.3.2 Permissions : attaques par délégation et attaques par collusion .................................. 9
1.3.3 Communication entre composants via les intents ...................................................... 10
1.3.4 Failles logicielles : élévation de privilège ................................................................. 10
1.4 Malware Android .......................................................................................................... 11
1.4.1 Définitions ................................................................................................................. 11
1.4.2 Évolution des malware .............................................................................................. 12
1.5 Renforcement de la sécurité sous Android .................................................................... 13
1.5.1 Protection des ressources sensibles ........................................................................... 13
1.5.2 Communication entre processus et entre composants ............................................... 15
1.5.3 Abus des permissions ................................................................................................ 17
Table des matières
ii
1.6 Classification et détection de malware .......................................................................... 18
1.7 Analyse d’applications Android .................................................................................... 18
1.7.1 Analyse statique ......................................................................................................... 18
1.7.2 Analyse dynamique ................................................................................................... 19
1.7.3 Analyse hybride ......................................................................................................... 20
1.8 Travaux connexes sur Malware Détection .................................................................... 21
1.9 L’approche Comportementale ....................................................................................... 23
1.10 Appel Système (System Call) ....................................................................................... 23
1.11 Conclusion ..................................................................................................................... 24
CHAPITRE 2 MACHINE LEARNING ET ALGORITHME SVM ..................................... 25
Introduction .............................................................................................................................. 25
2.1 ............................................................................................................................................. 26
2.1.1 Obtention des données et pré-processing .................................................................. 26
2.1.2 Réalisation du modèle ............................................................................................... 26
2.1.3 Phase d'apprentissage ................................................................................................ 26
2.1.4 Sur-Apprentissage ..................................................................................................... 27
2.1.5 Phase de validation .................................................................................................... 27
2.1.6 Performance du modèle ............................................................................................. 28
2.1.7 Types de modèle ........................................................................................................ 28
2.2 ALGORITHMES DE SUPPORT VECTOR MACHINES .......................................... 29
2.2.1 Définition ................................................................................................................... 29
2.2.2 Principe général ......................................................................................................... 30
2.2.3 Notions de base .......................................................................................................... 30
2.2.4 Propriétés fondamentales ........................................................................................... 32
2.2.5 Fondement mathématiques ........................................................................................ 33
2.3 Conclusion ..................................................................................................................... 35
Table des matières
iii
CHAPITRE 3 MODELE ET ALGORITHME DE DETECTION ........................................ 36
Introduction .............................................................................................................................. 36
3.1 Approche proposée ........................................................................................................ 37
3.2 Objectifs ........................................................................................................................ 37
3.3 Notre contribution ......................................................................................................... 37
3.5 Extraction des données .................................................................................................. 38
3.5.1 Applications Android ................................................................................................ 38
3.5.2 Récupération de données ........................................................................................... 38
3.5.3 Algorithme de raffinage ............................................................................................. 41
3.5.4 Algorithme Normalisation ......................................................................................... 42
3.5.5 Machine Learning ...................................................................................................... 44
3.6 Expérimentaux de notre modèle .................................................................................... 45
3.6.1 Jeu de donnée ............................................................................................................. 45
3.6.2 Expérimentation et résultat ........................................................................................ 45
3.7 Conclusion ..................................................................................................................... 47
CONCLUSION GENERALE .................................................................................................. 48
BIBLIOGRAPHIE ................................................................................................................... 49
iv
Table des illustrations
Figure 1. 1— Architecture du système Android. ................................................................................ 4
Figure 1. 2— permissions pour s’installer sur Android. .................................................................... 7
Figure 2. 1—l’hyperplan H qui sépare les deux ensembles de points ............................................. 31
Figure 2. 2—Les vecteurs de support. ............................................................................................... 31
Figure 2. 3—hyperplan optimal, vecteurs de support et marge maximale. ................................... 32
Figure 2. 4—meilleur hyperplan séparateur. .................................................................................... 32
Figure 2. 5—Cas linéairement séparable. ......................................................................................... 33
Figure 2. 6—Cas non linéairement séparable. .................................................................................. 33
Figure 2. 7—exemples graphiques des données linéairement séparables. ..................................... 34
Figure 3. 1— Schéma global. .............................................................................................................. 38
Figure 3. 2—La division une fenêtre glissante .................................................................................. 40
Figure 3. 3— Liste de paires. .............................................................................................................. 40
Figure 3. 4—Schéma de fonctionnement de l’algorithme Raffinage. ............................................. 41
Figure 3. 5—Schéma de fonctionnement de l’algorithme Normalisation. ..................................... 43
Figure 3. 6—Classification des 20 échantillons de malware. .......................................................... 46
Figure 3. 7 —Résultats de la détection sur 10 échantillons de malware. Taux de Vrai Positif :
100% ..................................................................................................................................................... 47
1
Introduction Générale
Lancé officiellement en 2008, Android est devenu en quelques années le système
d’exploitation le plus répandu sur les plateformes mobiles de type smartphone et tablette .Au-
delà de sa large adoption par le grand public, il a également suscité l’intérêt des développeurs
d’applications malveillantes qui voient dans le système Android, une cible potentielle
d’attaque au même niveau que les ordinateurs de bureau à cause de la diversité des données et
services qu’ils proposent. Les appareils tournant sous Android offrent différentes
fonctionnalités allant du simple téléphone à celles des ordinateurs de bureau et assistants
numériques personnels (pockets PC ou PDA). La combinaison de toutes ces fonctionnalités
font ces appareils un point de concentration de divers données et services sensibles (liste de
contact, messages, données de géolocalisation, etc.) et en conséquence une cible de valeur
pour les développeurs de malware. Ces dernières années, nous avons ainsi vu l’apparition
d’un nombre toujours grandissant d’applications malveillantes qui cherchent à voler les
données du téléphone, les corrompre, espionner l’utilisateur, et abuser les services offerts par
le téléphone, etc. À la vue du nombre grandissant des malwares Android, il devient nécessaire
de développer des outils d’analyse de malware afin de comprendre leur fonctionnement et
plus tard de les détecter. L’une des raisons de la prolifération de ces malwares est
l’insuffisance des mécanismes de sécurité Android à détecter et bloquer de telles attaques et la
facilité d’accès à une partie des ressources sensibles du téléphone. Android propose un
ensemble de méthodes pour accéder à ces ressources et ces accès nécessitent une autorisation
de la part de l’utilisateur au moment de l’installation. L’application est installée uniquement si
l’utilisateur valide toutes les autorisations demandées par l’application. Toute application
installée sur le téléphone a ainsi accès aux ressources dont elle a demandé l’accès sans que le
système ne contrôle l’usage qui est fait des ressources. Les premiers travaux liés à la sécurité
d’Android sont donc focalisés sur l’analyse des limites de la sécurité sous Android et sur une
manière de les combler. Enck et al. Proposent par exemple dans [22] une vérification des
permissions demandées par les applications afin de s’assurer qu’elles ne soient trop
Introduction Générale
2
dangereuses. Ce type d’approche a cependant une principale limitation qui est de ne détecter
que ce que nous savons être dangereux. Il ne permet donc pas de détecter et d’apprendre de
nouvelles attaques.
Ce travail s’inscrit dans ce contexte et consiste à implémenter une approche comportementale
pour la détection des fuites des données personnelles en Android.
Le but de cette approche (ACDM) est d’analyser l’application présente sur le téléphone. Elle
est basée sur les techniques d'apprentissage automatique pour faire la distinction entre les
différents types des comportements.
Notre approche s’effectue en deux phases. La première phase, dite d’apprentissage et la
deuxième phase est celle de détection.
Organisation du mémoire ___________________________________________________
Ce mémoire est constitué d’une introduction générale, trois chapitres et une
conclusion.
Dans le premier chapitre, nous allons présenter l’état de l’art ou introduisons dans un
premier temps le système Android : son architecture, la notion d’application Android
et le modèle de sécurité d’Android. Puis, dans un second temps, nous parlerons des
limites du mécanisme de sécurité Android ainsi qu’un aperçu des menaces que
représentent les malware Android, et ensuite nous présenterons les différents travaux.
Dans le chapitre 2, nous allons présenter en détail la machine Learning. Obtention des
données et pré-procession, Réalisation du modèle, Phase d’apprentissage. Et ensuite
nous présenterons en détail Algorithmes de Support Vector Machine.
Dans le chapitre 3, le chapitre principal du mémoire, nous allons présenter et mettre en
œuvre notre idée : Approche Comportementale pour la Détection Malware (ACDM).
3
Chapitre 1
Etat de l’art
Introduction
Ce chapitre, comprend une analyse du système Android avec ses différentes
applications et son architecture ; ce qui a permis l’étude de la sécurité, les permissions et les
signatures ainsi que l’examen des limites de ses mécanismes de sécurité. Ces travaux ont
nécessité la définition des malware et leur évolution.
Suite à quoi ont été présentés les différents travaux visant le renforcement de la
sécurité en tenant compte de ressources sensibles de la communication et des abus de
permissions
La classification des malware et l’analyse des applications Android ont abouti sur les
travaux connexes malware, grâce à une approche comportementale et l’appel système.
Chapitre 1 — Etat de l’art
4
1.1 Système Android
Android est un système d'exploitation de base, relatif à l'utilisation des appareils de
téléphone cellulaires. Le développement de ce système a été entamé par une petite compagnie
inconnue qui a eu l'opportunité d'être l'initiatrice de premier système d'exploitation destiné à
la construction de la téléphonie mobile sur le noyau Linux.
1.1.1 Architecture du système Android
Le schéma suivant illustre les principaux composants du système d'exploitation Android.
Chaque section est décrite, plus en détail, ci-dessous [35].
Figure 1. 1— Architecture du système Android.
Chapitre 1 — Etat de l’art
5
Applications : Android est fourni avec un ensemble de programmes de base (également
nommés applications natives) permettant d'accéder à des fonctionnalités comme les courriels,
les SMS, le téléphone, le calendrier, les photos, les cartes géographiques, le web…etc. Ces
applications sont développées à l'aide du langage de programmation Java. Pour l'utilisateur
final, c'est la seule couche accessible et visible.
Le Framework (Application Framework) : En fournissant une plateforme de développement
ouverte, Android offre aux développeurs la possibilité de créer des applications extrêmement
riches et innovants. Les développeurs sont libres de profiter du matériel périphérique, les
informations de localisation d'accès, exécuter les services d'arrière-plan, définir des alarmes,
ajouter des notifications de la barre d'état, et beaucoup plus.
Les bibliothèques (Libraries) : En interne, Android inclut un ensemble de bibliothèques C et
C++ utilisées par de nombreux composants de la plateforme Android. Ces bibliothèques sont
en réalité accessibles au développeur par l'intermédiation du framework Android. En effet,
framework Android effectue, de façon interne, des appels à des fonctions C/C++ beaucoup
plus rapides à exécuter que des méthodes Java standard. La technologie Java Native Interface
(JNI) permet d'effectuer des échanges entre le code Java et le code C et C++. La liste ci-
dessous énumère quelques-unes des bibliothèques disponibles dans Android :
Bibliothèque système C. Implémentation (dérivée de BSD) de la bibliothèque standard C
(libc), optimisée pour les systèmes Linux embarqués.
Bibliothèques multimédias. Basées sur StageFright, elles permettent le support de nombreux
formats audio et vidéo, tels que MPEG4, H.264, MP3, AAC, AMR, JPG et PNG (la liste
complète est disponible sur le site des développeurs Android :
SurfaceFlinger. Permet l'accès au sous-système d'affichage.
LibWebCore. Moteur de rendu de pages Internet basé sur Webkit. Cette bibliothèque est donc
principalement utilisée dans le navigateur et dans les vues web embarquées (WebView).
Skia. Moteur graphique 2D.
Bibliothèques 3D. Implémentation basée sur OpenGL ES 1.0 API et plus récemment OpenGL
ES 2.0.
FreeType. Rendu des polices de caractères.
SQLit. Base de données légère et puissante.
Chapitre 1 — Etat de l’art
6
Moteur d'exécution Android (Android Runtime) : Android inclut un ensemble de
bibliothèques qui fournit la plupart des fonctionnalités disponibles dans les bibliothèques de
base du langage de programmation Java. Chaque application Android s'exécute dans son
propre processus, avec sa propre instance de machine virtuelle Dalvik.DVM est une
implémentation de machine virtuelle ayant été conçue pour optimiser l'exécution multiple de
machines virtuelles. Elle exécute du bytecode qui lui est dédié : le bytecode .dex (format qui
est optimisé pour une empreinte mémoire minimale). Cette particularité d'Android en fait un
système unique, loin des systèmes Linux traditionnels que beaucoup avaient pu rencontrer
auparavant.
Noyau Linux (Linux Kernel) : Android repose sur un noyau Linux (version 2.6) qui gère les
services du système, comme la sécurité, la gestion de la mémoire et des processus, la pile
réseau et les pilotes. Il est également comme une couche d'abstraction entre le matériel et la
pile logicielle.
1.1.2 Applications Android
Les différents éléments utilisés dans une application Android [37].
Activité (Activity) : Le concept d'Activité repose sur la notion d'interaction utilisateur. Une
Activité représente la fenêtre ou tout simplement l’écran qui sera affiché à l’utilisateur. Elle
permet également de gérer des fonctionnalités telles que l’appui sur la touche [MENU] ou
l’affichage de messages d’alerte (Toast). Faites bien attention à ne pas confondre la notion
d’Activité et de View.
Service : Un service est une sorte d'activité, mais ne possédant pas d'interface visuelle. Celle-
ci est donc lancée en fond, et permet par exemple de jouer de la musique d’effectuer une
vérification des mails toutes les x minutes…etc.
Fournisseur de contenu (Content Provider) : Les Content Provider sont, comme l’exprime
leurs noms, des gestionnaires de données. Ils permettent de partager l’information entre
applications. Imaginons une application qui permette de conserver les cartes de visite
virtuelles d’un ensemble de personnes. Ces cartes de visite contiennent généralement le nom,
le prénom et un moyen de contact de la personne. Un tel programme peut être créé sous forme
de Content Provider ce qui lui permettra de fournir à d’autres applications présentes sur le
système les informations sur une personne. Une application tierce d’envoi de courriel peut par
exemple interroger ce Content Provider afin d’obtenir l’adresse courriel d’un contact.
Chapitre 1 — Etat de l’art
7
Récepteur d'émission (Broadcast Receiver) : Pour finir, un Broadcast Receiver est une
application qui est à « l’écoute » des autres applications. Ce type d’application tente de
répondre aux Intents qui lui sont adressés. Il ne fait donc rien d’autres que d’être à l’écoute
des Intents envoyés par d’autres composants applicatifs.
Intention (Intent) : Les composantes Android communiquent via des messages système que
l’on appelle intent. Ils sont émis par le terminal pour prévenir les différentes applications du
déclenchement d’évènements.
Vue (View) : Les Views sont les composants de base de l’interface graphique. Elles
permettent de construire l’interface utilisateur. Les widgets (nom donné à des composants
graphiques « avancés » : une barre de progression, par exemple, est un widget), composants
graphiques ou autres layout (composant permettant de placer les différents composants
graphiques à l’écran).
1.2 Sécurité du système Android
1.2.1 Permissions
Afin de protéger l’utilisateur contre des applications ayant des actions potentiellement
malveillantes, mais également pour limiter l’impact en cas de compromission d’une
application, chaque application doit demander l’autorisation au système pour réaliser des
actions sensibles figure (1.2). Cela se traduit par la présence d’une liste de permissions
requises par l’application au sein de son fichier AndroidManifest.xml.
Figure 1. 2— permissions pour s’installer sur Android.
Chapitre 1 — Etat de l’art
8
Lors de l’installation d’une application, la liste de permissions demandées est affichée à
l’utilisateur afin qu’il soit conscient des actions qu’elle peut être amenée à réaliser.
L’utilisateur est alors libre d’accepter ou de refuser l’ensemble de ces permissions, sachant
qu’il n’est pas possible pour un utilisateur d’en accepter qu’une partie. Chaque permission
demandée a été au préalable définie par le système ou une application tierce. Si ce n’est pas le
cas, elle doit être définie dans le fichier AndroidManifest.xml de l’application en elle-même.
La définition d’une permission permet de lui attribuer :
– un nom unique ;
– un niveau de protection à travers l’attribut protection Level ;
– une description.
L’attribut protection Level peut posséder les valeurs suivantes :
– normal : il s’agit du niveau le plus bas d’une permission. Les permissions avec ce
protection Level ne sont pas achetées à l’utilisateur lors de l’installation ;
– dangerous : les permissions avec ce protection Level nécessitent l’autorisation explicite de
l’utilisateur lors de l’installation ;
– signature Or System : les applications utilisant des permissions avec ce protection Level
nécessitent d’avoir été signées par l’application qui a déclaré cette permission ou d’être UID
system, lequel est accessible uniquement par les applications OEM ;
– signature : les applications avec ce protection Level nécessitent d’avoir été signées par
l’application qui a déclaré cette permission. Une permission peut être utilisée par le système
pour protéger l’appel de certaines API. Par exemple, AccountManager.getAccounts() est
protégée par la permission android.permission.GET_ACCOUNTS. Une permission peut être
également un prérequis pour pouvoir émettre certains Intent. Ainsi, l’Intent
android.intent.action.CALL est protégé par la permission android.permission.CALL_PHONE.
Enfin, une permission permet également de protéger tout type de composant d’une application
Android ; si l’application tierce ne possède pas la permission adéquate, elle ne pourra pas
communiquer avec le composant cible. Par exemple, l’accès au Content Provider
content://contacts en lecture nécessite la permission android.permission.READ_CONTACTS.
Lorsqu’une permission est attribuée à une application, elle est attribuée en réalité à son UID.
Ceci implique que le code natif exécuté par une application Android via JNI est également
soumis aux mêmes permissions que le byte code Dalvik. De plus, chaque application utilisant
un shared User Id possède l’ensemble des permissions attribuées à chaque application
Chapitre 1 — Etat de l’art
9
possédant cette uid. Ainsi, une application ne demandant aucune permission mais étant shared
User Id system, disposera de l’ensemble des permissions des autres applications ayant l’UID
system.
1.2.2 Signature des applications
Toutes les applications Android doivent être signées avec une clé privée conservée par le
développeur.
Ceci permet d’identifier de façon sure l’autre du logiciel empêcher qu’un pirate publie une
mise à jour d’une application créer de relation de confiance entre application signées avec la
même clé.
1.3 Limite des mécanismes de sécurité Android
1.3.1 Abus de permission
Les permissions donnent accès aux ressources sensibles du téléphone aux applications.
Lorsque l’utilisateur souhaite installer une application, il doit lui accorder toutes les
permissions qu’elle a demandées. Si les permissions filtrent l’accès aux ressources sensibles,
il n’existe cependant aucune vérification au niveau de l’usage de ces ressources. Seule la
confiance aux développeurs de l’application permet de s’assurer qu’il n’y aura aucun abus.
Les attaques les plus simples utilisent ainsi les permissions de manière abusive et c’est le cas
de la plupart des malware ayant pour but de faire fuir des données sensibles du téléphone. Un
exemple récent est une application ayant été détectée comme un logiciel espion qui cible des
manifestants à Hong Kong [1]. L’application demande un ensemble assez large de
permissions pour espionner les utilisateurs des téléphones sur lesquels l’application est
installée. Les permissions demandées donnent accès aux SMS, aux appels, à la localisation de
l’utilisateur, au micro pour enregistrer l’utilisateur, etc.
Une application avec trop de permissions peut paraître suspecte aux yeux des utilisateurs
avertis. Afin de ne pas éveiller la suspicion des utilisateurs, une solution pour les
développeurs de malware consiste à utiliser d’autres applications présentes sur le système
pour mener l’attaque ou à diviser l’attaque entre plusieurs applications qui collaboreront pour
exécuter l’attaque.
1.3.2 Permissions : attaques par délégation et attaques par collusion
Une attaque par délégation : une attaque par délégation [2] consiste à déléguer
l’exécution de la tâche nécessitant une permission que l’application malveillante ne possède
Chapitre 1 — Etat de l’art
10
pas à une autre application qui elle la possède. Par exemple, une application n’ayant pas la
permission de communiquer sur le réseau pourrait se servir du navigateur pour poster des
informations ou télécharger des fichiers. Les échantillons de font par exemple appel au
navigateur du téléphone afin de lancer le téléchargement d’applications sur le téléphone.
Une attaque par collusion : consiste en une coopération entre plusieurs applications
pour mener une attaque. Il n’existe aucun malware utilisant ce type d’attaque à notre
connaissance.
1.3.3 Communication entre composants via les intents Les intents sont des messages échangés entre les composants des applications pour
transmettre des requêtes. La possibilité d’envoyer des intents entre deux composants de deux
applications différentes apporte une surface d’attaque supplémentaire .Dans [3] Chin et al.
Décrivent en se basant sur leur analyse du fonctionnement des întents des scénarios d’attaques
qui pourraient exploiter cette surface d’attaque afin d’espionner les échanges de message
entre application, les bloquer, les modifier, élever ses privilèges et influencer sur le
comportement d’une application.
1.3.4 Failles logicielles : élévation de privilège Comme tout programme, le système Android a également des failles logicielles.
Exploiter certaines d’entre elles permet d’élever les privilèges d’une application et ainsi
exécuter des opérations sensibles que nous ne pouvions faire. Obtenir les droits root permet
par exemple de modifier le contenu de la partition system sous Android pour installer des
applications système ou les remplacers. Le noyau Android étant basé sur un noyau Linux, il
hérite ainsi de ses vulnérabilités. Certaines d’entre elles ont par exemple été exploitées obtenir
des accès root sur les téléphones.
Des failles permettant d’élever les privilèges des applications existent également dans
espace utilisateur. D’après les travaux de Y. Zhou et X. Jiang [4], six vulnérabilités
permettant d’élever les privilèges des applications existaient au moment de leur analyse et
quatre d’entre elles étaient effectivement utilisées par les malware pour élever leurs privilèges
: Asroot [5], exploid, RATC / Zimperlich [6] et GingerBreak [7]. Plus récemment, J. Forristal
a présenté à la Black Hat 2013 une vulnérabilité [8] concernant la vérification des signatures
des applications Android à l’installation. La vulnérabilité permet d’installer une version
modifiée d’une application dont la signature reste celle de la version originale. Si la
vulnérabilité ne permet pas d’obtenir les droits root (aucune application ne tourne avec l’UID
Chapitre 1 — Etat de l’art
11
root), elle rend cependant caduque les protections offertes par la signature. Un développeur
malveillant peut faire exécuter son code avec les mêmes droits que l’application originale
qu’il a modifiée. Il peut également faire tourner son code dans le même processus ou avec le
même UID qu’une autre application. S’il n’est pas possible d’obtenir les droits root, il est
cependant possible d’obtenir les droits des applications system. Ces applications ont accès à
plus de permissions que les applications tierces et de plus sont persistantes sur le système.
Un utilisateur ne peut les enlever sans avoir un accès root sur son téléphone.
Bien que Google mette à jour régulièrement le code d’Android, les constructeurs eux mettent
plus de temps à proposer des mises à jour pour leur téléphone. La fenêtre d’exploitation des
vulnérabilités est ainsi bien plus large que sur les ordinateurs. Nous avons présenté dans cette
section, les limitations des mécanismes de sécurité sous Android. Ces limitations peuvent être
classées en trois groupes. Le premier groupe concerne les limites de la sécurité offerte par les
permissions. Le second concerne les risques introduits par les communications entre
composants via les intents. Le troisième groupe concerne les failles logicielles dans le code
d’Android qui permettent d’élever les privilèges des applications dans le système.
Dans la section suivante, nous présentons les malware Android et les menaces qu’ils
représentent.
1.4 Malware Android
1.4.1 Définitions
Nous appelons malware un programme ou un code dont le but est de nuire à un
système donné. Un échantillon d’un malware est une application, comprendre ici application
Android correspondant à un fichier apk, qui contient ce malware. Quant à une famille de
malware, il s’agit de l’ensemble des échantillons d’un malware. Analyser un malware revient
ainsi à analyser un ou plusieurs de ses échantillons afin d’extraire des informations liées au
malware et détecter un malware revient à décider si une application donnée est un échantillon
d’un malware. Les premiers travaux qui ont consisté à dresser un bilan des menaces que
représentent les malwares Android sont les travaux d’Y. Zhou et X. Jiang dans [4]. Leurs
travaux sont basés sur l’analyse de plus de 1200 échantillons de malware qu’ils ont collecté de
2010 à 2011. Dans ce qui suit, nous présentons les résultats de cette analyse et l’enrichissons
avec une analyse plus récente basée sur les menaces que représentent les malware Android en
2013.
Chapitre 1 — Etat de l’art
12
1.4.2 Évolution des malware Si les premiers malware Android sont simples, l’analyse effectuée dans [4] montre que
les techniques utilisées tendent à se complexifier : charge utile, techniques contre l’analyse
d’application, serveurs C&C. Tout le code malveillant est intégré dans une même application
dans les premiers malware. L’analyse des échantillons récoltés montre une tendance à le
diviser, mettre une partie dans l’application servant à l’infection et le reste des morceaux dans
une ou plusieurs charges utiles. Ces charges sont intégrées directement dans l’application
ayant servi à infecter le téléphone ou télécharger et après l’installation de l’application. Les
échantillons de DroidKungFu ont ainsi deux charges utiles cachées en tant que ressources des
applications infectées qui seront installées dans la partition system une fois l’échantillon
lancé.
L’installation de ces charges sur le téléphone offre une présence constante sur le téléphone
même si la première application est enlevée du téléphone. De plus, si les applications sont
installées sur la partition système, il n’existe aucun moyen pour l’utilisateur de les enlever
sans avoir les droits root sur le téléphone. Afin d’éviter toute détection, les développeurs de
malware utilisent diverses techniques telles que le chiffrement des charges utiles, le
chiffrement de certaines valeurs utilisées par le malware, l’usage de techniques d’offuscation
de code et l’usage de code natif. Le chiffrement permet de cacher la nature exacte des données
manipulées (ex : adresses des serveurs de C&C) par l’application et réduit ainsi la possibilité
de détection. Les développeurs de DroidKungFu chiffrent ainsi les charges utiles de leur
malware afin que leur malware ne soit détecté facilement. Si une clé de chiffrement différente
est utilisée par chaque échantillon, l’analyse sera encore plus compliquée. Certains
développeurs de malware offusquent également leur code afin de complexifier son analyse
[9]. Ils modifient par exemple le nom des méthodes et des classes Java de l’application. Il est
cependant à noter que le kit de développement Android (Android SDK) contient un outil
fournissant le même type de service [10].
L’usage de code natif complexifie également l’analyse des applications. En effet, la plupart
des outils d’analyse d’application Android se concentrent uniquement sur le code écrit en Java
car c’est le langage principal pour développer une application Android. En utilisant du code
natif, les développeurs de malware se donnent ainsi la possibilité de cacher une partie du code
malveillant durant l’analyse. Certains malware intègrent également des modules censés
prévenir toute détection. Les échantillons d’AnserveBot analysent ainsi son environnement
Chapitre 1 — Etat de l’art
13
d’exécution à la recherche d’antivirus pour Android. De plus, ces échantillons tirent
également profit du chargement dynamique de code [11]. Le code des applications Android se
trouve dans le fichier classes.dex de leur apk. Ce mécanisme permet de charger du code en
dehors de ce fichier et ce de manière dynamique rendant l’analyse de l’application plus
difficile. D’autres malwares vérifient également que le code n’a pas été modifié pour détecter
toute tentative d’analyse du code. AnserveBot vérifie par exemple l’intégrité de son code
avant de lancer le code malveillant. Enfin, l’analyse montre également l’usage des serveurs de
C&C afin de contrôler le comportement des échantillons de malware. Le comportement exact
des premiers malware sont dictés à l’avance par leur développeur. Durant leur analyse, Y
Zhou et X Jiang ont cependant constaté que dans le cas de certains malware, leur
comportement était plutôt dicté par un serveur distant. Le malware se connectait ainsi
périodiquement au serveur qui lui envoyait par la suite l’action qu’il devait exécuter. Sur les
49 malwares étudiés, 27 utilisent ainsi un serveur de C&C pour recevoir les commandes à
exécuter sur le téléphone infecté. L’usage de telles approches permet aux développeurs de
garder une flexibilité sur les différentes actions à exécuter et les faire évoluer en cas de
besoin.
1.5 Renforcement de la sécurité sous Android
1.5.1 Protection des ressources sensibles
Qui passe par plusieurs mécanismes à fin de protéger les fuites de données et varier
d'une application à l'autre et dans le but de trouve la méthode qui correspond mieux aux
applications détection malware exemple :
TaintDroid : Dans [12] Enck et al ont présente une version modifier d’Android
« TaintDroid » pour objectif d’étudier si les applications Android font fuir des données
sensibles vers des entités distantes ils observent la liste de contact et les données de géo
localisation comment elles se propagent dans le système ils ont conclus que sur 30 application
téléchargées à partir de Google Play 2/3 d’entre elles faisaient fuir des informations sensibles
vers des serveurs distants Ils utilisent une méthode dite de Tainting qui consiste à marquer les
informations sensibles afin d’en suivre la propagation À chaque propagation le conteneur
destination reçoit la marque de l’information sensible pour caractériser son nouveau contenu
Dans TaintDroid le suivi ce fait à différents niveaux : à l’intérieur de l’application, entre les
applications et entre applications et fichiers du système.
Chapitre 1 — Etat de l’art
14
Pour suivre les flux à l’intérieur des applications, Enck et al. Ont aussi modifié la machine
virtuelle Dalvik pour interprété le code de l’application Android exécuté.
Il existe aussi un ensemble de classes et de méthodes Java fourni par Android pour
implémenter les mécanismes de communication Donc TaintDroid est capable de suivre les
flux d’information dans une application, entre les applications Android et entre une
application et un fichier mais le mécanisme de suivi de flux repose principalement sur la
machine virtuelle Dalvik et comme il s’est limité aux applications écrites en Java Or, il est
possible d’utiliser le code natif sous Android ce qui rend le suivi des flux d’information
causés par le code natif impossible car ce dernier il n’est pas interprété par la machine
virtuelle Dalvik.
- Contrôle d’accès aux ressources sensibles à l’exécution : MockDroi [13] et AppFence [14]
A fin de limite l’accès des applications au aux informations et ressources sensibles MockDroi
et AppFence proposent à l’utilisateur de contrôler l’accès par une demande de validation, de la
part de l’utilisateur effectuer par le système si l’utilisateur lui en refuse l’accès, le système soit
lui notifiera son indisponibilité ou son inexistence, soit lui renverra une donnée factice.
Mais la différence entre MockDroi et AppFence consiste dans le fait qu’AppFence propose un
meilleur mécanisme pour empêcher les fuites de données vers des serveurs distant et une
approche plus fine en demandant uniquement une validation quand une donnée sensible est
susceptible de quitter le système Pour ce faire, AppFence intègre le mécanisme de suivi de
flux d’information implémenté dans TaintDroid .
MockDroid simulera l’indisponibilité du réseau à toute tentative de connexion.
- Protection de contenu : Porscha : Dans [15] Ongtang et Al proposent un mécanisme
dénommé Porscha permet de lier des données sensibles à un appareil et un ensemble défini
d’applications sa source lui associe une politique de sécurité qui définit les destinataires du
contenu et les conditions sous lesquelles le contenu peut être accédé.
Le contrôle d’accès aux données sensibles se fait à différents niveaux :
à la transmission des données vers le téléphone et la transmission des données aux
applications sur le téléphone et pour assure la protection elle propose un système de
chiffrement basé sur l’identité du destinataire [16] l’identité est soit le numéro du téléphone
soit une adresse mail Porscha assure la vérification de l’accès aux données sensibles en
ajoutant des points de contrôle dans les mécanismes de communication Android elle vérifie
aussi si une politique de sécurité est associée au contenu du message. Si c’est le cas, il
Chapitre 1 — Etat de l’art
15
transmet uniquement le contenu du message aux applications autorisées à le recevoir. Dans le
cas des MMS, les applications non autorisées ne recevront pas le message. Le contrôle des
partages se fait sur des communications et partages de données utilisant les intents donc
Porscha permet de définir de manière plus fine à qui des données sensibles peuvent être
transmises et sous quelles conditions. Cependant, contrairement à AppFence ou TaintDroid
qui suivent la propagation des informations dans tout le système (applications écrites en Java
et fichiers), Le destinataire peut ainsi faire fuir les données sans que le système ne soit au
courant.
- AppInten : présenté par Yang et Al [17] se base essentiellement sur la connaissance de la
nature de la fuite car Une fuite d’information ne signifie pas toujours une attaque. Selon
quelque cas, la fuite peut être intentionnelle (ex : partage de coordonnées géographiques par
messagerie) donc le but ici est de fournir à un analyste les évènements et entrées attendus par
une application menant à la fuite d’une information afin que l’analyste puisse conaitre la
nature de la fuite : intentionnelle ou non (risque d’une attaque) l’outil analyse donc
statiquement le code de l’application. Dans un premier temps, il construit son graphe de flux
de contrôle en suite détermine à partir de ce graphe les chemins d’exécution contenant une
fuite d’information puis calcule la suite d’évènements ainsi que les entrées attendues qui
mènent à l’exécution de la fuite d’information. A partir de la Il crée et effectue des tests
unitaires qui correspondent et qui exécutent ces suites d’évènement et donnent à l’application
les entrées menant à la fuite d’une information. Pour déterminer de la nature des fuites
d’information. A partir d’un teste effectue par Yang et Al AppIntent à détecter 750
échantillons malware, AppIntent a détecté 219 fuite de données non intentionnelles et 17
fuites intentionnelles et sur 1000 application gratuites téléchargé sur Google Play détecté 26
cas de fuites de données non intentionnelles et 29 cas de fuites intentionnelles.
1.5.2 Communication entre processus et entre composants
La collaboration entre applications permettent aux applications malveillantes de cacher
leur véritable nature aux utilisateurs. Elles peuvent collaborer avec d’autres applications pour
mener une action qu’elles ne pouvaient pas faire toutes seules. Dans ce qui suit, nous
présentons ainsi les travaux visant à bloquer ce type d’attaque sur Android en contrôlant les
communications entre applications. Et qui passe à son tour par :
Chapitre 1 — Etat de l’art
16
-ComDroid : Un travail présenté par Chin et Al [18] nomme ComDroid il s’agit d’un outil
d’analyse d’application il effectue deux types d’analyse sur le code des applications et leur
fichier AndroidManifest.xml.
La première analyse consiste à analyser le code des applications. Durant cette analyse,
ComDroid étudie comment les intents sont créés puis émis par une application.
La deuxième analyse consiste à analyser les composants des applications afin de déterminer
s’il y a un risque que les composants reçoivent des requêtes malveillantes via les intents si
l’analyse des communications via les intents montre les risques que ces communications
introduisent, il n’existe cependant pas de méthode pour déterminer si ce qui a été détecté
comme un risque de sécurité est une vulnérabilité de l’application ou une fonctionnalité
implémentée par le développeur En effet, le fait qu’un implicite intent soit utilisé ou qu’un
composant soit exposé au reste du système peut traduire une volonté de s’adapter aux
applications Ex : l’ouverture d’une page web à partir d’une application autre que le
navigateur.
-Saint : Ongtang et Al [19] ont présente un outil dénommé Saint consiste en un module
permettant des restrictions supplémentaires en plus des permissions à l’installation des
applications et à leur exécution lors des communications entre processus permet aux
applications de définir une politique de sécurité qui contrôle l’attribution des permissions
protégeant leurs interfaces à l’installation et comme peuvent aussi déclarer des restrictions
plus fine sur l’attribution des permissions à l’installation. Elles peuvent ainsi imposer une
restriction sur une liste développeurs au lieu d’un seul qui est le développeur de l’application
ayant déclarée la permission À l’exécution, mais a ce niveau Saint souffre cependant des
mêmes limitations que Porscha elle se limite à l’accès direct au composant de l’application
protégée par la politique de sécurité.
-Quire : est un outil propose par Dietz et Al [20] a pour objectif de détecter et bloquer les
attaques par délégation et modifie les mécanismes de communication entre applications afin
qu’à chaque requête émise, l’émetteur puisse joindre la chaine d’appel ayant mené à
l’émission de cette requête et que le destinataire de la requête puisse vérifier que tous les
éléments de la chaine d’appel ont les permissions nécessaires pour demander le traitement de
la requête.
-IPC Inspection : Afin de bloquer les attaques par délégation Porter et Al. Ont adopté une
approche similaire à Quire ils présentent IPC Inspection un mécanisme qui contrôle les
Chapitre 1 — Etat de l’art
17
communications entre applications sous Android, A la réception d’un message par une
application le système considère que ses permissions sont réduites à l’intersection de
l’ensemble de ses permissions avant la réception du message et l’ensemble des permissions de
l’émetteur IPC Inspection force donc l’usage de multiples instances d’une même application
pour traiter les messages qui lui sont adressés. Le destinataire d’un message a ainsi une
instance avec ses permissions d’origine et d’autres instances qui traiteront chacun des
messages et dont les permissions seront réduites.
-Prévention des attaques par délégation et par collusion : A fin de de bloquer les attaques
par délégation ainsi que les attaques par collusion et répondre à la défaillance de IPC
Inspection dans [21] Bugiel et Al. Présentent une nouvelle extension de sécurité à Android
ils prennent en compte la possibilité que la communication entre les applications à travers les
mécanismes standard de communication sous Linux leur objectif est d’observer les
interactions entre les applications, composants du système et La détection des attaques à ce
propos ils utilisent une représentation sous forme de graphe des interactions entre les
applications, les fichiers, les sockets et des composants du système La politique de sécurité
décrit des propriétés sur ce graphe qui permettent de statuer si une interaction correspond à
une attaque ou non.
1.5.3 Abus des permissions
L’abus des permissions et s'agit d'une manière générale de :
-Kirin : les applications malveillantes sous Android demandent souvent toutes les
permissions qui leur sont nécessaires pour effectuer leur tâche malveillante. Par exemple, les
applications espionnes c’est pourquoi Enck et Al. Proposent un système nommé Kirin dans
[22] qui est pour objectif vérifier qu’une application n’a pas un ensemble de permissions
jugé dangereux « exemple, l’accès aux données de géo localisation et à internet » et vérifie à
l’installation les permissions demandées seul l’utilisateur qui peut définir les permissions
dangereuse.
-Woodpecker : Pour accéder aux ressources sensibles sous Android une permission est
toujours demandée [23] Grace et Al. Ont développé Woodpecker un outil pour analyser les
applications et trouver d’éventuelles expositions de ressources sensibles il définit les points
d’entrée de l’application à partir de son fichier AndroidManifest.xml il calcule tous les
chemins d’accès à partir de CFG calcule tous les chemins d’exécution possibles si une
application indique partager son l’identifiant utilisateur une alerte sera levé.
Chapitre 1 — Etat de l’art
18
-Aurasium : La plupart des approches visant à contrôler le comportement des applications se
font en modifiant le système a ce effet Xu et Al [24] ont décider j’agir sur l’application de lui
ajoute un code nécessaire au control sans toucher le système Ils ont développé un service
appelé Aurasium qui prend en entrée une application et retourne sa version renforcée Cette
version renforcée intègre un code interceptant les appels aux fonctions sensibles sous Android
afin de renforcer une politique de sécurité Aurasium intercepte leur appel à un niveau plus
bas, plus précisément au niveau des fonctions de la bibliothèque C du système et de la
machine virtuelle Dalvik Lorsque l’appel à une fonction sensible est détectée, l’application en
informe l’utilisateur et demande à l’utilisateur de valider l’appel s’il souhaite qu’il se
poursuive.
Dans tous ce qui précède les travaux sont bases sur les limites connues du mécanisme de
sécurité d’Android, et comment détecter et empêcher toutes fuite des donnes sensible et les
flux d’information que causent les malware dans le système en général.
1.6 Classification et détection de malware
La détection de malware se fait généralement en utilisant des signatures ou des profils
comportementaux. La signature d’un malware est un ensemble de propriétés communes aux
fichiers des échantillons du malware. Dans le cas des applications Android, ces fichiers sont
les APK. Le profil comportemental d’un malware est un ensemble de propriétés communes à
l’exécution des échantillons du malware. Ces signatures et profils sont construits à partir des
informations obtenues en analysant, statiquement ou dynamiquement, les échantillons de
malware. La tendance actuelle consiste à utiliser des méthodes d’apprentissage afin de
classifier et détecter des malwares. Dans notre cas, nous souhaitons extraire le profil d’un
malware et son comportement à partir des flux d’information qu’ils causent dans le système.
1.7 Analyse d’applications Android
La détection de malwares se concentre sur les exécutables et les analyse afin de
découvrir du code malicieux. Il existe trois techniques pour aborder ce problème :
1.7.1 Analyse statique
Batyuk et Herpich ont proposé un service capable d'accéder aux applications du
Market Android et de fournir un rapport à l'utilisateur via une analyse statique révélant les
potentiels menaces de sécurité et de violation de la vie privée. Cette analyse est effectuée en
quatre étapes. Premièrement, un utilisateur effectuée une requête de rapport pour une
Chapitre 1 — Etat de l’art
19
application. Ensuite, l'application subit un reverse engineering en utilisant l'outil apktool pour
obtenir le contenu du chier Manifest.xml initial de l'application ainsi que son code Java
obtenu après décompilation des fichiers smali.
Des opérations d'analyse sont effectuées par un ensemble d'algorithmes de détection
en réalisant du pattern matching des fonctions sensibles appelées dans le code. Enfin un
rapport de sécurité est créé et fourni à l'utilisateur pour l'informer des fuites de données
possibles. Ils proposent aussi un moyen de diminuer les menaces en faisant une
correspondance avec des patterns malicieux et non désiré au niveau du code source de
l'application, par un reverse-engineering automatique, avant une recréation de l'application
selon les préférences de sécurité proposées par l'utilisateur. Ces préférences représentent un
ensemble de détecteurs qui eux-mêmes sont associés à une modification du code et sera
effectué si l'application correspond au détecteur.
1.7.2 Analyse dynamique
L’analyse dynamique d’applications consiste à exécuter les applications à analyser
dans un environnement contrôlé. Plusieurs solutions d’analyse dynamique d’applications
Android ont été proposées par la communauté scientifique depuis la disponibilité du système
Android en 2008. En 2010, Enck et al. Présentent la solution appelée TaintDroid. Cette
version modifiée du système Android permet de se mettre en coupure sur des API Java
identifiées comme sensibles. Initialement centré sur la fuite de données personnelles,
TaintDroid a ensuite été amélioré afin de proposer d’autres solutions telles que Droidbox. Ce
dernier repose sur l’architecture de TaintDroid et améliore l’utilisation de celui-ci en ajoutant
notamment un mécanisme d’automatisation des analyses. Des événements comme les
opérations de lecture et écriture sur les fichiers, les appels à des primitives cryptographiques,
les ouvertures de connexions réseau, l’envoi de SMS, etc. sont ainsi détectées par Droidbox et
observables au travers d’un rapport produit à la fin de l’analyse. D’autres solutions telles que
DroidScope reposent aussi sur une version modifiée d’Android. La principale limitation de ce
type d’analyse est la nécessité de reconstruire une version d’Android adaptée à chaque
nouvelle version du système.
Pour contourner cette limitation, des solutions comme APIMonitor ou Fino existent
aujourd’hui. APIMonitor est introduit à GSoC 2012 comme la version 2.0 de DroidBox, et
repose sur la modification du bytecode de l’application afin d’y injecter le code souhaité.
Cette solution permet de devenir indépendant du système d’exploitation sous-jacent, ce qui
Chapitre 1 — Etat de l’art
20
fonctionne particulièrement bien dès lors que l’utilisateur dispos d’une maîtrise sur
l’application qu’il souhaite analyser. Cependant, il existe plusieurs cas où l’utilisateur ne
dispose pas de cette maîtrise, par exemple lorsque l’on dispose d’une application déployée par
le constructeur ou le fournisseur d’accès. En particulier, dès lors que l’application dispose de
privilèges système, la disponibilité de la clé privée de signature nécessaire au déploiement de
l’application dans /system devient alors problématique.
1.7.3 Analyse hybride
Zhou et Wu [34] ont conçu un système appelé DroidRanger capable de détecter des
applications appartenant à des familles de malwares connues et à des familles de malwares
inconnues. Le système repose sur deux schémas d’analyse. Un premier schéma d’empreintes
comportementales basées sur les permissions est utilisé pour détecter les applications
appartenant à des familles de malwares connus. Il filtre les applications selon les permissions
requises par les familles de malwares connus (matching avec permissions choisi par leur soin
et contenu dans le fichier manifeste des apps). Le modèle des signatures comportementales
comprend des informations
Sémantiques contenues dans le fichier manifeste, les méthodes appelées et la structure de
l’application. Les signatures créées seront ensuite évaluées avec les signatures de malwares
connus. Un deuxième schéma est utilisé pour identifier des malwares appartenant à des
familles inconnues.
Grace et Michael [32] proposent un schéma proactif pour repérer les malwares
inconnus (zero-day) et implémente dans un système appelé RiskRanger. Ceci sans utiliser des
signatures de malwares connues pour évaluer les risques potentiels de sécurité (divises en 3
catégories) des applications et dresser une liste d’applications pouvant être dangereuses
méritant plus d’analyses.
Il y a deux niveaux d’analyse de risques. Le premier niveau permet d’identifier les
applications non offusquées présentant un risque haut ou moyen. Un risque haut exploite des
vulnérabilités logicielles au niveau de la plate-forme. Un risque moyen n’exploite pas ces
vulnérabilités mais peut causer des pertes financières ou des fuites d’informations sensibles.
Par exemple, pour détecter les applications à hauts risques, ils utilisent des signatures créées
pour chaque famille de vulnérabilités connues pour identifier leurs caractéristiques
essentielles. Les applications à analyser sont celles qui présentent uniquement du code natif.
Chapitre 1 — Etat de l’art
21
Le deuxième niveau permet d’identifier les applications avec des comportements suspects.
Cela concerne principalement des applications de cryptage permettant à d’autres applications
de ne pas être détectées par le premier niveau d’analyse de risque ou des applications de
chargement dynamique de code. Il arrive que le système génère des faux négatifs. Soit les
malwares comprennent des comportements malicieux que le système n’arrive pas à détecter
car ils ne comportent pas de risques ni haut, ni moyen. Soit ils ne partagent pas les mêmes
données utiles malicieuses que les autres dans les mêmes familles de malwares. Soit ils sont
”coupables par association”. Ces approches utilisent des mécanismes de collecte de données
pour détecter les applications malveillantes sont difficiles à mettre en œuvre à cause de
l’offuscation du code pour les approches statiques et l’évolution continue des environnements
Android pour les approches dynamiques. Nous nous sommes donc focalises sur une approche
plus légère basée sur l’analyse des logs générés par l’environnement Android au cours de
l’exécution des applications installées. Notre approche permet d’analyser une application en
fonction d’une structure recomposée partiellement grâce aux journaux de logs et d’un
comportement élabore aussi bien au niveau des permissions attribuées qu’au niveau des
interactions entre les différents composants.
Afin d’obtenir les informations comportementales concernant une application, nous
extrayons des informations directement d’une image de l’état du système. Ainsi,
contrairement aux approches classiques d’analyses statiques, nous obtenons les permissions
attribuées aux applications sans retro ingénierie pour obtenir le fichier manifest.xml contenant
les permissions requises.
Nous pouvons créer des schémas d’exécution d’applications en corrélant les
informations comportementales au sens interaction entre composants et les informations
structurelles. De plus, ces informations sont obtenues d’une manière moins lourde que celle
proposée par les approches dynamique avec l’instrumentation de la machine virtuelle.
1.8 Travaux connexes sur Malware Détection
Deux approches sont utilisées pour la détection de logiciels malveillants sur Android
et en général : l’approche statique [25] et l’approche dynamique [26]. L’analyse statique se
base uniquement sur le code source d’un programme pour le scanner, tandis que l’analyse
dynamique l’exécute dans un environnement dédié pour observer son comportement. Les
analyses dynamiques font l’objet de plus de recherches dans le domaine des smartphones.
Chapitre 1 — Etat de l’art
22
Historiquement, les premiers travaux portant sur la détection de logiciels malveillants sur les
smartphones se basaient principalement sur l’observation de la consommation de la batterie
[27]. Ceux-ci consistaient à surveiller la consommation en batterie du téléphone et à la
comparer à un patron de consommation normal pour détecter les anomalies.
L’architecture d’Android utilise un système de permission : chaque application indique lors
de son installation à quelles ressources du téléphone elle a besoin d’accéder. L’analyse de ces
permissions pour détecter des combinaisons suspectes a fait l’objet de plusieurs publications
[28]. En effet, les logiciels malveillants ont tendance à demander de plus nombreuses
permissions que les logiciels bénins. Si en théorie un utilisateur est à même de voir à
l’installation d’une application si celle-ci demande trop de permissions pour ce qu’elle est
sensée faire, en pratique à peu près toutes les applications affichent une liste de permission
relativement longue que l’utilisateur ne prend pas forcément le temps de regarder. Une
analyse automatique avertissant l’utilisateur si les permissions demandées deviennent trop
dangereuses peut aider à résoudre ce problème.
Schmidt et coll. ont proposé de monitorer les événements au niveau du noyau de
Linux [29]. Une modification de ce dernier leur a permis d’extraire des données telles que les
appels système et les modifications de fichiers afin de construire un modèle de comportement
normal. Cependant, l’article a été écrit avant que les malwares se répandent sous Android, et
aucun test n’a donc pu être effectué. Dans une publication ultérieure [30], ces mêmes auteurs
proposent d’effectuer le monitorage an lançant les applications dans un environnement
sécurisé dédié, dit sandbox. Cette fois, le monitorage a pour but de détecter des signatures de
malwares.
Une approche assez différente a été proposée sous le nom de TaintDroid [31] par Enck et coll.
TaintDroid permet de tracer dynamiquement lors de l’exécution d’une application la
circulation des données sensibles de l’utilisateur. Ce système permet de détecter les
applications qui volent les informations sensibles telles que les coordonnées GPS ou le carnet
d’adresse.
Si de nombreux paramètres sont utilisés pour modéliser le comportement d’un programme
dans les différentes publications, l’absence d’étalon empêche de réellement pouvoir comparer
les résultats obtenus. Cependant le choix même des paramètres a une influence sur le type
d’attaque que l’on cherche à détecter. Surveiller la consommation de batterie peut être
efficace pour détecter un logiciel malveillant peu discret qui génère énormément de calcul,
Chapitre 1 — Etat de l’art
23
tandis que surveiller les données sensibles comme TaintDroid peut permettre de détecter le
vol d’informations personnelles. Surveiller les appels aux différentes API (Application
Programing Interface) tels que les appels système donne des informations plus générales, mais
également plus difficiles à interpréter pour l’homme.
1.9 L’approche Comportementale
L’approche comportementale propose de modéliser le comportement normal d’un
système et de s’en servir comme référence. Les techniques utilisées sont multiples mais se
basent souvent sur la machine Learning. Dans un premier temps, on observe un système
considéré comme sain et on construit un ou des détecteurs. Ensuite, on utilise ces détecteurs
pour mesurer l’écart entre le comportement observé et celui attendu. Il est cependant difficile
de construire un modèle précis du comportement normal du système. Si, à l’instar de
l’approche par signatures, un IDS comportemental aura un bon taux de détection (peu de faux
négatifs), il aura aussi tendance à lever des fausses alertes (faux positifs) en trop grand
nombre.
Dans la détection d’intrusion, on fait face à un déséquilibre des classes. On rencontrera
beaucoup plus de négatifs (comportement légal) que de positifs (comportement illégal).
Ce fait oblige à avoir un taux de détection très haut et un taux de faux positifs très bas. Un
taux de faux positif de 1% est déjà beaucoup trop important en conditions réelles, on
cherchera plutôt des chiffres de 0.1% voire moins.
1.10 Appel Système (System Call)
Un appel système est un moyen de communiquer directement avec le noyau de la
machine. Le noyau regroupe toutes les opérations vitales de la machine. Ainsi il est
impossible d'écrire directement sur le disque dur. L'utilisateur doit passer par des appels
systèmes qui contrôlent les actions qu'il fait. Ceci permet de garantir :
La sécurité des données car le noyau interdira à un utilisateur d'ouvrir les fichiers
auxquels il n'a pas accès.
L’intégrité des données sur le disque. Un utilisateur ne peut pas par mégarde effacer un
secteur du disque ou modifier son contenu.
Les fonctions sont contenues quant à elles dans des bibliothèques. Il s'agit donc de code
s'exécutant dans l'espace utilisateur. Les fonctions peuvent utiliser des appels système.
Quelques appels systèmes classiques :
Chapitre 1 — Etat de l’art
24
Open, read, write et close qui permettent les manipulations sur les systèmes de fichiers
brk, sbrk, utilisés par malloc et free pour allouer et désallouer de la mémoire.
1.11 Conclusion
Nous avons présenté dans un premier temps le système Android : son architecture, la
notion d’application Android et le modèle de sécurité d’Android. Ensuite, nous montrons les
limites du mécanisme de sécurité Android ainsi qu’un aperçu des menaces que représentent
les malware Android. Et nous avons parlé d’analyser dynamique et d’analyse statique des
applications Android et Analyse hybride.
Dans le deuxième chapitre, nous présenterons en détail de la machine Learning. Pour
détecter les nouveaux programmes malveillants .La méthode basée sur l'exploration de
données et l'apprentissage de la machine ont montré de bons résultats par rapport à d'autres
approches, sont les points de ce deuxième chapitre.
25
Chapitre 2
Machine Learning et Algorithme
SVM
Introduction
Le domaine de la machine Learning inclut la construction d'un modèle à partir de
données grâce à l'utilisation d'un algorithme. Ce modèle va au mieux généraliser, en
représentant ou en approximant les données. Il permet, selon les données qu'on lui donne en
input, de prédire celles inconnues ainsi que de mieux comprendre celles existantes. Le
domaine d'application du machine Learning est très varié : la rédaction de valeurs financières,
la détection d'intrusion dans le domaine de la sécurité informatique, le moteur de recherche
influençable par le profil de l'utilisateur, la détection de vols de machine, l'implémentation
d'un anti-virus et la -cryptanalyse.
Chapitre 2 — Machine Learning et Algorithme de SVM
26
2.1 Machin Learning
2.1.1 Obtention des données et pré-processing
La première étape à réaliser est donc l'obtention de données en suffisance
représentatives du problème à résoudre. Ceci n'est pas toujours aisé. Certaines informations
sont plus coûteuses à obtenir que d'autres. Par exemple, un header d'un paquet réseau est plus
simple à obtenir qu'une information dans la partie data quand celle-ci est chiffrée. La
deuxième étape est le nettoyage, appelé aussi pré-processing, de la donnée récoltée, c'est-à-
dire une réduction de ce qui est strictement intéressant, ainsi que leur traduction. Le but de
cette étape est une meilleure précision du modèle, une optimisation de son temps d'exécution
et de son apprentissage ainsi que de sa taille.
2.1.2 Réalisation du modèle
Elle consiste en une recherche de la meilleure structure ainsi que l'ensemble des
paramètres à initialiser dedans. La complexité, et plus précisément la qualité, du modèle aura
une influence directe sur la précision de la généralisation des données. Après avoir construit le
modèle, il est nécessaire de le configurer selon le problème à traiter grâce à la phase
d'apprentissage.
2.1.3 Phase d'apprentissage
Un sous-ensemble de l'ensemble des informations nettoyées forme les données
d'entrainement, permettant d'exécuter la phase d'apprentissage du modèle. Ceci permet
d'ajuster les paramètres du modèle. Il existe plusieurs sortes d'algorithmes d'apprentissage.
Certains de ces algorithmes sont supervisés et d'autres non supervisés. Un algorithme
supervisé est un algorithme à qui on présente l'entrée et la sortie (ou la cible) désirée en
supposant qu'il y a une relation inconnue mais réelle entre les deux. Il devra minimiser l'erreur
entre la sortie désirée et celle qu'il produit. Ils sont souvent utilisés pour des problèmes de
reconnaissance. Un algorithme non supervisé est un algorithme à qui on présente l'entrée mais
dont la sortie est inconnue. Ce type d'algorithmes est souvent utilisé pour des problèmes de
partitionnement où le nombre et la nature des partitions ne sont pas connus a priori.
Néanmoins, ce dernier ne donne aucun résultat si les données ne contiennent pas de partitions.
Après avoir entraîné le modèle, il est important de le valider pour éviter le sur-apprentissage.
Chapitre 2 — Machine Learning et Algorithme de SVM
27
2.1.4 Sur-Apprentissage
Le sur-apprentissage a lieu quand le modèle prédit correctement les données
présentées lors de la phase d'apprentissage mais a des mauvais résultats lors de la phase
d'exécution. Pour éviter le sur-apprentissage, on peut utiliser l'une des méthodes suivantes:
1. On regarde empiriquement le nombre de périodes de la phase d'apprentissage pour
qu'il n'y ait pas de sur-apprentissage.
2. Le Earl stopping est une technique où on divise les informations en deux parties.
La première partie permet d'entraîner le modèle, la deuxième permet de le tester. On procède
ainsi en le réalisant plusieurs fois et on regarde les erreurs. Au début, les fautes vont diminuer
mais, petit à petit, les erreurs sur la partie test vont commencer à augmenter lorsqu'il y aura un
sur-apprentissage. Et c'est à ce moment qu'il faut arrêter l'apprentissage. Ainsi, on gagne aussi
sur le temps nécessaire pour l'apprentissage.
2.1.5 Phase de validation
Durant cette phase, on va tester et valider le modèle et ses paramètres selon des
critères se basant sur ses résultats. Il permet d'obtenir le meilleur modèle généralisant les
données obtenues lors de la phase d'apprentissage. Pour cela, on a un ensemble d'exemples
pour l'apprentissage et un autre pour les tests. Voici quelques méthodes pour les tests :
1. Hold-out : On coup e aléatoirement l'ensemble des informations en deux groupes :
groupe d'apprentissage et groupe de tests.
2. Leave-one-out : Cette méthode sort de l'ensemble des informations une donnée en
particulier et la laisse de côté, puis construit le modèle avec celles restantes et enfin évalue la
structure avec l'exemple laissé de côté. On répète le processus pour chacune des données de
l'ensemble de données. Ainsi, on peut avoir une moyenne globale de la précision du modèle.
3. Cross-validation : Cette méthode réalise un partitionnement des données de manière
aléatoire en n groupes. On utilise une partition comme un ensemble de test et le reste pour
former celui d'entraînement. Comme précédemment, on applique un algorithme à l'ensemble
d'entraînement et on évalue le modèle résultant sur celui de tests. On répète ce processus pour
chaque partition et on regarde l'erreur moyenne.
Chapitre 2 — Machine Learning et Algorithme de SVM
28
D'autres méthodes existent telles que le bootstrap. Enfin, après avoir validé le modèle, il reste
à quantifier ses performances en pratique.
2.1.6 Performance du modèle
Apres avoir choisi et évalué votre modèle, il est intéressant de pouvoir quantifier ses
performances. Pour cela, on compare plusieurs modèles sur un même jeu de données. En
effet, certains sont plus adaptés pour certains problèmes. Lors de cette phase, il est primordial
de ne pas enlever de données pour ne pas biaiser l'évaluation. Pour cette phase, on s'intéresse
au pourcentage de vrais positifs, de vrais négatifs, de faux négatifs et enfin de faux positifs.
Néanmoins, ça n'inclut pas la taille du modèle ni son temps d'apprentissage ou son temps
d'exécution. La technique receiver operating characteristic (ROC) est largement utilisée et
permet de tester une structure.
Concrètement, un ROC est une courbe d'un modèle représentant ses vrais positifs par rapport
à ses faux positif. L'aire sous cette courbe représente la performance du modèle.
2.1.7 Types de modèle Il existe plusieurs types de modèles dans [38]. Outre le fait qu'ils sont différenciables
par leur côté supervisé ou non supervisé, ils le sont aussi par leur côté classification ou
régression.
Pour ce qui est du contexte d’apprentissage supervisé :
Régression logistique (SGV) : Son domaine de prédilection est celui de la prédiction de
probabilité d’apparition d’évènements comme par exemple dans le domaine de la fraude
bancaire ou encore dans celui de la publicité pour le ciblage de clients fidélisables.
Classification Bayésienne : Une utilisation courante de notre boîte aux lettres électronique
nous amène à utiliser un programme basé sur cet algorithme. Les filtres de spam sont en fait
des règles de classification qui servent à l’algorithme bayésien contenu dans l’agent anti-spam
pour séparer les « bons courriels des mauvais ».
Machine à vecteurs de support (SVM) : Il s’agit d’un ensemble de techniques destinées à
résoudre des problèmes de discrimination (prédiction d’appartenance à des groupes
prédéfinis) et de régression (analyse de la relation d’une variable par rapport à d’autres).
Réseau neuronaux : A l’inverse des algorithmes de déduction, ce dernier est un algorithme de
type induction c’est-à-dire que, par le biais d’observations limitées, il essaie de tirer des
Chapitre 2 — Machine Learning et Algorithme de SVM
29
généralisations plausibles. C’est un système basé sur l’expérience : il se constitue une
mémoire lors de sa phase d’apprentissage (qui peut être aussi non-supervisée) que l’on appelle
entrainement.
Forêts d’arbres décisionnels (Random Forest) : C’est une application de graphe en arbres de
décision permettant ainsi la modélisation de chaque résultat sur une branche en fonction de
choix précédents. On prend ensuite la meilleure décision en fonction des résultats qui
suivront. On peut considérer cela comme une forme d’anticipation.
Le Boosting : Il s’agit d’une méthode de classification émettant des hypothèses qui sont au
départ de moindre importance. Plus une hypothèse est vérifiée, et plus son indice de confiance
augmente et donc elle prend plus d’importance dans la classification.
Et pour le contexte d’apprentissage non-supervisé :
K-moyennes (KMeans) : KMeans est un algorithme de partitionnement des données en K
nombre de groupes. Il est utilisé notamment dans la bibliothèque OpenCV précédemment
mentionnée vis-à-vis du domaine de la « computer vision ». Dans Mahout, on l’utilise
typiquement afin de déterminer quelle suggestion peut être faite à un utilisateur en fonction
des préférences que d’autres utilisateurs similaires ont eues (utilisateurs du même groupe).
Fuzzy KMeans : Il s’agit d’une variante du précédent algorithme proposant qu’un objet ne soit
associé qu’à un seul groupe.
Espérance-Maximisation (EM) : Comme on peut le deviner, cet algorithme utilise des
probabilités pour décrire qu’un objet appartient à un groupe. Le centre du groupe est ensuite
recalculé par rapport à la moyenne des probabilités de chaque objet du groupe.
Regroupement hiérarchique : Deux sous-algorithmes en découlent, à savoir d’une part le «
bottom up » qui a pour fonction d’agglomérer des groupes similaires, donc en réduire le
nombre (plus lisible) et d’en proposer un ordre hiérarchique, et d’autre part, le « top down »
qui fait le résonnement inverse en divisant le premier groupe récursivement en sous-
ensembles.
2.2 Algorithmes de Support Vector Machines
2.2.1 Définition
Les machines à vecteurs de support ou séparateurs à vaste marge (en anglais Support
Vector Machine, SVM) sont un ensemble de techniques d'apprentissage supervisé
Chapitre 2 — Machine Learning et Algorithme de SVM
30
destinées à résoudre des problèmes de discrimination et de régression. Les SVM
sont une généralisation des Classifieur linéaires [36].
Les SVM ont été développés dans les années 1990 à partir des considérations
théoriques de Vladimir Vapnik sur le développement d'une théorie statistique de
l'apprentissage : la théorie de Vapnik-Chervonenkis. Les SVM ont rapidement été adoptés
pour leur capacité à travailler avec des données de grandes dimensions, le faible nombre
d'hyper paramètres, leurs garanties théoriques, et leurs bons résultats en pratique.
Les SVM ont été appliqués à de très nombreux domaines (bio-informatique, recherche
d'information, vision par ordinateur, finance...). Selon les données, la performance des
machines à vecteurs de support est de même ordre, ou même supérieure, à celle d'un réseau de
neurones ou d'un modèle de mélanges gaussiens.
2.2.2 Principe général
Les SVM peuvent être utilisés pour résoudre des problèmes de discrimination, c'est-à-dire
décider à quelle classe appartient un échantillon, ou de régression, c'est-à-dire prédire la
valeur numérique d'une variable. La résolution de ces deux problèmes passe par la
construction d'une fonction ℎ qui a un vecteur d'entrée 𝑥 fait correspondre une sortie : 𝑦 ∶
𝑦 = ℎ(𝑥). Dans [36].
On se limite pour l'instant à un problème de discrimination à deux classes
(discrimination binaire), c'est-à-dire ∋ {−1,1 } , le vecteur d'entrée 𝑥 étant dans un espace
𝑋 muni d'un produit scalaire. On peut prendre par exemple 𝑋 = 𝑅𝑁 .
2.2.3 Notions de base
Hyperplan : On appelle hyperplan séparateur un hyperplan qui sépare les deux
classes figure.2.1, en particulier il sépare leurs points d’apprentissage.
Chapitre 2 — Machine Learning et Algorithme de SVM
31
Figure 2. 1—l’hyperplan H qui sépare les deux ensembles de points
Vecteurs de support : Pour une tache de détermination de l’hyperplan séparable des
SVM est d’utiliser seulement les points les plus proches (i.e. Les points de la frontière
entre les deux classes des données) parmi l’ensemble total d’apprentissage, ces point sont
appelés vecteurs de support figure.2.2.
Figure 2. 2—Les vecteurs de support.
Marge : il existe une infinité d’hyperplans capable de séparer parfaitement les deux
classes d’exemples. Le principe des SVM est de choisir celui qui va maximiser la
distance minimale entre l’hyperplan et les exemples d’apprentissage (i.e. La distance
entre l’hyperplan et les vecteurs de support), cette distance est appelée la marge (figure.2.3).
Chapitre 2 — Machine Learning et Algorithme de SVM
32
Figure 2. 3—hyperplan optimal, vecteurs de support et marge maximale.
2.2.4 Propriétés fondamentales
Maximiser la marge : Intuitivement, le fait d'avoir une marge plus large procure plus de
sécurité lorsqu’on classe un nouvel exemple. De plus, si l’on trouve le classificateur qui se
comporte le mieux vis-à-vis des données d'apprentissage, il est clair qu’il sera aussi celui qui
permettra au mieux de classer les nouveaux exemples. Dans le schéma (figure 2.4), la partie
droite nous montre qu'avec un hyperplan optimal, un nouvel exemple reste bien classé alors
qu'il tombe dans la marge. On constate sur la partie gauche qu'avec une plus petite marge,
l'exemple se voit mal classé
Figure 2. 4—meilleur hyperplan séparateur.
Linéarité et non-linéarité : Parmi les modèles des SVM, on constate les cas linéairement
séparables et les cas non linéairement séparables. Les premiers ont les plus simples des
Chapitre 2 — Machine Learning et Algorithme de SVM
33
SVM car ils permettent de trouver facilement le classificateur linéaire. Dans la plupart des
problèmes réels il n’y a pas de séparation linéaire possible entre les données, le classificateur
de marge maximale ne peut pas être utilisé car il fonctionne seulement si les classes
de données ’apprentissage sont linéairement séparables.
Figure 2. 5—Cas linéairement séparable.
Figure 2. 6—Cas non linéairement séparable.
2.2.5 Fondement mathématiques
Le cas linéairement séparable : Si les données sont linéairement séparables, alors il existe un
hyperplan d’équation ⟨𝑊, 𝑋⟩ + 𝑏 = 0 tel que :
{𝑊. 𝑋 + 𝑏 > 1 𝑒𝑡 𝑠𝑖 𝑦𝑖 = +1𝑊. 𝑋 + 𝑏 ≤ 1 𝑒𝑡 𝑠𝑖 𝑦𝑖 = −1
}
On peut combiner ces deux inéquations en une seule : 𝑦𝑖(𝑊. 𝑋 + 𝑏) ≥ +1
Chapitre 2 — Machine Learning et Algorithme de SVM
34
La distance perpendiculaire de l’origine a l’hyperplan : 𝐻1: 𝑊. 𝑋 + 𝑏 = 1 est |1−𝑏|
‖𝑤‖
De même pour : 𝐻2: 𝑊. 𝑋 + 𝑏 = −1 est |1+ 𝑏|
‖𝑤‖
Figure 2. 7—exemples graphiques des données linéairement séparables.
Calcul de la marge : Rappelons que (en deux dimensions) la distance entre un point (𝑥0, 𝑦0)
et une droite 𝐴𝑥 + 𝐵𝑦 + 𝐶 = 0 est donnée par la relation suivante : |𝐴𝑥0+𝐵𝑦0+𝐶|
√𝐴2+𝐵2
De façon similaire, la distance entre un point situé sur 𝐻1 et l’hyperplan 𝐻0est donnée par :
|𝑤. 𝑥 +𝑏|
‖𝑤‖ =
|1|
‖𝑤‖
Donc la marge (la distance entre les deux hyperplans 𝐻1et 𝐻2 ) est |2|
‖𝑤‖ La maximisation de
cette quantité revient à minimiser l’inverse ‖𝑤‖
|2| Donc finalement notre problème peut être
formulé comme suit : 𝑚𝑖𝑛1
2 𝑤𝑇w toujours en restant dans le cadre de la condition initiale qui
est : 𝑦𝑖(𝑤. 𝑥 + 𝑏) ≥ +1
On a : {
min (1
2 𝑤𝑡w )
𝑠𝑜𝑢𝑠 𝑙𝑎 𝑐𝑜𝑛𝑡𝑟𝑎𝑖𝑛𝑡𝑒𝑦𝑖
(𝑤. 𝑥 + 𝑏) ≥ +1
}
Chapitre 2 — Machine Learning et Algorithme de SVM
35
Le cas non linéairement séparable : Dans le cas non linéairement séparable, on introduit des
variables d’écart 𝜀𝑖(𝑖 = 1 … … 𝑁) avec 𝜀 > 0 dans les contraintes, qui deviennent :
{𝑤. 𝑥 + 𝑏 ≥ 1 − 𝜀𝑖 𝑒𝑡 𝑠𝑖 𝑦𝑖 = +1𝑤. 𝑥 + 𝑏 ≤ 1 + 𝜀𝑖 𝑒𝑡 𝑠𝑖 𝑦𝑖 = −1
}
Un moyen naturel de donner un coût aux erreurs est de remplacer la fonction à
minimiser précédente par : ‖𝑤‖
|2|+ 𝐶 ( ∑ 𝜀𝑖) 𝐾
Dans le cas où les données sont non linéairement séparables, c'est-à-dire la surface
séparatrice est non linéaire, on transpose le problème dans un autre espace F de
dimension plus élevé pour rendre les nuages de points des deux classes linéairement
séparable au moyen d’une transformation Φ tel que : Φ: x → Φ ϵ F
Le calcul de la surface de séparation revient alors à chercher l’hyperplan optimal dans
ce nouvel espace F. La fonction de décision peut être représentée par le produit scalaire :
Φ𝑇(𝑥𝑖) ∗ Φ (𝑥𝑗) Cette dernière quantité peut être remplacée par une fonction de la forme
𝐾(𝑥𝑖, 𝑦𝑖) (Les fonctions scalaires symétriques et définies positives, que l’on désigne
souvent simplement par “noyaux”, sont plus précisément des “noyaux de Mercer”), c’est ce
qu’on appelle le noyau .Donc : 𝐾(𝑥𝑖, 𝑦𝑖) = Φ𝑇(𝑥𝑖) ∗ Φ (𝑥𝑗)
Le lagrangien devient alors :𝐿(𝑤, 𝑏, 𝑎) = ∑ 𝑎𝑖𝑁 𝐼=1 −
1
2 ∑ ∑ 𝑎𝑖 𝑎𝑗 𝑦𝑖𝑦𝑗
𝑁𝑗=1
𝑁𝑖=1 𝐾(𝑥𝑖, 𝑦𝑖)
A ce stade, le problème se situe dans le choix de la transformation Φ ou plus généralement à
la fonction noyau K. Ils existent peu de noyaux régulièrement utilisés avec les SVM
2.3 Conclusion
Dans ce chapitre, nous avons présenté en détail du machine Learning et algorithme de
support vector machine .Différents chercheurs ont proposé des méthodes utilisant
l'exploration de données et l'apprentissage de la machine pour détecter les nouveaux
programmes malveillants. La méthode basée sur l'exploration de données et l'apprentissage de
la machine a montré de bons résultats par rapport à d'autres approches.
Dans chapitre suivant nous présentons un modèle pour détecter malveillants sur
Android.
36
Chapitre 3
Modèle et Algorithme de détection
Introduction
Dans ce chapitre, nous proposons une nouvelle approche détectée des applications
malwares. Dans un premier temps, nous implémentons le modèle d’apprentissage. Puis, nous
décrivons notre propre des algorithmes, nommé Approche Comportementale Détection
Malware ACDM, pour observe le comportement du programme. Enfin, nous présentons et
analysons quelques résultats expérimentaux.
Chapitre 3 — Modelé et Algorithme de détection
37
3.1 Approche proposée
Notre approche comportementale détection malware ACDM consiste à analyser
l’application présente sur le téléphone. Cette idée est une reprise de l’approche
comportementale utilisée dans le domaine de la détection d’intrusion, dont nous parlerons
plus en détail dans ce chapitre.
3.2 Objectifs
ACDM et une approche de détection de Malware Android qui surveille simultanément
Android au niveau de l'utilisateur et au niveau du noyau. Elle détecter les logiciels
malveillants en utilisant des techniques d'apprentissage machine et faire la distinction entre la
norme les comportements et les méchants.
Le monitorage de comportement de l’application par notre approche s’effectue en deux
phases. La première phase, dite d’apprentissage, consiste à construire un vecteur d’appels
système par l’observation de comportement du programme au cours de son exécution. La
deuxième phase est la détection : qui utilise la base d’apprentissage de la première phase pour
prédire les types d’applications soumise pour la détection.
3.3 Notre contribution
Nous allons présenter sur ces approches deux parties en détail, la partie
d’apprentissage qui est constitué de 2 phases :
Extraction de séquence d’appels, algorithmes raffinage et algorithmes normalisation, nous
parlons en détail dans les étapes suivant (voir 3.5).
Machine Learning SVM qui crée une nouvelle base pour détection les applications.
La deuxième partie est la partie détection, qui utilise la base d’apprentissage de la
première partie pour prédire les types d’applications soumise pour la détection.
3.4 Schéma global :
La figure 3.1 représente les différents modules de notre approche. Les modules ont les
rôles suivants :
Chapitre 3 — Modelé et Algorithme de détection
38
Figure 3. 1— Schéma global.
3.5 Extraction des données
3.5.1 Applications Android
Pour notre étude, nous avons pris un échantillon du marché Play Store qui contient les
Applications malware et des Applications normal et les avons traité suivent les étapes
suivant.
3.5.2 Récupération de données
Emulateur : L'émulateur Android est une application qui fournit un appareil mobile virtuel
sur lequel vous pouvez exécuter vos applications Android. Il fonctionne grâce à une pile
Chapitre 3 — Modelé et Algorithme de détection
39
complète du système Android, jusqu'au niveau du noyau, qui comprend un ensemble
d'applications préinstallées (tels que le composeur) auquel vous pouvez accéder à partir de
vos applications. Vous pouvez choisir quelle version du système Android que vous voulez
exécuter dans l'émulateur par AVDS configuration, et vous pouvez également personnaliser la
peau de l'appareil mobile et applications clés. Lors du lancement de l'émulateur et à
l'exécution, vous pouvez utiliser une variété de commandes et d'options pour contrôler son
comportement.
Strace : Strace est une commande Linux qui permet d’obtenir le flux des appels système
effectués par un processus. Cette commande n’est pas disponible par défaut dans les versions
récentes d’Android, aussi nous avons dû l’installer manuellement. De plus, son utilisation
nécessite les droits root.
Fenêtre glissante : Ce modèle reprend le travail de Forrest. Il consiste à associer à chaque
appel système des listes d’appels système. Pour construire le modèle, une fenêtre glissante de
largeur k parcourt une trace. Supposons que nous choisissons k = 3 les appels système se
suivent pour définir un comportement normal: ouvrir, lire, mmap, mmap, ouvert, getrlimit,
mmap, proche quand nous glissons la fenêtre à travers les séquences, nous enregistrons pour
chaque appel l’appel qui le suit à la fenêtre1, en fenêtre2, et ainsi de suite, jusqu'à la position
k.
Exemple : La division une fenêtre glissante se fait comme suit :
Pour i = 1 à 50
𝐾 = 3
Chapitre 3 — Modelé et Algorithme de détection
40
Figure 3. 2—La division une fenêtre glissante
Appel Système 1 appel après 2 appels après
Fenêtre 1 open open read
Fenêtre 2 open read gettime
Fenêtre 3 read gettime open
Figure 3. 3— Liste de paires.
Fenêtre glissante 1 :
open open Read gettime open
Fenêtre glissante 2 :
open open read gettime open
Fenêtre glissante 3 :
open open read gettime open
Chapitre 3 — Modelé et Algorithme de détection
41
3.5.3 Algorithme de raffinage
L’algorithme de raffinage (Figure 3.4) peut être résumé comme suit :
Figure 3. 4—Schéma de fonctionnement de l’algorithme Raffinage.
En première étape on a initialisé l’itération de la boucle qui devise la fenêtre glissante 𝑖 ∶ k=
i+2 représente le nombre d’appels système de chaque fenêtre.
𝑖 ∈ {1,2 … … , 𝑛}
A partir de cet algorithme, nous allons définir les matrices pour applications malware et
applications normal pour chaque ligne de matrice nous construisons une fenêtre glissante 𝑓𝑖 ∈
{0,1,2 … . . , 𝑛} .
pour appliquer l’algorithme de rafinage nous avons construit deux matrices
𝑀 malware et 𝑁 normal comme suit :
Début
Initialiser itération
Raffiner entre deux matrices
Entrer matrice Mal et Normal
𝑓 ∈ 𝑁 𝑓∉ 𝑁
Liste noir Supprimer
Chapitre 3 — Modelé et Algorithme de détection
42
M_Malware
𝑴𝒎𝒂𝒍𝒘𝒂𝒓𝒆𝒊 = {
𝒇𝟏𝟏 𝒇𝟐𝟏 … … … 𝒇𝒏𝟏
𝒇𝟏𝟐 𝒇𝟐𝟐 … … … 𝒇𝒏𝒊
𝒇𝟏𝒎 𝒇𝟐𝒎 … … … 𝒇𝒏𝒎
}
𝒎𝟏
𝒎𝟐
𝒎𝒏
N_Normal
𝑵𝒏𝒐𝒓𝒎𝒂𝒍𝒊= {
𝒇𝟏𝟏 𝒇𝟐𝟏 … … … 𝒇𝒏𝟏
𝒇𝟏𝟐 𝒇𝟐𝟐 … … … 𝒇𝒏𝟐
𝒇𝟏𝒎 𝒇𝟐𝒎 … … … 𝒇𝒏𝒎
}
𝒏𝟏
𝒏𝟐
𝒏𝒏
En dernière étape nous comparons chaque fenetres glissantes 𝑓𝑖de matrice 𝑀 par toutes
fenetres glissantes de matrice 𝑁 et voir le resultat s’il 𝑓𝑖existe dans 𝑁 : supprimer la fenêtre et
ajouter à la liste noire si elle n’existe pas.
Algorithme de raffinage :
3.5.4 Algorithme Normalisation
L’algorithme de Normalisation (Figure 3.5) peut être résumé en trois points comme suit :
entrée : 𝐿𝑖𝑠𝑡𝑒 𝑑𝑒𝑠 𝑓𝑒𝑛è𝑡𝑟𝑒𝑠 𝑔𝑙𝑖𝑠𝑠𝑎𝑛𝑡𝑒𝑠
sorties : 𝐿𝑖𝑠𝑡𝑒 𝑛𝑜𝑖𝑟𝑒 = []
Pour 𝑖 : 1 à 50 (𝑏𝑜𝑢𝑐𝑙𝑒 𝑑′𝐼𝑡𝑒𝑟𝑎𝑡𝑖𝑜𝑛 )
Pour 𝑀:1 100 (𝑎𝑝𝑝𝑙𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑀𝑎𝑙 )
Pour tout 𝑓𝑖 → 𝑀𝑖(𝑓1……… 𝑓𝑛 ) « i +2 la taille de fenêtre glissante «
Si 𝑓𝑖 ∈ 𝑁 (𝑎𝑝𝑝𝑙𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑁𝑜𝑟𝑚𝑎𝑙 ) alors
Suppremer 𝑓𝑖
Else
𝐿𝑖𝑠𝑡𝑒 𝑛𝑜𝑖𝑟𝑒 ← 𝑓𝑖
𝑑𝑒𝑡𝑒𝑐𝑡𝑖𝑜𝑛 (𝐿𝑖𝑠𝑡𝑒 𝑛𝑜𝑖𝑟𝑒)
Si résultat de détection suffisante alors
Quiter l’algorithme
Chapitre 3 — Modelé et Algorithme de détection
43
Figure 3. 5—Schéma de fonctionnement de l’algorithme Normalisation.
L’objectif de l’algorithme de normalisation est de construire un vecteur normalisé {0
,1} à partir de la comparaison entre les fenêtres de la liste noire f avec celles de vecteur
soumis.
𝐿𝑖𝑠𝑡𝑒 𝑛𝑜𝑖𝑟𝑒 ={[𝑓1] ;[ 𝑓2] ;[ 𝑓3] ……….[ 𝑓𝑛] }
𝑀_𝑀𝑎𝑙𝑤𝑎𝑟𝑒
𝑴𝒎𝒂𝒍𝒘𝒂𝒓𝒆𝒊 = {
𝒇𝟏𝟏 𝒇𝟐𝟏 … … … 𝒇𝒏𝟏
𝒇𝟏𝟐 𝒇𝟐𝟐 … … … 𝒇𝒏𝒊
𝒇𝟏𝒎 𝒇𝟐𝒎 … … … 𝒇𝒏𝒎
}
𝒎𝟏
𝒎𝟐
𝒎𝒏
𝑁_𝑁𝑜𝑟𝑚𝑎𝑙
𝑵𝒏𝒐𝒓𝒎𝒂𝒍𝒊= {
𝒇𝟏𝟏 𝒇𝟐𝟏 … … … 𝒇𝒏𝟏
𝒇𝟏𝟐 𝒇𝟐𝟐 … … … 𝒇𝒏𝟐
𝒇𝟏𝒎 𝒇𝟐𝒎 … … … 𝒇𝒏𝒎
}
𝒏𝟏
𝒏𝟐
𝒏𝒏
𝑙𝑖𝑠𝑡𝑒 𝑁𝑜𝑟𝑚𝑎𝑙𝑖𝑠é𝑒 = {[1]; [1]; [0]; [0] … … … … [1]}
Début
Comparer les fenêtres f de liste_noir
avec celles de vecteur soumis
𝑓∉ 𝑉
𝑓 ∈ 𝑉
Liste Normalisée {1,0}
𝑓𝑖 𝑓𝑖
Chapitre 3 — Modelé et Algorithme de détection
44
Algorithme de Normalisation:
3.5.5 Machine Learning
Dans cette dernière étape basée sur l'apprentissage qui utilisent des techniques de
Machine Learning pour détecter des déviations comportementales.
Le but de l'apprentissage supervisé est de trouver une fonction ou un modèle qui à partir
d’échantillons en entrée permet de prédire le plus précisément possible le classe de cet
échantillon.
Les vecteurs construits lors de la phase de normalisation seront sauvegardés dans une matrice.
Cette matrice est soumise à le classificateur SVM pour construire la base d’apprentissage. La
fonction d’apprentissage prend en entrée deux paramètres la première c’est la matrice des
vecteurs construits lors de la phase de normalisation et la deuxième c’est le vecteur de types
d’applications soumise. Et Fonction Prédiction prend en entrée un seul paramètre est la
matrice des vecteurs.
Après l'étape de l'apprentissage vient l'étape de la détection qui utilise la base d’apprentissage
de la première phase pour prédire les types d’applications soumise pour la détection.
entrée : 𝐿𝑖𝑠𝑡𝑒 𝑑𝑒𝑠 𝑣𝑒𝑐𝑡𝑒𝑢𝑟 𝑑𝑒 𝑀𝑀𝑎𝑙𝑤𝑎𝑟𝑒 et 𝑁𝑁𝑜𝑟𝑚𝑎𝑙
𝐿𝑖𝑠𝑡𝑒 𝑛𝑜𝑖𝑟𝑒 = []
𝐿𝑖𝑠𝑡𝑒 𝑁𝑜𝑟𝑚𝑎𝑙𝑖𝑠é𝑒 = []
Pour 𝐿𝑖𝑠𝑡𝑒 𝑛𝑜𝑖𝑟𝑒 :1 𝑛 (𝑎𝑝𝑝𝑙𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑀𝑎𝑙 )
Pour tout 𝑓𝑖 → 𝑉𝑖(𝑓1……… 𝑓𝑛 )
If 𝑓𝑖 ∈ 𝑉 (𝑎𝑝𝑝𝑙𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑁𝑜𝑟𝑚𝑎𝑙 )
𝑓𝑖=1 ;
Else
𝑓𝑖=0 ;
𝐿𝑖𝑠𝑡𝑒 𝑀𝑎𝑙𝑒 ← 𝑓𝑖
𝑀𝑎𝑐ℎ𝑖𝑛𝑒 𝐿𝑒𝑎𝑟𝑛𝑖𝑛𝑔 (𝐿𝑖𝑠𝑡𝑒 𝑁𝑜𝑟𝑚𝑎𝑙𝑖𝑠é𝑒)
Chapitre 3 — Modelé et Algorithme de détection
45
3.6 Expérimentaux de notre modèle
3.6.1 Jeu de donnée
Afin d'évaluer notre algorithme nous proposons de l'appliquer sur 10 échantillons de
application malware et 03 échantillons de application normale.
D’après l’analyse effectuée, il comprend plusieurs commandes : télécharger et installer une
application.
3.6.2 Expérimentation et résultat
Analyse des applications
Le processus d’analyse de chaque applications est le même qu’en section (3.5).
Il se traduit par son installation dans l’émulateur, le marquage de son apk et son exécution.
Nous introduisons les évènements déclenchant le code malveillant dans les échantillons de
malware. Introduire ces évènements nous assure que le code malveillant se déclenche durant
l’analyse afin de déterminer si oui ou non notre approche permet de détecter l’exécution du
code malveillant.
Une fois les applications analysées, nous analysons les flux observés par notre système
pour détecter l’exécution de malware. La détection est réalisée ultérieurement à l’analyse car
nous souhaitions collecter les flux et être capables de les réutiliser plus tard. L’outil utilisé est
cependant capable de faire la détection en temps réel.
Résultats
Lors de l’analyse des flux engendrés par les différentes applications.
Les tableaux dans figure 3.6 et 3.7 résument le résultat des expériences menées
respectivement sur les applications bénignes provenant de Google Play et les échantillons de
malware.
Le premier tableau présente les résultats avec les applications bénignes provenant de
Google Play. La première colonne liste les différentes catégories d’application utilisée durant
l’expérience. La deuxième indique le nombre d’échantillons utilisés pour chaque catégorie. La
troisième indique les correspondances entre les flux observés et l’une des profils utilisés. La
dernière indique le total des flux observés lors de l’analyse des applications de chaque
catégorie.
Chapitre 3 — Modelé et Algorithme de détection
46
Le deuxième tableau présente les résultats obtenus avec les échantillons de malware.
La première colonne liste les échantillons. La deuxième indique comment l’échantillon a été
catégorisé dans sa collection d’origine.
les malware :
sha256
nom de package Catégori
e bedf51a5732d94c173bcd8ed918333954f5
a78307c2a2f064b97b43278330f54
com.ps.pintu.view DroidK
ungFu e7d07c08a826520ef71bd4a5bfb8c6bc7b9
07c4f94f18631208cf6037bd88f2d com.dy.game.lianliankan DroidK
ungFu ded693418a1c5368e377ac654e06a5bac04
faff52ee0ef42a31eebcbf1cca2e0 com.mogo.smspopup DroidK
ungFu e07e7771124f0c5a9a7342e072e27a9cbad
6e5ab4bf7fb6b85fc8f4e4495e652 siir.atools.adbWireless DroidK
ungFu f157946d3868fbe013ec23b14f1097bb727
654b4f3926322f035e86e3f5f637e com.evilsunflower.reade
r.evilSunzi6 DroidK
ungFu 562c92478e7cf5790e6bd8d706c51d9178e
a1bd58537575f03edbbb427f54fc9 com.ps.ddp DroidK
ungFu b8ed964e21a6f480dccb593f85854b835f0
693472c5857d52af3efa5a4cc244b com.ps.kickmouse DroidK
ungFu 22670788ea0108e1e205f34e0a039f994bc
94f19563b6f09784074b41f61cc53 com.gp.geekadoo DroidK
ungFu 97b0f46920e69a0aa5abe2284fe1e7bf9d2
efa7ecfb4a29a7ba9b8a92e92c0c9 com.ps.yams DroidK
ungFu 64ab7a8e612d8d60c1c4cc8ce1b4ace4aaf
cec7e1f5239894f2b214b094fa1b1 com.safetest.Star DroidK
ungFu 85cafe005c7f893cae65fa0a5ebf1c103ec
a579529ebd5d531c672408acdb9d0 android.cxjf.bootstarts
etting DroidK
ungFu be4ada35dec3ef666681ddcf440be04f370
067ee588734cabf630295742d1fd9 com.nineiworks.wordsXGN DroidK
ungFu 80ae30136ea55e936c66cd61cbf1de428d8
d20d76fec06c1e4c0217472e6e089 com.ps.keepaccount DroidK
ungFu d7233e269b529198362c29b5f8a15f09e7e
4e282c8e35eb68b45b57978f63dd2 com.atools.netTrafficSt
ats DroidK
ungFu a023fa166051294fe5a569f26092588fdf2
4a060de46e5cd5be9a5c5bb3b0204 com.alan.message DroidK
ungFu bc377ac35e40f0a9d233d5c985804c99396
a45dc5dd45a2c8e134a458b05241c com.gp.search DroidK
ungFu 1968e8ac04e65e6c200eda249b5b92f836d
dbcaf5abcfffed1c2e04b471e6895 com.gp.search DroidK
ungFu 49b5a74653685708f2ffcd7bd490e8a6a4f
cdef0fc38fc8b9e76f00d39eb305c com.gp.mahjongg DroidK
ungFu 33af4b3acca35b70112fc6a2fbc369eabd7
f8c3f1e99d0db76d4f84d24ee3a6e com.gp.monolith DroidK
ungFu e7b8b5e1c6ec14dc17bbfd24f00b34d2d72
f999ad374342a6faedf4794fb5703 com.safetest.compass DroidK
ungFu
les apps normal: calendrie
nom de package com.android.calander
email com.android.mail
Figure 3. 6—Classification des 20 échantillons de malware.
Chapitre 3 — Modelé et Algorithme de détection
47
Itération taille de fenêtres
glissante
Nombre de fenêtre
glissante
Taux de détection
1 3 4707 100%
2 4 9475 100%
3 5 14923 100%
4 6 19833 100%
5 7 23753 100%
6 8 26400 90%
7 9 27938 100%
Figure 3. 7 —Résultats de la détection sur 10 échantillons de malware. Taux de Vrai
Positif : 100%
3.7 Conclusion
Nous avons présenté dans ce chapitre une nouvelle solution pour une détection à base
sur comportementale des applications, Dans l’étape de l’apprentissage nous avons proposé de
construire un modelé après à un passage des algorithmes afin leur prédiction et l'appliquer
sur échantillons de application malware et échantillons de application normale. Enfin, les
résultats semblent être bons et acceptable pour découvrir les logiciels malveillants.
48
Conclusion générale
Ce travail présente une approche de détection malware Android. Nous avons mis en
avant la possibilité de modéliser le comportement normal d’un programme à partir de ses
interactions avec le système d’exploitation et de détecter les sorties de ce comportement.
Nous avons approfondi nos recherches au deuxième chapitre sur machine Learning et
algorithmes de support vector machines en présentant notions de base et déclarés de cette
méthode.
Dans le dernier chapitre, nous avons présenté ACDM et une Approche de Détection de
Malware Android en utilisant des techniques d'apprentissage automatique pour faire la
distinction entre le comportement normale et celle de malware. Enfin, les résultats semblent
être bons et acceptable pour découvrir les logiciels malveillants.
49
Bibliographie
[1] Ohad Bobrov. Chinese government targets hong kong protesters with android mrat
spyware. https://www.lacoon.com/chinese-government-targets-hong-kong-
protesters-android-mrat-spyware/,2014.
[2] Adrienne Porter Felt, Helen J. Wang, Alexander Moshchuk, Steven Hanna,and Erika
Chin. permission re-delegation : Attacks and defenses. In Proceedings of the 20th
USENIX Conference on Security, SEC’11. USENIX Association, 2011.
[3] Erika Chin, Adrienne Porter Fell, Kate Greenwood, and David Wagner.Analyzing
inter-application communication in android. In MobiSys’11,2011.
[4] Yajin Zhou and Xuxian Jiang. Dissecting android malware : Characterization and
evolution. In Proceedings of the 2012 IEEE Symposium onSecurity and Privacy, SP
’12, pages 95–109, Washington, DC, USA, 2012.IEEE Computer Society.
[5] Android-root 2009-08-16 source. http://www.zenthought.org/content/file/android-
root-2009-08-16-source.
[6] ]Sebastian. Zimperlich sources. http://c-skills.blogspot.fr/2011/02/zimperlich-
sources.html, 2011.
[7] C-skills. Yummy yummy, gingerbreak ! http://c-skills.blogspot.fr/2011/04/yummy-
yummy-gingerbreak.html, 2011.
[8] Jeff Forristal. Android : One root to own them all, 2013.
[9] Christian Collberg, Clark Thomborson, and Douglas Low. A taxonomy of
obfuscating transformations. Technical report, University of Auckland,1997.
[10] Android Open Source Project. Pro guard.
http://developer.android.com/tools/help/proguard.html.
[11] Fred Chung. Custom class loading in dalvik, July 2011.
50
[12] William Enck, Peter Gilbert, Byung gon Chun, Landon P. Cox, Jaeyeon Jung,
Patrick McDaniel, and Anmol N. Sheth. Taintdroid : Aninformation-flow tracking system
for realtime privacy monitoring on smartphones. In In Proc. of the USENIX Symposium
on Operating Systems Design and Implementation (OSDI), 2010.
[13] Alastair R. Beresford, Andrew Rice, Nicholas Skehin, and Ripduman Sohan.
Mockdroid : trading privacy for application functionality on smartphones. In Proceedings
of the 12th Workshop on Mobile Computing Systems and Applications, 2011.
[14] Peter Hornyack, Seungyeop Han, Jaeyeon Jung, Stuart Schechter, and David
Wetherall. “these aren’t the droids you’re looking for” : Retrofitting, android to protect
data from imperious applications. In CCS’11, 2011.
[15] Machigar Ongtang, Stephen McLaughlin, William Enck, and Patrick McDaniel.
Semantically rich application-centric security in android. In Annual Computer Security
Applications Conference, volume 0, pages 340–349, Los Alamitos, CA, USA, 2009.
IEEE Computer Society.
[16] Dan Boneh and Matt Franklin. Identity-based encryption from the weil pairing. In
Advances in Cryptology—CRYPTO 2001, pages 213–229.Springer, 2001.
[17] Lok-Kwong Yan and Heng Yin. Droidscope seamlessly reconstructing os and dalvik
semantic views for dynamic android malware analysis. InProceedings of the 21st
USENIX Security Symposium, August 2012
[18] Erika Chin, Adrienne Porter Fell, Kate Greenwood, and David Wagner.Analyzing
inter-application communication in android. In MobiSys’11,2011
[19] Xinming Ou, Wayne F Boyer, and Miles A McQueen. A scalable approach to attack
graph generation. In Proceedings of the 13th ACM conference on Computer and
communications security, pages 336–345. ACM, 2006.
[20] Anthony Desnos and Geoffroy Gueguen. Android : From reversing to
decompilation. Technical report, Black Hat Abu Dhabi, 2011.
[21] Sven Bugiel, Stephan Heuser, and Ahmad-Reza Sadeghi. mytunes : Semantically
linked and user-centric fine-grained privacy control on android.Technical report,
CASED, 2012.
[22] William Enck, Machigar Ongtang, and Patrick Mcdaniel. Mitigating android
software misuse before it happens. Technical report, The Pennsylvania State University,
2008.
51
[23] Debin Gao, Michael K. Reiter, and Dawn Song. Gray-box extraction of execution
graphs for anomaly detection. In Proceedings of the 11th ACM conference on Computer
and communications security, pages 318–329, 2004.
[24] Rubin Xu, Hassen Saidi, and Ross Anderson. Aurasium : Practical policy
enforcement for android applications. In USENIX Security ’12, 2012.
[25] Asaf Shabtai, Robert Moskovitch, Yuval Elovici, and Chanan Glezer.Detection of
malicious code by applying machine learning classifiers on static features : A state-of-
the-art survey. Information Security Technical Report, 14(1) :16–29, 2009
[26] Konrad Rieck, Thorsten Holz, Carsten Willems, Patrick Düssel, and Pavel Laskov.
Learning and classification of malware behavior. In Detection of Intrusions and Malware,
and Vulnerability Assessment, pages 108–125. Springer, 2008
[27] Grant A Jacoby and Nathaniel J Davis. Battery-based intrusion detection. In Global
Telecommunications Conference, volume 4, pages 2250–2255. IEEE, 2004.
[28] Francesco Di Cerbo, Andrea Girardello, Florian Michahelles, and Svetlana
Voronkova. Detection of malicious applications on android os. In Computational
Forensics, pages 138–149. Springer, 2011.
[29] Aubrey-Derrick Schmidt, Hans-Gunther Schmidt, Jan Clausen, Kamer A Yuksel,
Osman Kiraz, Ahmet Camtepe, and Sahin Albayrak.Enhancing security of linux-based
android devices. In International Linux Kongress, 2008.
[30] Thomas Blasing, Leonid Batyuk, A-D Schmidt, Seyit Ahmet Camtepe, and Sahin
Albayrak. An android application sandbox system for suspicious software detection. In
Malicious and Unwanted Software (MALWARE), pages 55–62. IEEE, 2010.
[31] William Enck, Peter Gilbert, Byung-Gon Chun, Landon P Cox, Jaeyeon Jung,
Patrick McDaniel, and Anmol Sheth. Taintdroid : An informationflow tracking system
for realtime privacy monitoring on smartphones. In OSDI, volume 10, pages 255–270,
2010.
[32] Grace, Michael, Zhou, Yajin, Zhang, Qiang, Zou, Shihong, Jiang, and Xuxian.
Riskranker : scalable and accurate zero-day android malware detection. In Proceedings of
the 10th international conference on Mobile systems, applications, and services, MobiSys
’12, pages 281–294, New York, NY, USA, 2012. ACM.
[33] KHELLAT-KIHEL Souad. Les séparateurs a vaste marge Biclasses. Université des
Sciences et de la technologie d’Oran Usto M.B .2011-2012
52
[34] Zhou, Wu, Zhou, Yajin, Jiang, Xuxian, Ning, and Peng. Detecting repackaged
smartphone applications in third-party android marketplaces. In Proceedings of the
second ACM conference on Data and Application Security and Privacy, CODASPY ’12,
pages 317–326, New York, NY, USA, 2012. ACM.
Webographie
[35] http://blog.erlem.fr/android/31-architecture-generale-d-android
[36] http://fr.wikipedia.org/wiki/Machine_%C3%A0_vecteurs_de_support
[37] http://www.pointgphone.com/tutoriel-composants-android-2238/
[38] http://blogs.msdn.com/b/big_data_france/archive/2013/04/24/apprentissage-
automatique-machine-learning.aspx
53
Annexe
Vecteurs
Exemple liste mal :
mal_liste_1 = [240, 240, 265, 240, 20, 240, 54, 265, 256, 125, 125, 125, 265, 265, 265, 265, 126, 265, 256, 265, 4, 265, 256, 3, 265, 265, 54, 20, 199, 256, 240, 126, 125, 125, 240, 240, 199, 126, 240, 256, 125, 240, 265, 20, 199, 256, 265, 265, 240, 265, 20, 199, 256, 265, 6, 255, 199, 199, 54, 265, 240, 240, 265, 265, 265, 265, 240, 240, 240, 240, 265, 265, 6, 265, 4, 240, 20, 240, 240, 126, 125, 54, 125, 240, 265, 265, 265, 265, 4, 54, 54, 265, 54, 54, 4, 96, 125, 240, 240, 240, 125, 125, 96, 255, 265, 6, 240, 20, 20, 199, 256, 265, 265, 146, 125, 240, 240, 240, 240, 240, 240, 265, 265, 265, 240, 265, 265, 54, 54, 4, 96, 265, 240, 125, 125, 125, 125, 265, 265, 20, 199, 256, 265, 265, 240, 126, 125, 125, 240, 240, 265, 265, 240, 265, 265, 265, 240, 240, 125, 125, 125, 125, 221, 4, 96, 265, 4, 54, 125, 125, 240, 240, 192, 126, 265, 265, 54, 54, 240, 240, 125, 125, 240, 240, 240, 125, 265, 240, 240, 240, 240, 240, 265, 125, 125, 265, 265, 265, 199, 256, 265, 265, 265, 265, 240, 240, 240, 265, 265, 265, 6, 255, 199, 199, 54, 265, 125, 125, 240, 240, 265, 265, 265, 265, 265, 240, 240, 240, 265, 240, 265, 265, 265, 240, 125, 240, 240, 192, 126, 126, 265, 54, 265, 256, 265, 4, 240, 126, 125, 125, 240, 240, 265, 240, 240, 265, 265, 256, 125, 125, 265, 256, 265, 4, 125, 240, 240, 240, 240, 265, 54, 265, 265, 20, 199, 256, 125, 125, 240, 240, 265, 125, 265, 265, 265, 54, 265, 54, 125, 240, 125, 240, 240, 240, 126, 126, 126, 45, 91, 125, 265, 146, 265, 265, 265, 4, 125, 125, 240, 240, 240, 240, 126, 125, 240, 192, 126, 126, 240, 125, 125, 240, 126, 240, 240, 240, 20, 199, 256, 255, 265, 265, 4, 96, 265, 240, 125, 125, 240, 240, 192, 126, 199, 256, 54, 54, 265, 265, 240, 265, 256, 3, 54, 265, 125, 125, 265, 125, 125, 240, 240, 125, 125, 240, 265, 240, 265, 265, 265, 265, 96, 20, 125, 125, 240, 146, 240, 240, 265, 265, 265, 265, 4, 54, 240, 126, 125, 125, 240, 240, 20, 199, 256, 265, 265, 54, 240, 240, 265, 265, 125, 125, 54, 125, 265, 125, 265, 240, 125, 125, 125, 125, 125, 240, 265, 4, 54, 54, 265, 125, 240, 265, 265, 256, 125, 125, 199, 146, 192, 91, 146, 192, 240, 240, 125, 125, 240, 126, 240, 240, 240, 265, 265, 240, 126, 125, 125, 126, 240, 125, 4, 240, 20, 240, 54, 240, 265, 125, 125, 4, 96, 240, 125, 146, 125, 125, 54, 240, 256, 125, 125, 125, 125, 265, 240, 240, 240, 240, 4, 240, 125, 125, 125, 125, 240, 240, 256, 265, 4, 265, 54, 54, 240, 126, 265, 125, 256, 125, 126, 265, 96, 240, 265, 240, 240, 240, 240, 240, 240, 240, 256, 3, 265, 146, 192, 91, 240, 240, 240, 126, 125, 125, 125, 240, 240, 265, 125, 125, 256, 265, 4, 265, 256, 3, 125, 125, 125, 125, 146, 255, 265, 186, 91, 126, 91, 1, 54, 125, 45, 125, 146, 240, 192, 126, 126, 126, 126, 240, 3, 265, 125, 125, 265, 256, 256, 265, 265, 146, 265, 265, 265, 125, 126, 125, 240, 192, 54, 126, 125, 91, 6, 240, 240, 240, 240, 240, 240, 126, 240, 240, 199, 256, 265, 20, 126, 265, 54, 54, 4, 96, 265, 265, 265, 265, 199, 199, 240, 265, 265, 265, 240, 265, 240, 265, 265, 265, 265, 240, 265, 265, 265, 265, 199, 199, 265, 265, 265, 265, 265, 4, 125, 125, 240, 240, 240, 240, 240, 265, 125, 125, 125, 125, 265, 265, 265, 265, 265, 265, 186, 172, 224, 240, 240, 240, 240, 240, 126, 125, 146, 240, 265, 265, 54, 54, 41, 221, 265, 20, 199, 256, 265, 265, 54, 20, 199, 256, 3, 265, 265, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 126, 265, 221, 4, 54, 6, 255, 192, 186, 172, 224, 240, 240, 265, 256, 265, 4, 265, 256, 256, 265, 265, 265, 265, 265, 125, 125, 125, 265, 265, 240, 265, 125, 125, 240, 240, 125, 265, 240, 125, 240, 125, 125, 126, 126, 126, 126, 91, 192, 265, 256, 265, 54, 54, 240, 265, 265, 265, 265, 265, 265, 265, 265, 265, 125, 125, 265, 125, 125, 125, 125, 125, 265, 125, 125, 240, 240, 240, 125, 240, 240, 126, 125, 125, 240, 20, 199, 256, 240, 240, 265, 240, 240, 240, 240, 240, 240, 54, 20, 199, 256, 265, 125, 126, 126, 126, 91, 192, 126, 125, 125, 125, 125, 125, 125, 240, 265, 265, 256, 265, 54, 54, 265, 265, 20, 199, 256, 126, 125, 125, 126, 125, 125, 265, 125, 125, 125, 125, 265, 265, 265, 265, 265, 265, 4, 240, 240, 240, 240, 126, 125, 20, 240, 54, 240, 240, 199, 146, 240, 125, 240, 240, 240, 199, 256, 265, 265, 146, 265, 265, 265, 125, 125, 240, 240, 265, 4, 265, 265, 20, 199, 240, 240, 240, 240, 240, 126, 240, 240, 240, 240,
54
240, 126, 240, 265, 265, 240, 240, 240, 54, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 125, 240, 240, 265, 265, 240, 265, 240, 126, 125, 126, 91, 54, 54, 54, 265, 265, 265, 265, 265, 265, 265, 125, 240, 240, 240, 125, 265, 265, 265, 265, 265, 265, 125, 240, 265, 265, 240, 125, 240, 192, 126, 126, 126, 126, 91, 240, 126, 240, 240, 240, 125, 54, 4, 96, 265, 4, 54, 120, 240, 192, 186, 172, 224, 54, 265, 54, 54, 41, 221, 265, 4, 265, 54, 265, 256, 126, 126, 126, 126, 91, 265, 265, 265, 54, 4, 41, 221, 126, 126, 240, 126, 240, 240, 4, 54, 54, 4, 96, 20, 240, 126, 125, 125, 240, 240, 4, 265, 54, 265, 256, 3, 265, 265, 265, 265, 125, 125, 4, 265, 265, 265, 265, 265, 126, 126, 126, 45, 91, 192, 240, 265, 240, 125, 240, 125, 240, 240, 240, 240, 240, 240, 265, 240, 265, 126, 125, 125, 54, 54, 265, 265, 54, 265, 91, 192, 240, 125, 240, 125, 6, 255, 6, 20, 199, 256, 265, 240, 265, 240, 265, 265, 125, 240, 240, 240, 240, 240, 265, 265, 265, 265, 265, 265, 240, 240, 240, 240, 240, 240, 3, 265, 265, 4, 265, 265, 126, 126, 126, 91, 192, 91, 265, 240, 240, 265, 265, 265, 125, 125, 240, 240, 240, 240, 91, 125, 125, 192, 126, 126, 240, 146, 240, 126, 125, 146, 265, 96, 240, 265, 240, 240, 265, 54, 54, 20, 199, 256, 265, 126, 126, 126, 126, 126, 256, 265, 256, 265, 265, 265, 125, 126, 125, 240, 125, 240, 240, 126, 125, 240, 125, 240, 240, 265, 240, 240, 240, 240, 265, 265, 54, 265, 265, 4, 4, 96, 41, 265, 221, 4, 240, 125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 126, 240, 240, 240, 240, 126, 125, 265, 125, 125, 265, 256, 265, 240, 125, 125, 265, 265, 240, 126, 126, 126, 126, 91, 192, 265, 20, 199, 256, 265, 192, 265, 265, 265, 265, 265, 265, 126, 125, 91, 240, 125, 192, 4, 54, 255, 265, 265, 265, 265, 4, 265, 256, 3, 265, 240, 240, 265, 265, 240, 240, 125, 125, 125, 125, 125, 125, 192, 126, 126, 126, 126, 91, 125, 125, 240, 240, 265, 265, 240, 240, 240, 240, 126, 125, 240, 240, 256, 256, 256, 256, 265, 54, 265, 265, 265, 265, 240, 240, 265, 240, 146, 240, 240, 126, 125, 125, 240, 240, 199, 256, 265, 146, 240, 265, 240, 240, 240, 126, 125, 125, 126, 126, 126, 45, 91, 125, 265, 4, 265, 265, 265, 265, 192, 91, 192, 126, 126, 126, 240, 192, 186, 172, 224, 240, 126, 126, 126, 126, 45, 91, 265, 54, 265, 265, 265, 54, 126, 125, 125, 240, 240, 265, 4, 96, 96, 240, 265, 6, 4, 265, 54, 54, 240, 240, 265, 265, 265, 265, 265, 265, 4, 54, 6, 255, 199, 199, 240, 240, 240, 240, 240, 126, 54, 41, 221, 4, 6, 96, 192, 126, 126, 126, 126, 91, 265, 240, 125, 240, 125, 125, 125, 125, 240, 126, 125, 125, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 195, 78, 199, 146, 192, 91, 256, 265, 265, 265, 265, 265, 240, 240, 126, 125, 125, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 265, 125, 240, 126, 125, 125, 240, 125, 126, 240, 126, 125, 240, 240, 126, 125, 125, 240, 54, 192, 126, 126, 126, 126, 240, 126, 240, 240, 240, 125, 240, 240, 240, 126, 265, 265, 125, 125, 240, 240, 125, 125, 54, 265, 54, 54, 41, 221, 125, 125, 240, 240, 4, 96, 54, 265, 4, 96, 265, 125, 265, 4, 265, 265, 265, 265, 240, 240, 265, 256, 3, 54, 125, 240, 240, 126, 125, 125, 192, 186, 172, 224, 240, 240, 126, 125, 125, 126, 125, 125, 265, 240, 4, 126, 146, 54, 265, 54, 54, 240, 240, 240, 125, 240, 240, 126, 125, 125, 240, 240, 265, 256, 265, 4, 96, 255, 265, 6, 240, 20, 256, 3, 265, 125, 125, 125, 146, 240, 240, 240, 240, 240, 125, 125, 91, 265, 20, 199, 240, 240, 240, 240, 240, 126, 265, 265, 265, 265, 265, 125, 4, 96, 20, 265, 4, 54, 199, 256, 265, 265, 146, 265, 20, 199, 256, 265, 265, 20, 125, 240, 125, 125, 240, 240, 54, 54, 265, 265, 265, 265, 4, 54, 255, 265, 265, 265, 265, 240, 125, 240, 126, 240, 265, 265, 240, 240, 240, 240, 265, 125, 240, 240, 265, 265, 54, 41, 221, 6, 255, 6, 125, 125, 146, 146, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 240, 240, 125, 240, 240, 146, 240, 126, 125, 125, 265, 125, 240, 240, 265, 265, 96, 96, 240, 265, 6, 265, 126, 240, 91, 192, 240, 125, 240, 4, 240, 54, 126, 125, 199, 256, 265, 255, 265, 265, 265, 265, 240, 240, 240, 240, 265, 265, 265, 240, 240, 125, 240, 240, 265, 125, 125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 265, 240, 240, 192, 126, 126, 126, 126, 6, 20, 199, 256, 265, 20, 265, 265, 4, 54, 265, 265, 240, 240, 240, 240, 240, 240, 125, 240, 240, 265, 125, 125, 240, 126, 125, 240, 125, 240, 265, 240, 125, 240, 240, 240, 265, 125, 240, 240, 265, 265, 265, 265, 265, 265, 265, 96, 199, 256, 54, 265, 265, 265, 240, 240, 265, 265, 240, 240, 125, 240, 240, 265, 240, 125, 265, 54, 20, 199, 256, 3, 126, 126, 126, 125, 125, 125, 240, 126, 125, 125, 240, 240, 256, 265, 4, 265, 256, 3, 91, 192, 126, 126, 126, 126, 265, 256, 3, 265, 265, 256, 265, 125, 146, 125, 240, 240, 265, 265, 54, 20, 199, 256, 240, 126, 125, 125, 240, 240, 125, 146, 255, 265, 265, 20, 192, 126, 126, 126, 126, 91, 54, 240, 240, 240, 240, 240, 125, 125, 20, 265, 4, 265, 20, 199, 256, 265, 265, 265, 240, 240, 240, 20, 199, 256, 265, 4, 240, 240, 240, 240, 265, 54, 265, 265, 265, 265, 265, 265, 265, 54, 265, 265, 126, 126, 91, 125, 192, 91, 265, 240, 265, 265, 240, 265, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 192, 192, 54, 265, 54, 54, 4, 96, 240, 240, 125, 240, 240, 265, 265, 265, 54, 54, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 125, 240, 125, 240, 54, 265, 240, 240, 240, 240, 126, 126, 126, 91, 265, 192, 125, 125, 125, 240, 240, 240, 192, 126, 126, 126, 126, 91, 240, 240, 240, 126, 125, 125, 125, 125, 240, 126, 125, 240, 265, 265, 54, 265, 265, 240, 265, 265, 20, 199, 256, 265, 20, 199, 256, 265, 256, 265, 91, 125, 240, 240, 240, 240, 125, 240, 126, 125, 240, 125, 256, 3, 54, 265, 265, 54, 265, 96, 240, 265, 240, 240, 256, 125, 255, 125, 240, 265, 3, 265, 146, 192, 91, 125, 126, 126, 91, 240, 240, 240, 265, 96, 20, 97, 199, 256, 265, 265, 265, 265, 265, 240, 255, 265, 265, 20, 199, 256, 265, 265, 265, 265, 265, 265, 240, 240, 265, 240, 240, 240, 91, 125, 240, 240, 240, 240, 240, 265, 54, 265, 199, 199, 125, 125, 125, 240, 240, 265, 4, 96, 240, 265, 240, 4, 54, 41, 221, 6, 255, 6, 240, 240, 240, 240, 265, 265, 54, 265, 265, 54, 265, 265, 265, 265, 265, 54, 54, 4, 265, 146, 265, 54, 240, 240, 126, 91, 192, 126, 126, 126, 54, 41, 221, 6, 255,
55
6, 54, 265, 54, 54, 4, 96, 240, 126, 240, 240, 240, 125, 240, 126, 240, 125, 125, 240, 240, 240, 240, 240, 240, 240, 265, 265, 20, 199, 256, 265, 255, 6, 20, 199, 256, 255, 265, 265, 54, 256, 265, 4, 240, 265, 265, 265, 265, 265, 265, 256, 265, 4, 265, 265, 125, 240, 240, 265, 265, 265, 240, 240, 125, 125, 240, 240, 4, 6, 54, 255, 6, 20, 240, 126, 125, 125, 240, 240, 265, 265, 265, 265, 265, 265, 265, 265, 54, 54, 54, 265, 125, 125, 125, 125, 240, 240, 256, 265, 265, 20, 199, 256, 4, 240, 240, 240, 126, 125, 265, 265, 240, 240, 126, 125, 265, 265, 265, 265, 265, 240, 54, 265, 54, 54, 4, 96, 265, 265, 265, 265, 265, 265, 91, 6, 240, 125, 240, 240, 265, 54, 256, 265, 4, 265, 240, 125, 125, 240, 240, 240, 125, 240, 240, 240, 240, 240, 126, 126, 126, 91, 192, 126, 240, 240, 240, 240, 240, 240, 125, 125, 265, 265, 54, 265, 240, 125, 240, 125, 240, 125, 265, 54, 20, 199, 256, 3, 265, 4, 54, 54, 20, 199, 240, 91, 240, 265, 240, 240, 265, 256, 265, 4, 265, 265, 240, 240, 240, 240, 240, 240, 265, 4, 240, 240, 240, 240, 255, 265, 6, 240, 20, 4, 265, 265, 265, 265, 240, 240, 240, 54, 240, 240, 199, 126, 265, 265, 54, 20, 199, 256, 125, 240, 240, 192, 126, 126, 256, 265, 255, 265, 265, 125, 240, 240, 240, 240, 240, 240, 91, 192, 91, 192, 126, 126, 265, 125, 126, 125, 240, 192, 240, 240, 240, 265, 240, 240, 20, 199, 256, 265, 265, 265, 240, 240, 240, 240, 265, 240, 265, 265, 256, 265, 4, 265, 265, 125, 265, 240, 125, 126, 240, 240, 240, 126, 125, 125, 186, 172, 224, 240, 240, 240, 240, 240, 240, 240, 126, 125, 240, 240, 199, 126, 240, 256, 240, 126, 126, 126, 125, 240, 54, 265, 265, 265, 265, 240, 240, 125, 240, 125, 125, 240, 265, 265, 265, 256, 265, 4, 54, 265, 265, 54, 20, 199, 126, 126, 126, 126, 91, 192, 126, 240, 240, 240, 125, 125, 240, 240, 240, 240, 240, 126, 256, 265, 4, 265, 256, 3, 125, 126, 240, 125, 240, 125, 240, 265, 265, 54, 240, 126, 265, 256, 265, 54, 54, 240, 265, 265, 265, 265, 54, 54, 126, 125, 125, 126, 125, 125, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 54, 54, 6, 20, 199, 256, 255, 265, 240, 126, 125, 125, 240, 240, 240, 240, 126, 125, 265, 125, 125, 240, 240, 240, 240, 240, 265, 20, 199, 256, 265, 265, 125, 240, 240, 240, 240, 265, 255, 6, 20, 199, 96, 256, 125, 240, 125, 240, 125, 125, 240, 240, 240, 240, 126, 125, 240, 240, 240, 240, 240, 240, 265, 240, 146, 240, 240, 240, 240, 199, 256, 265, 20, 199, 265, 4, 265, 256, 3, 265, 240, 240, 240, 265, 240, 126, 240, 240, 240, 240, 126, 125, 54, 54, 54, 54, 54, 41, 126, 125, 240, 125, 240, 240, 240, 240, 240, 265, 240, 126, 199, 256, 265, 20, 199, 256, 240, 265, 265, 265, 265, 265, 240, 240, 265, 265, 240, 265, 240, 240, 240, 240, 240, 240, 240, 20, 199, 256, 265, 265, 240, 265, 265, 240, 240, 265, 265, 265, 4, 54, 265, 265, 125, 125, 146, 146, 6, 54, 240, 240, 265, 126, 20, 199, 125, 125, 265, 265, 54, 265, 240, 240, 240, 240, 240, 126, 146, 240, 146, 240, 126, 125, 240, 240, 240, 240, 240, 126, 240, 240, 240, 240, 240, 146, 125, 125, 126, 125, 265, 125, 146, 54, 265, 265, 265, 54, 125, 125, 192, 126, 126, 126, 265, 265, 240, 240, 240, 240, 192, 91, 192, 126, 126, 126, 125, 125, 265, 265, 265, 240, 240, 240, 265, 240, 20, 240, 125, 146, 125, 240, 240, 240, 41, 221, 6, 255, 125, 125, 240, 240, 265, 265, 240, 265, 265, 54, 54, 20, 199, 256, 240, 265, 265, 265, 265, 265, 265, 4, 54, 41, 221, 6, 125, 125, 125, 125, 125, 125, 20, 199, 256, 265, 265, 265, 54, 265, 265, 20, 199, 256, 240, 240, 126, 265, 265, 125, 240, 240, 199, 126, 240, 256, 126, 126, 126, 126, 265, 265, 125, 240, 240, 240, 240, 240, 126, 125, 125, 126, 125, 240, 240, 192, 192, 125, 240, 265, 265, 4, 265, 256, 3, 265, 265, 240, 240, 240, 240, 240, 125, 125, 240, 240, 126, 125, 265, 265, 265, 265, 265, 265, 240, 125, 125, 240, 240, 126, 240, 240, 240, 126, 125, 125, 265, 265, 4, 54, 54, 265, 265, 54, 240, 240, 126, 125, 240, 240, 265, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 126, 265, 265, 20, 199, 126, 125, 125, 240, 240, 265]
Liste normal : danti552, calendar , email
danti552=[54, 240, 240, 240, 265, 240, 240, 265, 265, 240, 240, 265, 240, 240, 265, 265, 256, 265, 54, 54, 240,
240, 240, 256, 256, 256, 256, 240, 177, 240, 256, 256, 265, 54, 20, 199, 256, 3, 265, 265, 265, 265, 265, 265,
265, 54, 54, 4, 96, 265, 4, 54, 41, 221, 6, 255, 6, 20, 199, 256, 265, 255, 265, 265, 125, 125, 265, 265, 125, 125,
265, 265, 265, 265, 265, 20, 199, 256, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 20, 199, 256, 265,
265, 265, 54, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 256, 265, 4, 265, 265, 265, 265,
265, 265, 4, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 54, 4, 96, 41, 265, 221, 4, 6, 54, 255, 6, 20, 199, 256,
255, 265, 265, 20, 199, 256, 265, 265, 54, 256, 265, 4, 265, 54, 265, 256, 3, 265, 265, 4, 265, 265, 265, 265, 265,
54, 265, 265, 20, 199, 256, 3, 265, 256, 265, 4, 265, 265, 265, 265, 265, 54, 265, 265, 20, 199, 256, 3, 265, 265,
265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 265, 265, 265, 265, 265, 125, 240, 240, 265, 265, 265, 265,
125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125,
240, 240, 240, 240, 240, 240, 240, 126, 125, 265, 125, 240, 240, 265, 125, 125, 125, 125, 240, 240, 240, 240,
240, 126, 125, 125, 125, 125, 240, 240, 265, 240, 240, 240, 240, 240, 126, 265, 265, 125, 125, 240, 240, 125,
125, 240, 240, 126, 125, 125, 240, 126, 125, 125, 240, 240, 265, 125, 125, 125, 125, 265, 240, 240, 240, 240,
56
240, 126, 125, 125, 240, 240, 265, 265, 20, 199, 256, 54, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125,
240, 240, 125, 125, 265, 265, 54, 265, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 265, 240, 125, 240, 240,
240, 125, 125, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 125, 125, 265, 265, 240, 240,
240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 240, 240, 126, 125, 125, 125, 125, 240, 240, 265, 265, 265,
240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 240, 125, 240, 126, 240, 125, 240, 125, 240, 125,
240, 125, 125, 240, 240, 240, 265, 265, 265, 146, 265, 265, 265, 54, 265, 265, 4, 54, 265, 265, 54, 20, 199, 256,
3, 265, 265, 265, 265, 265, 265, 54, 54, 41, 221, 4, 6, 96, 255, 265, 6, 240, 20, 4, 240, 199, 54, 126, 256, 125,
255, 125, 240, 265, 240, 265, 265, 265, 265, 265, 199, 199, 54, 54, 54, 265, 265, 265, 54, 54, 199, 146, 195, 195,
199, 195, 195, 78, 199, 146, 192, 91, 146, 192, 126, 126, 126, 126, 91, 192, 126, 126, 126, 126, 91, 125, 192, 91,
192, 91, 192, 91, 192, 126, 126, 126, 126, 91, 192, 91, 192, 91, 192, 126, 126, 126, 126, 91, 192, 126, 126, 126,
126, 91, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 192, 126, 126, 126, 126, 265, 96, 240, 265, 240, 240,
240, 240, 240, 240, 240, 240, 240, 240, 240, 125, 265, 265, 240, 240, 240, 240, 240, 240, 240, 265, 265, 265,
240, 265, 265, 265, 265, 240, 125, 146, 91, 125, 192, 91, 192, 126, 126, 126, 126, 125, 125, 125, 125, 125, 240,
240, 240, 240, 240, 240, 240, 265, 240, 125, 125, 240, 240, 240, 240, 240, 240, 240, 265, 240, 240, 240, 240,
240, 240, 240, 240, 265, 240, 240, 240, 240, 240, 240, 240, 91, 240, 265, 240, 240, 240, 240, 240, 240, 240, 240,
265, 125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 240, 265, 240, 240, 240, 240, 126, 192, 125, 125, 240,
240, 126, 126, 240, 240, 240, 240, 240, 265, 240, 240, 240, 240, 240, 240, 240, 240, 125, 240, 125, 240, 240,
240, 125, 125, 240, 125, 125, 240, 265, 240, 240, 125, 125, 240, 126, 126, 240, 265, 265, 265, 265, 265, 125,
126, 265, 240, 240, 125, 240, 125, 125, 240, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 240, 240,
240, 240, 240, 125, 125, 126, 240, 91, 192, 240, 125, 240, 125, 126, 240, 126, 125, 240, 126, 126, 126, 125, 240,
240, 125, 240, 91, 125, 240, 240, 240, 240, 265, 265, 240, 240, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
240, 240, 240, 240, 265, 265, 265, 265, 125, 126, 125, 240, 192, 126, 126, 126, 126, 265, 125, 265, 265, 265,
240, 125, 240, 125, 240, 126, 125, 91, 240, 125, 192, 126, 125, 126, 125, 126, 125, 240, 125, 125, 125, 125, 265,
240, 240, 125, 125, 240, 240, 240, 240, 240, 265, 265, 265, 265, 240, 240, 240, 240, 265, 91, 265, 186, 91, 126,
91, 1, 265, 265, 265, 265, 265, 265, 265, 265, 126, 265, 126, 265, 125, 91, 125, 265, 265, 265, 265, 54, 265, 54,
265, 54, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 240, 265, 126, 125, 125, 240, 240, 265, 265, 265,
265, 265, 265, 265, 265, 265, 265, 240, 240, 240, 265, 125, 125, 125, 125, 125, 125, 125, 125, 265, 265, 265,
265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 240, 265, 265, 265, 265, 265,
125, 125, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
265, 265, 265, 265, 265, 265, 265, 265, 240, 265, 265, 265, 240, 265, 240, 265, 240, 265, 265, 240, 265, 265,
265, 265, 265, 265, 265, 265, 240, 240, 126, 125, 125, 126, 125, 125, 126, 125, 265, 125, 126, 125, 125, 126,
240, 240, 240, 125, 125, 240, 126, 125, 125, 240, 126, 125, 240, 125, 240, 240, 240, 240, 240, 240, 126, 125,
125, 126, 125, 125, 126, 125, 125, 240, 126, 125, 125, 240, 240, 192, 126, 126, 126, 126, 91, 192, 126, 126, 126,
126, 91, 54, 54, 54, 265, 265, 265, 265, 54, 4, 96, 265, 4, 54, 41, 221, 6, 255, 125, 125, 240, 240, 192, 126, 91,
125, 125, 240, 240, 192, 91, 192, 126, 126, 126, 126, 45, 91, 125, 125, 192, 91, 125, 125, 192, 126, 126, 126,
126, 91, 192, 126, 126, 126, 126, 91, 192, 126, 126, 126, 126, 91, 265, 54, 192, 126, 126, 126, 126, 91, 265, 265,
265, 54, 54, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 192, 126, 126, 126, 126, 240, 126, 240,
240, 240, 125, 125, 240, 125, 125, 240, 126, 125, 125, 91, 265, 20, 199, 256, 240, 240, 265, 265, 265, 265, 240,
240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240,
265, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 146, 265, 125, 125, 125, 125, 240, 240,
240, 240, 240, 126, 125, 146, 240, 125, 240, 240, 240, 265, 146, 240, 126, 125, 125, 240, 146, 240, 240, 240,
240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125,
125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 126, 125,
125, 240, 126, 240, 146, 265, 20, 199, 256, 265, 265, 146, 265, 125, 146, 125, 240, 240, 240, 240, 240, 240, 240,
126, 125, 125, 240, 240, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 146, 240, 240, 265, 54, 265, 265,
240, 125, 125, 240, 126, 240, 240, 125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240,
240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240,
240, 125, 125, 125, 125, 54, 54, 54, 265, 265, 54, 240, 240, 240, 240, 240, 126, 125, 240, 125, 240, 240, 240,
125, 125, 265, 265, 240, 265, 125, 125, 240, 126, 125, 125, 126, 125, 240, 125, 240, 240, 125, 126, 240, 125,
240, 125, 125, 240, 240, 240, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 240, 54, 240, 54, 126, 125, 125,
240, 240, 4, 96, 20, 265, 4, 54, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 265, 265, 20, 199,
57
256, 265, 265, 20, 199, 256, 265, 54, 54, 4, 96, 265, 4, 54, 41, 221, 6, 255, 6, 20, 199, 256, 265, 20, 199, 256,
265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 126, 125, 125, 240, 240, 240, 240, 240, 265, 240, 20,
240, 126, 125, 125, 240, 240, 199, 256, 265, 20, 199, 256, 265, 192, 192, 125, 120, 240, 192, 186, 172, 224, 240,
240, 240, 20, 199, 256, 265, 265, 265, 265, 265, 96, 20, 97, 199, 256, 125, 265, 240, 240, 240, 265, 240, 146,
240, 240, 240, 265, 240, 240, 125, 126, 265, 240, 265, 125, 265, 265, 265, 265, 265, 240, 240, 125, 125, 240,
240, 126, 240, 240, 125, 240, 240, 265, 240, 125, 240, 125, 125, 240, 240, 240, 126, 125, 125, 126, 125, 125,
240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 192, 192, 125, 240, 265, 126, 265, 125, 265, 120, 240,
240, 192, 186, 172, 224, 240, 240, 240, 240, 240, 240, 96, 97, 265, 265, 265, 240, 221, 265, 125, 265, 240, 125,
126, 197, 4, 3, 240, 125, 240, 125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240,
240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240,
240, 240, 265, 240, 265, 240, 126, 125, 125, 240, 126, 125, 240, 125, 240, 240, 240, 240, 240, 240, 240, 265,
265, 240, 126, 54, 125, 265, 125, 265, 240, 54, 240, 54, 54, 54, 54, 54, 41, 20, 192, 6, 265, 126, 126, 126, 126,
126, 126, 126, 126, 126, 126, 265, 265, 265, 265, 54, 54, 54, 265, 4, 96, 265, 125, 125, 4, 54, 265, 265, 265, 265,
265, 54, 20, 199, 256, 45, 54, 54, 125, 125, 265, 265, 265, 240, 54, 240, 54, 126, 125, 91, 6, 240, 125, 240, 240,
240, 240, 240, 240, 240, 240, 240, 255, 240, 54, 126, 54, 125, 125, 240, 240, 4, 96, 265, 125, 125, 4, 96, 240,
265, 240, 4, 126, 146, 54, 125, 45, 125, 146, 240, 240, 146, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240,
240, 240, 4, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 146, 240, 146, 240, 126, 125, 125, 146, 146,
125, 125, 146, 146, 6, 54, 265, 125, 125, 240, 240, 265, 20, 199, 256, 265, 20, 199, 256, 265, 265, 20, 199, 256,
265, 265, 146, 265, 265, 265, 54, 265, 265, 54, 20, 199, 256, 265, 265, 20, 199, 256, 265, 20, 199, 256, 265, 265,
265, 265, 265, 240, 54, 265, 54, 54, 20, 199, 256, 265, 125, 125, 125, 125, 146, 255, 265, 265, 20, 199, 256, 265,
265, 20, 199, 256, 265, 265, 265, 146, 265, 265, 265, 4, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 54, 256, 265,
4, 265, 256, 3, 265, 146, 192, 91, 125, 125, 192, 126, 126, 126, 126, 45, 91, 192, 91, 192, 126, 126, 126, 126, 91,
192, 91, 192, 126, 126, 126, 126, 91, 192, 126, 126, 126, 126, 91, 192, 126, 126, 126, 126, 91, 265, 192, 126,
126, 126, 126, 91, 199, 199, 54, 265, 256, 125, 125, 125, 125, 265, 4, 240, 240, 240, 240, 240, 126, 125, 125,
240, 240, 265, 256, 3, 54, 265, 265, 54, 265, 265, 265, 265, 256, 265, 4, 265, 54, 54, 240, 240, 240, 240, 240,
126, 125, 125, 240, 240, 265, 265, 265, 265, 265, 4, 54, 54, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240,
240, 125, 125, 265, 54, 20, 199, 256, 3, 265, 146, 265, 20, 199, 256, 265, 265, 54, 256, 54, 54, 265, 265, 54, 265,
265, 265, 265, 256, 265, 4, 265, 265, 265, 265, 265, 265, 4, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 54, 54, 4,
96, 265, 4, 54, 41, 221, 6, 255, 6, 20, 199, 256, 255, 265, 265, 20, 199, 256, 265, 265, 54, 256, 265, 4, 265, 256,
3, 265, 125, 125, 265, 256, 265, 4, 265, 256, 3, 265, 265, 256, 265, 4, 265, 256, 3, 265, 240, 240, 240, 240, 240,
126, 125, 125, 240, 240, 265, 256, 265, 4, 265, 256, 3, 265, 240, 240, 240, 240, 265, 265, 54, 240, 126, 125, 125,
125, 125, 240, 240, 265, 265, 125, 125, 265, 256, 265, 4, 265, 54, 54, 125, 125, 240, 240, 126, 125, 125, 240,
240, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 146, 265, 265, 265, 4, 54, 265, 265,
54, 20, 199, 256, 3, 265, 146, 54, 265, 265, 265, 54, 265, 54, 54, 4, 96, 265, 4, 54, 41, 221, 6, 255, 199, 199, 54,
265, 54, 54, 41, 221, 4, 96, 265, 4, 54, 6, 255, 6, 20, 199, 256, 265, 146, 240, 265, 240, 125, 126, 240, 125, 240,
125, 240, 125, 240, 125, 125, 240, 240, 240, 125, 125, 240, 146, 240, 126, 125, 146, 125, 240, 240, 265, 20, 199,
256, 265, 265, 146, 265, 265, 265, 4, 54, 54, 4, 96, 20, 265, 4, 54, 125, 125, 265, 265, 54, 265, 20, 199, 256, 3,
265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 146, 265, 265, 20, 199, 256, 265, 20, 199, 256,
54, 54, 265, 265, 20, 199, 256, 265, 265, 265, 265, 265, 265, 4, 54, 54, 20, 199, 256, 3, 265, 54, 265, 256, 265, 4,
265, 265, 4, 96, 265, 240, 4, 240, 54, 126, 125, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 125, 265, 265,
265, 240, 240, 265, 240, 265, 240, 126, 125, 265, 125, 240, 54, 240, 265, 265, 20, 199, 256, 3, 265, 265, 20, 199,
256, 265, 265, 265, 240, 240, 240, 240, 240, 126, 265, 265, 265, 265, 265, 265, 240, 265, 265, 265, 240, 265,
240, 240, 265, 265, 240, 265, 240, 240, 240, 125, 125, 240, 265, 265, 126, 265, 265, 125, 125, 126, 125, 125,
265, 265, 265, 240, 240, 240, 240, 240, 265, 265, 125, 126, 125, 265, 265, 125, 125, 240, 240, 240, 125, 265,
125, 240, 126, 125, 125, 126, 240, 125, 125, 240, 265, 240, 265, 125, 265, 265, 54, 265, 265, 20, 199, 256, 265,
265, 265, 265, 125, 126, 265, 265, 20, 199, 256, 265, 256, 265, 265, 265, 256, 265, 240, 265, 256, 125, 240, 125,
240, 126, 240, 125, 125, 240, 240, 125, 125, 240, 240, 240, 240, 240, 240, 265, 265, 240, 265, 256, 126, 125,
125, 126, 125, 125, 126, 125, 125, 126, 125, 125, 126, 125, 125, 126, 125, 125, 126, 125, 125, 126, 125, 125,
125, 125, 126, 125, 265, 125, 240, 126, 125, 240, 125, 240, 125, 240, 125, 240, 125, 125, 240, 240, 240, 125,
125, 125, 125, 125, 125, 125, 125, 125, 125, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240,
240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265,
58
265, 256, 125, 125, 125, 125, 240, 265, 240, 126, 240, 240, 240, 125, 265, 125, 240, 240, 126, 265, 125, 256,
125, 240, 240, 265, 240, 240, 125, 126, 240, 125, 240, 125, 265, 256, 125, 240, 240, 240, 54, 54, 265, 4, 265,
255, 54, 54, 4, 4, 96, 96, 240, 265, 6, 265, 4, 240, 20, 240, 54, 240, 240, 199, 126, 240, 256, 125, 240, 3, 265,
125, 240, 240, 240, 265, 240, 126, 240, 240, 240, 125, 4, 54, 54, 125, 240, 240, 126, 125, 54, 125, 240, 240, 20,
199, 256, 255, 265, 265, 20, 199, 256, 54, 54, 265, 265, 54, 265, 265, 265, 54, 4, 41, 221, 6, 255, 6, 20, 199, 96,
256, 265, 265, 4, 54, 255, 265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 265, 54, 54, 20, 199, 256, 3, 265, 125,
125, 125, 125, 240, 240, 240, 240, 265, 240, 126, 125, 125, 240, 240, 265, 54, 265, 199, 199, 54, 265, 240, 240,
265, 126, 20, 199, 256, 265, 265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 125, 125, 240, 240, 265, 54, 20, 199,
256, 3, 265, 125, 125, 125, 125, 125, 125, 125, 125, 240, 240, 240, 240, 240, 126, 265, 54, 54, 4, 96, 265, 4, 54,
41, 221, 6, 255, 6, 20, 199, 256, 255, 265, 265, 20, 199, 256, 265, 265, 54, 256, 125, 265, 4, 265, 256, 3, 265,
265, 256, 265, 4, 265, 256, 3, 265, 125, 146, 125, 125, 54, 240, 54, 240, 265, 4, 265, 265, 54, 265, 54, 54, 4, 96,
41, 265, 221, 4, 54, 6, 255, 199, 199, 54, 265, 20, 199, 256, 3, 54, 54, 265, 265, 265, 265, 146, 265, 146, 265, 54,
240, 240, 126, 125, 265, 265, 125, 240, 240, 265, 265, 4, 54, 54, 4, 96, 125, 125, 20, 265, 4, 265, 265, 20, 199,
256, 3, 265, 54, 265, 265, 265, 265, 265, 265, 265]
calendar=[265, 265, 240, 54, 54, 240, 240, 240, 177, 54, 256, 256, 54, 265, 4, 96, 265, 4, 54, 45, 265, 54, 20,
199, 256, 265, 265, 265, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199,
256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 199, 199, 54, 265, 4, 20, 3, 199, 265, 256, 54, 240, 54, 240, 265,
265, 125, 54, 54, 125, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 265, 20, 199, 256, 265, 265, 146,
265, 265, 265, 265, 265, 265, 265, 265, 265, 54, 41, 192, 265, 6, 265, 54, 265, 54, 240, 54, 54, 240, 126, 125,
125, 240, 54, 91, 6, 255, 54, 54, 265, 20, 199, 256, 265, 54, 256, 240, 4, 192, 54, 96, 265, 54, 125, 4, 265, 120,
54, 146, 4, 96, 45, 240, 240, 146, 240, 146, 265, 4, 240, 54, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240,
240, 240, 240, 240, 240, 126, 125, 240, 125, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 126, 240,
125, 240, 240, 125, 240, 125, 240, 240, 240, 240, 126, 125, 125, 45, 240, 240, 45, 240, 240, 45, 240, 240, 240,
240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 146, 146, 6, 265, 54, 265, 265, 20, 199, 256, 265,
265, 265, 125, 125, 20, 199, 256, 265, 91, 6, 54, 54, 54, 54, 265, 78, 265, 265, 265, 78, 78, 78, 78, 78, 20, 199,
256, 146, 265, 265, 125, 125, 125, 125, 240, 125, 240, 126, 125, 240, 240, 54, 125, 54, 20, 125, 199, 240, 256,
265, 240, 240, 45, 265, 20, 199, 256, 265, 240, 240, 240, 240, 240, 240, 126, 240, 240, 240, 125, 240, 125, 240,
240, 125, 125, 240, 125, 125, 125, 125, 240, 126, 240, 240, 240, 125, 125, 240, 240, 126, 125, 125, 240, 240,
125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 125, 125, 126, 125, 125, 126, 125, 125, 240, 126, 125, 125,
240, 126, 125, 125, 240, 240, 240, 125, 125, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240,
240, 240, 240, 126, 240, 240, 240, 240, 240, 125, 125, 126, 146, 125, 125, 126, 125, 125, 126, 125, 125, 126,
125, 125, 240, 126, 125, 125, 240, 240, 265, 265, 146, 265, 265, 265, 45, 265, 265, 265, 265, 54, 265, 265, 54,
265, 265, 54, 20, 199, 256, 265, 265, 265, 265, 265, 265, 265, 265, 54, 54, 20, 199, 256, 265, 265, 265, 265, 265,
265, 265, 240, 240, 240, 240, 240, 126, 125, 265, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240,
240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 126,
125, 125, 240, 240, 240, 265, 265, 20, 199, 256, 54, 265, 265, 265, 265, 265, 265, 265, 265, 265, 240, 240, 240,
240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 265, 265, 265,
240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 240, 240, 126, 240, 240, 125, 125,
240, 126, 240, 265, 20, 199, 256, 265, 199, 199, 54, 265, 4, 125, 20, 3, 199, 265, 256, 54, 54, 265, 125, 54, 126,
54, 125, 240, 125, 240, 240, 125, 126, 240, 265, 125, 54, 240, 125, 240, 125, 240, 125, 240, 125, 240, 240, 125,
54, 240, 125, 240, 265, 240, 240, 240, 240, 240, 126, 125, 54, 41, 125, 192, 6, 265, 54, 54, 54, 54, 240, 240, 265,
20, 199, 256, 265, 54, 256, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240,
126, 125, 125, 240, 240, 265, 20, 199, 256, 265, 265, 265, 146, 265, 265, 265, 265, 54, 265, 265, 54, 20, 199,
256, 54, 265, 265, 20, 199, 256, 125, 125, 265, 265, 54, 265, 91, 6, 54, 54, 54, 265, 78, 265, 265, 78, 78, 78, 78,
78, 20, 199, 256, 265, 265, 265, 265, 146, 265, 265, 240, 265, 265, 54, 265, 265, 54, 265, 126, 265, 54, 20, 199,
256, 265, 265, 265, 265, 265, 265, 54, 54, 20, 199, 256, 265, 265, 146, 265, 265, 265, 265, 125, 125, 265, 265,
265, 20, 199, 256, 265, 265, 265, 240, 240, 240, 240, 240, 265, 265, 54, 256, 240, 126, 125, 125, 126, 125, 125,
240, 126, 125, 125, 240, 240, 265, 54, 265, 256, 265, 4, 265, 265, 265, 265, 265, 54, 265, 265, 20, 199, 256, 3,
265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265,
59
265, 265, 240, 265, 240, 126, 125, 125, 240, 240, 265, 265, 265, 20, 199, 256, 265, 265, 125, 125, 265, 265, 265,
54, 265, 240, 240, 240, 240, 240, 126, 240, 240, 240, 240, 125, 125, 240, 240, 126, 125, 125, 126, 125, 265, 125,
240, 240, 126, 125, 125, 240, 240, 240, 125, 125, 240, 125, 125, 265, 265, 265, 265, 265, 240, 240, 240, 240,
240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 20, 199, 256, 265, 265, 54,
265, 125, 125, 45, 265, 265, 146, 265, 265, 265, 54, 265, 265, 4, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 265,
265, 265, 265, 265, 265, 265, 146, 265, 265, 265, 265, 265, 265, 265, 265, 265, 54, 265, 265, 20, 199, 256, 54,
54, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 240, 240, 240, 240, 240, 126, 125,
125, 240, 240, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 20, 199, 256, 265, 240, 240, 240,
240, 126, 125, 125, 240, 240, 240, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 240,
240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 125, 125, 265, 240, 240, 240, 240, 240, 126, 265, 125,
125, 240, 240, 265, 265, 265, 146, 265, 265, 265, 20, 199, 256, 265, 240, 240, 240, 240, 240, 126, 125, 125, 125,
125, 240, 240, 265, 265, 265, 265, 54, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240,
240, 240, 126, 240, 240, 240, 125, 125, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125,
125, 265, 20, 199, 256, 265, 265, 240, 265, 240, 265, 146, 265, 4, 265, 96, 265, 265, 4, 240, 240, 240, 4, 54, 54,
265, 265, 54, 20, 199, 256, 3, 54, 125, 125, 125, 125, 125, 125, 265, 265, 54, 265, 265, 265, 265, 20, 199, 256,
265, 265, 265, 265, 265, 265, 265, 4, 54, 265, 265, 54, 20, 199, 256, 3, 54, 265, 265, 265, 265, 265, 54, 265, 125,
125, 240, 240, 240, 240, 240, 126, 240, 240, 240, 125, 125, 265, 20, 240, 240, 126, 125, 125, 199, 256, 240, 240,
265, 265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 54, 20,
199, 256, 3, 265, 265, 54, 256, 265, 4, 265, 256, 3, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265,
256, 265, 4, 265, 54, 265, 256, 3, 265, 265, 4, 265, 265, 265, 265, 54, 54, 125, 125, 265, 265, 54, 265, 265, 265,
265, 4, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 265, 265, 265, 265, 265, 265, 146, 265, 265, 265, 265, 265,
265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 265, 265, 20, 199, 256, 54, 265, 265, 265, 125,
125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 125, 125, 240,
240, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 125, 125, 240, 240, 265, 265, 265, 240, 240, 240, 240,
240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 265, 125,
240, 126, 240, 125, 240, 125, 125, 240, 240, 126, 125, 125, 240, 240, 125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 125, 265, 125, 54, 240, 240, 256, 125, 125, 125, 125, 240, 240,
240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 265, 4, 265, 256, 3, 265, 265, 256, 265, 4, 265, 256, 3, 265,
265, 256, 265, 4, 265, 256, 3, 265, 256, 265, 125, 125, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240,
240, 265, 256, 265, 4, 54, 265, 265, 54, 265, 265, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240,
240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 256, 3, 265, 125, 125, 125, 125, 125, 125, 240, 240,
126, 125, 125, 125, 125, 240, 240, 265, 4, 265, 265, 146, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240,
265, 265, 265, 54, 265, 265, 4, 54, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 265, 265, 265, 265, 265, 265, 20,
199, 256, 265, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 265, 265, 265, 265,
199, 199, 54, 265, 4, 3, 20, 199, 265, 256, 54, 54, 54, 265, 265, 265, 265, 265, 125, 54, 125, 240, 240, 240, 240,
240, 265, 54, 126, 125, 125, 240, 240, 125, 125, 240, 240, 240, 54, 240, 240, 240, 240, 240, 240, 240, 240, 240,
240, 126, 240, 240, 240, 125, 125, 240, 126, 125, 125, 126, 54, 41, 192, 6, 265, 54, 54, 240, 125, 125, 240, 240,
240, 54, 126, 54, 265, 125, 240, 125, 265, 20, 199, 256, 265, 54, 256, 240, 126, 125, 125, 240, 240, 240, 126,
125, 125, 240, 240, 125, 125, 240, 265, 265, 265, 240, 240, 240, 240, 240, 265, 126, 125, 125, 240, 240, 265,
240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 20, 199, 256, 265, 265, 265, 146, 265, 265, 265, 54, 265,
265, 54, 54, 265, 265, 54, 20, 199, 256, 45, 54, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240,
125, 125, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 125, 240, 125, 125, 125, 265, 265, 265, 265, 265,
265, 265, 265, 20, 199, 256, 265, 91, 6, 54, 54, 54, 265, 78, 78, 78, 78, 78, 78, 20, 199, 256, 265, 265, 146, 265,
265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 54, 265, 265, 4, 54, 265, 126, 265, 54, 20, 199, 256, 3, 54, 265,
265, 265, 125, 125, 265, 265, 125, 125, 125, 125, 125, 125, 240, 240, 240, 240, 240, 126, 125, 240, 125, 240,
125, 125, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 240, 125,
240, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240,
240, 125, 125, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 125, 125, 240, 240, 125, 125, 240, 240, 240,
125, 125, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 125, 125, 240, 240, 240, 240,
240, 125, 126, 240, 125, 240, 125, 125, 240, 240, 240, 125, 125, 125, 125, 240, 240, 240, 240, 240, 126, 125,
125, 240, 240, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 54, 54, 20, 199, 256, 265,
60
265, 265, 265, 265, 265, 265, 265, 265, 146, 265, 265, 265, 54, 54, 265, 265, 54, 20, 199, 256, 265, 265, 265,
265, 265, 265, 265, 265, 125, 125, 265, 265, 54, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125,
125, 125, 125, 125, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 125, 125,
125, 125, 240, 126, 240, 240, 125, 125, 240, 240, 126, 125, 125, 240, 240, 125, 125, 125, 125, 125, 125, 125,
125, 265, 20, 199, 256, 265, 265, 265, 265, 146, 265, 265, 265, 4, 54, 54, 265, 265, 54, 20, 199, 256, 3, 265, 199,
199, 54, 265, 265, 265, 54, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 265, 256, 265, 4,
265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 265, 54, 265, 125, 125, 240, 240,
240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 199, 126, 199, 125, 54, 125, 240, 265, 240, 256,
265, 4, 265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 265, 265, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 265,
265, 265, 265, 265, 265, 4, 54, 265, 265, 54, 20, 199, 256, 3, 265, 265, 265, 54, 265, 265, 265, 265, 199, 199, 54,
265, 256, 265, 4, 265, 54, 265, 125, 265, 265, 146, 265, 265, 265, 265, 54, 265, 265, 4, 54, 265, 265, 54, 20, 199,
256, 3, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 54, 4, 96, 265, 41, 4, 221, 54, 6,
255, 6, 20, 199, 256, 265, 265, 146, 265, 255, 125, 265, 265, 265, 265, 265, 265, 265, 265, 265, 240, 240, 265,
126, 125, 265, 125, 265, 265, 265, 265, 265, 240, 240, 265, 265, 265, 54, 265, 265, 20, 199, 256, 54, 54, 265,
265, 265, 125, 125, 240, 240, 240, 240, 240, 240, 126, 265, 125, 265, 125, 240, 126, 125, 240, 125, 240, 125,
125, 240, 240, 240, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 240, 240, 240, 240,
240, 126, 125, 125, 240, 125, 240, 125, 125, 240, 240, 125, 126, 146, 125, 125, 240, 265, 125, 265, 125, 265,
240, 126, 265, 125, 265, 240, 240, 265, 265, 265, 240, 265, 125, 125, 126, 125, 125, 126, 125, 265, 125, 240,
240, 240, 125, 126, 240, 125, 240, 125, 125, 240, 240, 240, 125, 125, 240, 240, 240, 240, 240, 126, 125, 265,
125, 265, 240, 240, 240, 240, 240, 240, 240, 126, 240, 240, 240, 240, 240, 240, 125, 265, 240, 125, 240, 126,
125, 125, 125, 125, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 265, 240, 240, 126, 125, 240, 125, 240,
125, 240, 125, 240, 125, 125, 240, 240, 126, 240, 240, 240, 125, 240, 125, 240, 240, 125, 240, 126, 125, 240,
240, 125, 240, 125, 240, 240, 125, 240, 125, 240, 265, 265, 265, 265, 265, 265, 265, 265, 20, 199, 256, 265, 265,
265, 265, 265, 265, 265, 265, 265, 146, 265, 265, 265, 4, 54, 54, 265, 265, 54, 20, 199, 256, 3, 265, 125, 125,
265, 265, 54, 265, 265, 125, 125, 265, 265, 199, 199, 54, 265, 125, 125, 125, 125, 125, 125, 125, 125, 240, 240,
240, 240, 240, 126, 125, 125, 125, 240, 240, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 125, 146,
125, 265, 199, 240, 199, 54, 265, 265, 125, 125, 240, 240, 240, 125, 240, 240, 125, 126, 240, 240, 240, 125, 265,
125, 265, 240, 125, 240, 265, 126, 125, 265, 54, 54, 41, 221, 6, 255, 4, 125, 6, 240, 96, 20, 240, 240, 199, 265,
240, 256, 4, 126, 54, 125, 265, 125, 255, 240, 240, 265, 54, 54, 265, 240, 265, 240, 265, 126, 125, 125, 240, 240,
125, 240, 240, 240, 240, 240, 126, 45, 125, 240, 125, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 126,
265, 265, 240, 265, 265, 146, 265, 265, 265, 4, 125, 125, 126, 125, 125, 240, 126, 125, 125, 240, 54, 240, 54,
265, 265, 54, 20, 199, 256, 3, 265, 265, 20, 199, 256, 125, 125, 125, 125, 125, 125, 240, 240, 240, 240, 125, 240,
240, 125, 126, 125, 125, 146, 125, 240, 126, 125, 125, 240, 240, 265, 265, 20, 199, 256, 265, 265, 20, 199, 256,
265, 265, 20, 199, 256, 265, 265, 199, 199, 54, 265, 4, 20, 3, 199, 265, 54, 256, 54, 265, 265, 20, 199, 256, 265,
125, 240, 240, 265, 240, 265, 256, 240, 240, 54, 126, 54, 125, 265, 125, 240, 240, 4, 265, 256, 3, 54, 265, 125,
125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 265, 54, 256, 265, 4, 54, 265, 41, 256, 192, 3, 6, 265, 265, 54,
54, 265, 256, 265, 4, 265, 256, 3, 265, 54, 54, 54, 54, 54, 265, 256, 125, 265, 4, 265, 256, 3, 265, 256, 265, 54,
54, 265, 256, 265, 54, 265, 256, 54, 54, 265, 4, 20, 199, 256, 265, 54, 256, 265, 4, 265, 265, 265, 265, 265, 54,
265, 265, 20, 4, 4, 199, 4, 4, 4, 256, 4, 54, 3, 54, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 265, 240, 265,
265, 265, 265, 265, 91, 6, 54, 54, 54, 54, 265, 78, 265, 265, 78, 78, 125, 78, 78, 125, 125, 125, 125, 78, 20, 199,
256, 265, 265, 265, 265, 265, 265, 54, 54, 240, 265, 240, 265, 126, 125, 265, 125, 265, 125, 146, 265, 240, 240,
265, 265, 54, 265, 265, 54, 265, 265, 54, 20, 199, 256, 54, 265, 265, 265, 265, 265, 125, 125, 125, 125, 125, 125,
265, 265, 199, 199, 54, 265, 265, 265, 125, 125, 265, 265, 265]
email=[265, 240, 54, 240, 240, 54, 54, 240, 240, 240, 177, 54, 256, 20, 199, 256, 3, 4, 96, 265, 240, 240, 240,
240, 240, 126, 4, 125, 54, 265, 125, 146, 240, 240, 265, 146, 265, 265, 146, 265, 146, 265, 125, 125, 146, 146,
265, 146, 265, 54, 265, 265, 54, 54, 54, 54, 54, 54, 41, 20, 192, 6, 4, 96, 265, 125, 125, 125, 125, 4, 54, 265, 265,
265, 54, 54, 54, 45, 45, 45, 4, 96, 240, 265, 4, 54, 20, 199, 256, 265, 265, 20, 199, 256, 265, 265, 20, 199, 256,
265, 265, 265, 20, 199, 256, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240,
240, 126, 265, 125, 125, 240, 240, 265, 240, 240, 240, 240, 265, 240, 126, 240, 240, 240, 125, 125, 240, 126,
61
125, 125, 240, 125, 126, 240, 125, 240, 125, 125, 240, 240, 240, 125, 125, 125, 125, 125, 125, 240, 240, 240,
240, 240, 126, 125, 125, 240, 126, 265, 125, 240, 125, 240, 240, 125, 125, 240, 240, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 240, 125, 240,
240, 240, 240, 240, 54, 54, 240, 240, 126, 125, 125, 41, 4, 240, 96, 221, 240, 265, 6, 4, 255, 54, 6, 20, 199, 256,
265, 265, 125, 125, 20, 199, 256, 265, 20, 199, 256, 265, 265, 54, 20, 199, 256, 265, 265, 146, 265, 255, 265,
265, 54, 265, 192, 91, 265, 125, 125, 192, 91, 265, 265, 125, 125, 125, 125, 54, 54, 54, 41, 20, 192, 6, 265, 265,
265, 265, 265, 265, 54, 54, 125, 125, 20, 199, 256, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 20,
199, 256, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 20, 199, 256, 54, 54, 265, 199, 199, 199, 199, 199,
199, 199, 199, 240, 240, 240, 240, 240, 126, 125, 125, 265, 240, 240, 125, 125, 240, 125, 240, 240, 125, 265,
265, 199, 199, 54, 54, 54, 54, 265, 146, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 240, 125, 240, 240,
240, 125, 125, 240, 125, 125, 125, 125, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240,
240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265,
265, 265, 54, 4, 54, 41, 221, 6, 96, 255, 265, 6, 4, 20, 54, 199, 256, 255, 265, 265, 20, 199, 256, 265, 265, 20,
199, 256, 265, 265, 20, 199, 256, 265, 4, 96, 265, 240, 240, 240, 240, 4, 240, 54, 126, 125, 265, 265, 146, 265,
125, 240, 240, 265, 265, 265, 54, 54, 41, 20, 192, 6, 265, 265, 54, 54, 54, 91, 6, 54, 54, 91, 6, 265, 20, 199, 256,
265, 265, 20, 199, 256, 265, 265, 20, 199, 256, 265, 265, 20, 199, 256, 265, 265, 265, 265, 54, 265, 265, 20, 199,
256, 265, 240, 265, 265, 265, 20, 199, 256, 265, 265, 265, 265, 265, 265, 4, 265, 20, 199, 256, 3, 265, 265, 265,
54, 265, 265, 265, 265, 265, 265, 240, 240, 240, 240, 199, 199, 54, 265, 240, 54, 126, 20, 125, 199, 256, 125,
240, 240, 265, 265, 265, 265, 265, 265, 265, 4, 54, 265, 125, 125, 54, 54, 4, 96, 240, 265, 240, 4, 126, 41, 54,
125, 221, 6, 125, 265, 255, 6, 240, 240, 265, 265, 54, 20, 199, 256, 3, 265, 20, 199, 256, 265, 20, 199, 256, 265,
20, 199, 256, 265, 265, 146, 20, 199, 256, 255, 265, 265, 265, 265, 54, 265, 265, 20, 199, 256, 265, 125, 125,
125, 125, 265, 265, 265, 265, 265, 265, 265, 265, 4, 54, 54, 4, 96, 265, 4, 54, 265, 265, 265, 54, 54, 20, 199, 256,
3, 265, 54, 54, 54, 54, 54, 265, 20, 199, 256, 265, 265, 265, 54, 265, 265, 20, 199, 256, 146, 265, 265, 265, 265,
265, 265, 265, 4, 54, 265, 265, 265, 54, 20, 199, 256, 3, 265, 265, 54, 54, 256, 265, 265, 256, 54, 265, 265, 265,
265, 54, 265, 265, 265, 265, 199, 199, 54, 265, 256, 265, 4, 265, 125, 125, 125, 125, 54, 54, 265, 265, 265, 146,
265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 54, 265, 265, 4, 54, 54, 265, 240, 240, 240, 240,
240, 265, 126, 54, 125, 54, 125, 4, 240, 96, 240, 265, 4, 54, 41, 221, 6, 265, 265, 255, 6, 265, 54, 20, 199, 256, 3,
265, 265, 20, 199, 256, 265, 20, 199, 256, 265, 265, 146, 265, 265, 265, 20, 199, 256, 265, 20, 199, 256, 265,
240, 20, 240, 199, 126, 256, 125, 265, 265, 125, 240, 20, 240, 199, 256, 265, 265, 265, 265, 265, 265, 265, 20,
199, 256, 255, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 54, 256, 240, 240, 240, 240, 240, 126, 125, 125,
240, 240, 54, 265, 265, 54, 265, 265, 265, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125,
125, 240, 240, 240, 240, 146, 240, 126, 125, 125, 240, 240, 265, 240, 240, 240, 240, 240, 54, 126, 54, 125, 125,
41, 4, 240, 221, 96, 240, 265, 6, 4, 265, 54, 4, 255, 125, 125, 265, 265, 265, 265, 265, 265, 240, 265, 240, 126,
265, 125, 240, 125, 240, 240, 125, 240, 125, 240, 265, 199, 199, 54, 6, 265, 20, 199, 256, 3, 265, 255, 265, 265,
265, 146, 265, 265, 265, 4, 54, 54, 265, 125, 125, 265, 54, 54, 4, 96, 265, 4, 54, 41, 221, 6, 265, 255, 6, 265, 54,
54, 20, 199, 256, 3, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256,
265, 265, 146, 20, 199, 256, 255, 265, 265, 54, 256, 265, 240, 265, 240, 265, 126, 125, 125, 240, 240, 54, 265,
265, 265, 265, 265, 265, 199, 199, 54, 265, 256, 265, 4, 265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 54, 54, 4,
96, 265, 4, 54, 41, 221, 6, 265, 255, 6, 265, 265, 54, 20, 199, 256, 3, 265, 20, 199, 256, 265, 20, 199, 256, 265,
265, 146, 20, 199, 256, 255, 265, 265, 265, 265, 54, 265, 265, 20, 199, 256, 265, 265, 240, 240, 240, 240, 240,
126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125,
125, 240, 240, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 240, 240, 240, 240, 240,
126, 125, 240, 125, 240, 240, 125, 240, 125, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 125,
125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 125, 125, 125, 125, 125, 125, 265, 54, 54, 265,
265, 265, 146, 265, 265, 265, 265, 4, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 54, 54, 265, 265, 126,
265, 54, 20, 199, 256, 3, 265, 265, 54, 256, 265, 265, 256, 265, 265, 265, 265, 54, 265, 265, 265, 265, 265, 265,
199, 199, 54, 265, 256, 265, 4, 265, 54, 240, 240, 126, 125, 125, 240, 240, 265, 125, 125, 125, 265, 265, 265,
265, 54, 54, 4, 96, 265, 4, 54, 41, 221, 6, 265, 255, 6, 54, 54, 54, 265, 265, 265, 265, 265, 265, 240, 240, 240,
240, 265, 240, 265, 126, 240, 240, 240, 125, 265, 125, 54, 240, 54, 4, 96, 265, 4, 54, 240, 126, 125, 41, 221, 6,
125, 6, 240, 240, 54, 54, 54, 192, 126, 126, 126, 126, 125, 91, 125, 125, 265, 265, 265, 265, 265, 146, 265, 265,
54, 265, 265, 4, 54, 54, 265, 265, 265, 265, 54, 54, 41, 221, 6, 255, 54, 54, 265, 265, 126, 265, 54, 54, 20, 199,
62
256, 3, 265, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265,
20, 199, 256, 265, 265, 20, 199, 256, 265, 20, 199, 256, 255, 265, 265, 20, 199, 256, 265, 20, 199, 256, 54, 255,
54, 54, 6, 265, 265, 265, 20, 199, 256, 265, 265, 265, 265, 20, 199, 256, 265, 265, 146, 265, 265, 265, 54, 54,
265, 265, 4, 192, 4, 4, 4, 125, 4, 4, 120, 54, 54, 265, 240, 4, 54, 240, 4, 54, 4, 4, 4, 20, 4, 4, 199, 4, 54, 4, 256, 4,
265, 4, 4, 20, 4, 4, 199, 54, 4, 256, 4, 265, 4, 4, 4, 54, 265, 265, 265, 192, 126, 126, 126, 126, 91, 192, 91, 240,
240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 265, 54, 54, 20, 199, 256, 265, 265, 265, 54, 265, 265, 20,
199, 256, 265, 265, 54, 125, 54, 20, 199, 256, 265, 265, 265, 265, 265, 4, 54, 54, 265, 265, 265, 54, 265, 54, 54,
41, 221, 6, 255, 54, 54, 265, 265, 265, 54, 20, 199, 256, 3, 265, 265, 20, 199, 256, 265, 265, 146, 265, 265, 265,
4, 54, 54, 4, 96, 240, 20, 240, 265, 126, 240, 240, 240, 125, 125, 240, 240, 126, 125, 125, 240, 240, 4, 54, 265,
265, 54, 265, 20, 199, 256, 3, 265, 265, 265, 265, 265, 265, 265, 20, 199, 256, 265, 54, 54, 54, 265, 20, 199, 256,
265, 265, 265, 265, 265, 265, 54, 54, 54, 41, 20, 192, 6, 265, 265, 54, 54, 54, 54, 4, 54, 265, 265, 265, 54, 20,
199, 256, 3, 265, 265, 54, 91, 6, 255, 54, 54, 6, 265, 265, 54, 265, 265, 265, 265, 199, 199, 54, 265, 20, 199, 256,
265, 265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 265, 54, 54, 41, 221, 6, 265, 255, 6, 265, 54, 54, 20, 199, 256,
3, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 265, 125, 125, 125, 125, 125, 125, 146, 20, 199,
256, 255, 265, 265, 54, 256, 265, 265, 256, 265, 4, 265, 256, 3, 265, 256, 265, 265, 256, 54, 54, 265, 265, 54,
265, 265, 265, 4, 265, 256, 3, 265, 4, 265, 265, 265, 265, 265, 4, 54, 265, 265, 54, 20, 199, 256, 3, 54, 265, 265,
54, 265, 265, 265, 265, 265, 265, 256, 265, 4, 265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 265, 54, 41, 221, 6,
265, 255, 6, 4, 96, 265, 4, 54, 265, 54, 20, 199, 256, 3, 265, 20, 199, 256, 265, 265, 125, 125, 125, 240, 240, 240,
240, 240, 126, 125, 125, 240, 240, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125, 125, 240, 240, 240,
240, 240, 126, 240, 240, 240, 125, 125, 240, 240, 126, 125, 125, 240, 240, 125, 125, 125, 240, 240, 240, 240,
240, 126, 125, 125, 240, 240, 240, 240, 240, 125, 240, 240, 126, 240, 125, 240, 125, 240, 125, 240, 125, 125,
240, 240, 240, 125, 146, 20, 199, 256, 255, 265, 265, 20, 199, 256, 265, 265, 265, 54, 265, 265, 20, 199, 256,
265, 265, 265, 256, 265, 4, 265, 54, 54, 265, 265, 265, 265, 54, 265, 265, 4, 54, 54, 265, 265, 265, 54, 20, 199,
256, 3, 265, 265, 54, 54, 54, 265, 265, 265, 265, 265, 265, 20, 199, 256, 265, 265, 265, 54, 265, 265, 20, 199,
256, 54, 54, 265, 240, 265, 240, 126, 125, 265, 54, 125, 256, 240, 240, 265, 4, 265, 265, 265, 265, 265, 265, 4,
54, 54, 265, 265, 265, 54, 20, 199, 256, 3, 265, 125, 54, 54, 265, 54, 256, 265, 265, 265, 265, 54, 265, 265, 20,
199, 256, 265, 125, 125, 265, 265, 240, 240, 240, 240, 54, 240, 126, 125, 125, 240, 240, 54, 54, 265, 265, 265,
265, 265, 54, 265, 265, 4, 54, 54, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 54, 20, 199,
256, 3, 265, 265, 54, 256, 265, 265, 256, 54, 265, 265, 265, 265, 54, 265, 265, 265, 265, 265, 265, 199, 199, 125,
125, 54, 265, 256, 265, 4, 265, 265, 265, 265, 265, 265, 4, 54, 54, 265, 240, 240, 240, 240, 240, 126, 125, 125,
240, 240, 265, 54, 54, 4, 96, 265, 4, 54, 41, 221, 6, 265, 255, 6, 265, 265, 54, 54, 20, 199, 256, 3, 265, 20, 199,
256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 265, 125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 146, 20, 199, 256, 255, 265, 265, 265, 265, 54, 265, 265, 20, 199, 256, 265, 265, 125, 125,
54, 265, 265, 265, 265, 265, 265, 265, 4, 54, 54, 54, 54, 265, 265, 265, 54, 20, 199, 256, 3, 265, 125, 265, 54,
256, 265, 265, 256, 265, 265, 265, 265, 54, 265, 265, 265, 265, 199, 199, 54, 265, 256, 265, 4, 265, 265, 265,
265, 265, 125, 125, 125, 125, 125, 146, 265, 265, 265, 54, 265, 265, 4, 54, 265, 265, 54, 41, 221, 6, 265, 265,
265, 265, 255, 6, 265, 54, 20, 199, 256, 3, 265, 265, 20, 199, 256, 265, 20, 199, 256, 265, 265, 146, 265, 265,
265, 20, 199, 256, 265, 20, 199, 256, 265, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 125,
146, 125, 20, 199, 256, 265, 20, 199, 256, 265, 265, 265, 265, 265, 265, 265, 20, 199, 256, 265, 125, 265, 20,
199, 256, 265, 265, 20, 199, 256, 255, 265, 265, 265, 265, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 265,
265, 265, 265, 125, 265, 240, 54, 256, 240, 240, 240, 240, 240, 240, 126, 240, 240, 240, 125, 125, 240, 240, 126,
265, 125, 265, 125, 240, 240, 265, 54, 265, 265, 265, 265, 199, 199, 54, 265, 125, 125, 125, 125, 125, 125, 146,
265, 265, 265, 125, 265, 265, 265, 265, 265, 265, 265, 256, 265, 4, 265, 265, 265, 146, 265, 265, 265, 4, 54, 54,
265, 265, 54, 54, 20, 199, 256, 3, 265, 240, 240, 126, 125, 265, 54, 54, 41, 221, 4, 6, 96, 255, 240, 6, 20, 199,
256, 255, 125, 240, 125, 125, 240, 265, 240, 240, 240, 240, 265, 240, 240, 240, 240, 240, 4, 240, 54, 126, 265,
20, 199, 256, 125, 265, 125, 240, 265, 240, 54, 256, 265, 4, 265, 256, 3, 265, 256, 265, 265, 256, 54, 54, 265,
265, 54, 265, 265, 265, 256, 265, 4, 265, 4, 265, 265, 265, 265, 265, 4, 54, 54, 265, 265, 54, 20, 199, 256, 3, 54,
54, 265, 265, 54, 265, 265, 265, 265, 265, 265, 256, 265, 4, 265, 54, 54, 265, 265, 265, 265, 265, 4, 54, 265, 265,
54, 41, 221, 125, 6, 125, 125, 125, 125, 265, 255, 6, 265, 54, 20, 199, 256, 3, 265, 20, 199, 256, 265, 20, 199,
256, 265, 265, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 125, 240, 240, 125, 146, 20, 199, 256, 255, 265,
265, 265, 265, 54, 265, 265, 20, 199, 256, 54, 265, 265, 265, 265, 265, 265, 265, 265, 265, 54, 265, 265, 4, 54,
63
265, 265, 265, 54, 54, 20, 199, 256, 3, 265, 54, 54, 54, 265, 265, 265, 265, 265, 265, 265, 45, 265, 265, 146, 265,
265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 54, 265, 265, 20, 199, 256, 265, 265, 265, 265, 265, 125, 265,
265, 265, 240, 240, 240, 240, 240, 126, 125, 265, 265, 265, 265, 265, 125, 125, 125, 240, 240, 265, 265, 265,
265, 20, 199, 256, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 146, 265, 265, 265, 4, 54, 265, 265, 265, 54,
54, 20, 199, 256, 3, 265, 265, 265, 265, 54, 265, 265, 265, 265, 265, 265, 199, 199, 54, 265, 265, 265, 54, 54, 4,
96, 265, 240, 4, 240, 41, 54, 126, 221, 125, 6, 265, 125, 265, 240, 265, 240, 265, 255, 265, 265, 265, 199, 199,
54, 265, 125, 125, 240, 240, 240, 240, 125, 240, 125, 126, 125, 125, 146, 125, 240, 240, 265, 265, 265, 6, 265,
20, 199, 256, 265, 125, 255, 265, 265, 265, 146, 265, 54, 54, 265, 125, 125, 265, 265, 54, 265, 265, 4, 54, 54,
265, 265, 54, 4, 96, 41, 221, 6, 265, 265, 4, 265, 54, 255, 6, 265, 54, 20, 199, 256, 3, 265, 265, 20, 199, 256, 265,
20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 20, 199, 256, 265, 265, 146, 265, 255, 265, 265, 54, 265,
265, 20, 199, 256, 265, 265, 20, 199, 256, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 20, 199, 256,
265, 265, 20, 199, 256, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 20, 199, 256, 265, 265, 265, 265,
265, 265, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 240, 240, 240, 240, 240, 126, 125,
125, 240, 240, 265, 265, 265, 265, 265, 125, 125, 265, 265, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240,
240, 240, 240, 240, 240, 126, 125, 125, 240, 240, 265, 265, 125, 146, 265, 265, 265, 20, 199, 256, 54, 265, 265,
54, 265, 265, 265, 265, 265, 265, 125, 125, 125, 125, 125, 125, 240, 240, 240, 240, 240, 126, 125, 125, 240, 240,
125, 125, 146, 265, 54, 41, 221, 6, 265, 265, 265, 265, 265, 265]
64
Dédicace
1- Chaib Yousra 2- Bousbia Salah Salima
Louange à dieu, le seul unique Nous dédions ce travail a chères nous parents qui nous beaucoup
aider Durant tous nous cursus A tous nous frères et sœurs
A tous nous proches grands et petits A tous nous amis et amies Nous dédions surtout :
Abd Salam salemi, soufian yahiat A tous ceux que nous aimons
Nous dédions ce modeste travail.