diff --git a/0_preamble/french_summary.typ b/0_preamble/french_summary.typ index b7d7c57..e310637 100644 --- a/0_preamble/french_summary.typ +++ b/0_preamble/french_summary.typ @@ -1,20 +1,66 @@ -#import "../lib.typ": todo, epigraph +#import "../lib.typ": epigraph, APK, pb1-text-fr, pb2-text-fr, pb3-text-fr, eg + +#let mp = text(font: "libertinus serif", sym.dot.c) = Résumé en Français #epigraph("Ellana Caldin, Le Pacte des Marchombres, Tome 1: Ellana, de Pierre Bottero")[Il y a deux réponses à cette question, comme à toutes les questions : celle du savant et celle du poète.] +== Introduction -#todo[ - Write a "Substantial Summary" in french, at least 4 pages: https://ed-matisse.doctorat-bretagne.fr/fr/soutenance-de-these#p-151 -] +Android est le système d'exploitation pour téléphones portables le plus utilisé depuis 2014, et depuis 2017, il surpasse même Windows toute platformes confondues. +Cette popularité en fait une cible de choix pour les acteurs malveillants. +Il est donc important d'être capable d'analyser une application pour savoir exactement ce qu'elle fait. +Ce processus est appelé l'ingénierie inverse. -#text(fill: luma(75%), lorem(200)) +Beaucoup de travail à été fait dans ce domaine pour les programmes d'ordinateur. +Toutefois, les applications Android présentent leur propres difficultés. +Par example, les applications sont distribué dans leur format spécifique, le format #APK, et le code des applications est lui même compilé dans un format de code à octets spécifique à Android: Dalvik. +La première difficulté pour l'ingénieur#mp;e inverse est donc d'avoir des outils qui comprennent les formats utilisés par Android. +Dans le processus d'analyse, une première étape serait alors de lire le contenu de l'application. +Des outils comme Apktool peuvent être utilisé pour convertir les fichiers binaire de l'application dans une version lisible par un#mp;e humain#mp;e. +D'autres comme Jadx essaient de générer le code source Java depuis le code à octets. +Toutefois, les applications Android peuvent être trés grossent et il n'est pas toujours possible de les analyser manuellement. +D'autres outils ont été développer pour extraire une représentation plus haut niveau du contenu de l'application. +Par example, Flowdroid a pour objectif de détecter les fuites d'informations: l'utilisateur#mp;ice définit une liste de méthodes qui génèrent des informations sensbiles, et une liste de méthodes qui exfiltrent des informations vers l'extérieur. +Flowdroid va alors calculer si il existe des chemins dans l'application permettant de relier des méthodes de la première catégorie avec des méthodes de la seconde. + +Malheureusement, ces outils sont difficile a utiliser, et même si ils fonctionnent sur des applications simples construitent dans le but de tester les outils, il n'est pas rare que ces outils échouent sur de vrais applications. +Cela pause la problématique #pb1-text-fr + +Il y a deux familles d'analyse: l'analyse statique et l'analyse dynamique. +L'analyse statique analyse l'application sans la lancer, alors que l'analyse dynamique examine le comportement de l'application peudant son exécution. +Chacune a ses forces et ces faiblesses, et certain problèmes d'analyse sont traditionnellement associé à l'une ou l'autre pour les résoudre. +L'un de ces problème est le chargement dynamique de code. +Les applications Android sont initiallement prévu pour être codé en Java, et donc Android à hérité de beaucoup de fonctionnalités de Java. +En l'occurence, Android utilisent un systeme de chargeur de classes similaire à celui de Java, qui peut être utiliser pour charger, en cour d'exécution, du code extérieur à l'application. +Etant donné que ce code chargé dynamiquement n'est pas nécessairement disponnible dans l'application initiallement, ce problème est relégé a l'analyse dynamique. +Toutefois, il semblerais qu'une généralisation hâtive soit souvant faite, et que le système de chargement de classe dans sont ensemble soit relégé à l'analyse dynamique. +L'absence d'étude détaillé de ce mechanisme nous amène à notre seconde problématique: #pb2-text-fr + +Un autre problème usuellement associé à l'analyse dynamique est la réflection. +Android permet à une application de manipuler les classes et méthodes sous forme d'objet. +En utilisant cette fonctionnalité, il est donc possible d'appeler une méthode en utilisant son nom sous forme de chaine de caractère au lieu d'utiliser une instruction Dalvik avec une référence vers méthode. +Ce cas est déjà compliqué à analyser statiquement quand la chaine de caractère est lisible dans l'application, mais il devient imposible quand elle ne l'ai pas (#eg la chaine est envoyé par un serveur externe lors de l'execution, ou elle est stocké chiffré est n'est déchiffré qu'au dernier moment). +L'analyse dynamique permet de capturer à la fois le code chargé dynamiquement et les méthodes appelés par reflection. +Toutefois, obtenir ces instructions est insuffisant. +Il n'existe pas de solutions standards pour transmettre ces données aux outils d'analysise statique, qui pourtant peuvent en avoir besoin pour analyser l'application dans sont entièreté. +Certaine contributions d'ingenierie inverse ont déjà proposé d'instrumenter (modifier) l'application pour y ajouter les résultats de leur analyse avant de l'analyser avec d'autres outils. +Cette approche prométeuse motive notre troisième problématique: #pb3-text-fr + +== Evaluation de la réutilisabilité des outils d'analyse static pour Android + +== Chargeurs de classes au milieu: Dérouter les analyseur static pour Android + +== L'Application de Thésée: Même après avoir ajouté les informations d'exécution, c'est toujours votre application + +== Conclusion /* * Vocabulaire: * - Obfuscation: brouillage, Reverse Engineering: Ingénierie Inverse, jofr 1 jav 2013 https://www.legifrance.gouv.fr/jorf/jo/id/JORFCONT000026871045 * - Malware: Maliciel, https://cyber.gouv.fr/le-cyberdico#M +* - Bytecode: Code à octets, https://www.culture.gouv.fr/fr/thematiques/langue-francaise-et-langues-de-france/agir-pour-les-langues/moderniser-et-enrichir-la-langue-francaise/nos-publications/Vocabulaire-des-TIC-2017 * * * autres ref: diff --git a/5_theseus/main.typ b/5_theseus/main.typ index aacbecc..ab9f14b 100644 --- a/5_theseus/main.typ +++ b/5_theseus/main.typ @@ -1,8 +1,9 @@ #import "../lib.typ": epigraph, highlight-block, todo -= Theseus += The Application of Theseus: After Adding Runtime Data, it is Still Your Application -#epigraph("Plutarch, Life of Theseus 23.1")[The ship wherein Theseus and the youth of Athens returned from Crete had thirty oars, and was preserved by the Athenians \[...\] for they took away the old planks as they decayed, putting in new and strong timber in their places] +//#epigraph("Plutarch, Life of Theseus 23.1")[The ship wherein Theseus and the youth of Athens returned from Crete had thirty oars, and was preserved by the Athenians \[...\] for they took away the old planks as they decayed, putting in new and strong timber in their places] +#epigraph("Toby Fox, Undertale")[Despite everything, it's still you.] #align(center, highlight-block(inset: 15pt, width: 75%, block(align(left)[ #todo[Abstract for @sec:th] diff --git a/jury.typ b/jury.typ index eefafd4..f8b02ee 100644 --- a/jury.typ +++ b/jury.typ @@ -8,10 +8,10 @@ column-gutter: 2em, stroke: 0pt, inset: (x: 0pt, y: .5em), - "Présidente :", "Alice", "", "", - "Rapporteurs :", "Bob", "", "", - "", "Eve", "", "", - "Examinatrice :", "Mallory", "", "", + "Présidente :", "", "", "", + "Rapporteurs :", "Vincent Nicomette", "Professeur des Universités", "INSA Toulouse", + "", "Julien Signoles", "Directeur de Recherches", "CEA", + "Examinatrice :", "", "", "", "Dir. de thèse :", "Jean-François Lalande", "Professeur des Universités", "CentraleSupélec", "", "Valérie Viet Triem Tong", "Professeure", "CentraleSupélec", ) diff --git a/lib.typ b/lib.typ index 0f6be6f..b37dee9 100644 --- a/lib.typ +++ b/lib.typ @@ -41,7 +41,12 @@ #let pb1 = link()[*Pb1*] #let pb1-text = [_To what extent are previously published Android analysis tools still usable today, and what factors impact their reusability?_] +#let pb1-text-fr = [_A quel point les outils d'analyse Android préalablement publiés sont utilisable aujourd'hui, et quels facteurs impactent leur réutilisabilité?_] + #let pb2 = link()[*Pb2*] #let pb2-text = [_What is the default Android class loading algorithm, and does it impact static analysis?_] +#let pb2-text-fr = [_Quel est l'algorithme de chargement de classe utilisé par défaut par Android, et est ce qu'il impacte l'analyse statique?_] + #let pb3 = link()[*Pb3*] #let pb3-text = [_Can we use instrumentation to provide dynamic code loading and reflection data collected dynamically to static analysis tools and improve their results?_] +#let pb3-text-fr = [_Peut-on utliser l'instrumentation pour fournir le code chargé dynamiquement et les informations de réflection collecté dynamiquement aux outils d'analyse static pour améliorer leurs résultats?_] diff --git a/main.typ b/main.typ index cd081c2..1dfc58f 100644 --- a/main.typ +++ b/main.typ @@ -37,13 +37,18 @@ } #show: matisse-thesis.with( - title-fr: todo[Find a title], - title-en: todo[Find a title], + title-fr: [Rétro-Ingénierie d'applications Android: les inconvénients de l'analyse static], // malheurs -> inconvénients ? + // Because "Android Skuldgerries and Other Headache Inducing Fuckeries" won't pass the vibe check + title-en: [Android Application Reverse Engineering: the Woes of Static Analysis], author: "Jean-Marie MINEAU", affiliation: "IRISA", defense-place: "Rennes", - defense-date: todo[Date], - jury-content: [#jury-content \ #todo[Compose a Jury]], + defense-date: datetime( + year: 2025, + month: 12, + day: 10, + ).display(), + jury-content: jury-content, university: "CS", keywords-en: keywords-en, keywords-fr: keywords-fr, @@ -102,8 +107,7 @@ #todo[Normalize classloaders vs class loaders] #todo[Normalize bullets/item: either end with a '.' or a ';'] #todo[footnote numbering] - -#todo[redeveloper le future work des chapitres: expliquer le pb et expliquer dans quel direction le travail devrai être dirigé, direction technique] +#todo[Check defence date] #include("1_introduction/main.typ") #include("2_background/main.typ")