23/11/2024

Reverse engineering : définition et méthodes

La rétro-ingénierie (aussi appelée ingénierie inverse ou inversée) consiste à étudier un objet pour en déterminer le fonctionnement interne ou la méthode de fabrication.

On parle également de rétro conception. En matière d'informatique’ cela s’applique également sur les logiciels. Pour cela, on utilise des outils d’analyse tels qu’un désassembleur ou un dé-compilateur. Si cela revient à faire du débogage, on comprend pourquoi, grâce aux outils de Kali Linux, on peut s’en servir pour simuler un type d’attaque permettant de récupérer les informations auxquelles on n’a pas toujours accès de façon directe.

La rétro-ingénierie est fréquemment utilisée pour les structures de données afin d’en reconstituer un modèle depuis les structures physiques des fichiers ou des tables.

REMARQUE : la rétro-ingénierie est devenue très populaire grâce aux jeux vidéo et notamment le détournement des protections anti-copie. Cette activité s’est d’ailleurs appelée cracking.

En effet, pour écrire des pilotes pour certains périphériques tels que les webcams ou autres scanners, les développeurs de logiciels Open Source ont souvent été contraints à pratiquer la rétro-ingénierie sur le pilote, en interceptant les échanges entre le processeur et celui-ci, découvrant ainsi comment dialoguer avec la puce électronique de la carte principale.

En cryptographie, la rétro-ingénierie peut aller jusqu'à prendre la forme d’une attaque cryptanalytique, afin d’extraire les informations secrètes depuis la "boite noire" symbolisant le processus de chiffrement. Ce type d’attaque est baptisée attaque par canaux auxiliaires.

Juridiquement, de nombreux éditeurs de logiciels propriétaires incluent dans leur contrat de licence utilisateur final (abrégé en CLUF), des clauses d’interdiction de ce procédé. Mais, dans de nombreux pays, la rétro-ingénierie est autorisée par la loi, notamment à des fins d’interopérabilité. En France, ce droit est garanti par l’article L 122-6-1 du code de la propriété intellectuelle. De plus, la rétro-ingénierie peut être l’occasion de pratiquer un mode défensif, notamment dans les cas suivants :

  • étude de binaires malicieux (type rootkit), dans le cadre d’une attaque informatique.
  • étude de virus informatique pour l’amélioration d’un antivirus ou pour éradication.
  • étude et recherche de vulnérabilités dans les logiciels pour en améliorer la sécurité.

Nous allons ici, voir quelques-uns des nombreux outils permettant de pratiquer le reverse engineering.

A. Utilitaire OllyDbg

Il s’agit d’un programme d’assemblage 32 bits permettant de debugger les applications Microsoft Windows. L’accent mis sur l’analyse de code binaire le rend particulièrement utile dans les cas où le code source est indisponible. Généralement ce logiciel est utilisé pour cracker les logiciels commerciaux. Afin de l’ouvrir, il suffit de sélectionner le menu Applications, puis les options suivantes :

Afin d’ouvrir un exécutable, on doit alors aller dans le menu ‘Opening folder’ afin de sélectionner le programme binaire en question. On peut alors visualiser l’intégralité des événements et des échanges s’effectuant au sein du programme :

B. Utilitaire Dex2jar

Dans la mesure où les applications Android font partie des programmes exécutables, on peut aussi s’intéresser à la manière dont une application déployée sur un téléphone GSM est utilisée. Pour se faire, on peut utiliser le programme dex2jar aidant à la conversion de fichier APK en fichier JAR, dans le but de visualiser le code source. Ce programme s’utilise en mode ligne de commande de la façon suivante :

# d2j-dex2jar –d /<File>

REMARQUE : le fichier mentionné, doit être précisé avec son chemin d’accès complet. En sortie on devrait alors disposer d’un fichier JAR, comme le montre la capture suivante :

C. Utilitaire jd-gui

Il s’agit d’un utilitaire graphique permettant d’afficher le code source Java d’un fichier .class. On peut ainsi parcourir le code source reconstitué et ainsi reconstruire le fichier que l’on a récupéré à l’étape précédente en utilisant dex2jar. Pour exécuter ce programme il suffit d’ouvrir un terminal et d’exécuter la commande jd-gui. Cela permet d’initialiser la fenêtre suivante :

Dans le même esprit, on peut aussi ouvrir l’utilitaire apktool afin d’effectuer de l’ingénierie inverse pour des applications Android. Là encore, il s’agit d’un utilitaire en ligne de commande :

# apktool <Appli>.apk

Ce genre de commande permet alors d’initialiser la décompilation du fichier APK.

Vous voilà avec quelques outils entre les mains pour débuter en reverse engineering 😉

author avatar
Philippe PIERRE
A exercé de nombreuses années en tant qu'administrateur de base de données et comme administrateur Système Unix/Linux. Il a enseigné les réseaux au CNAM (Paris). Aujourd'hui, employé en tant qu'ingénieur infrastructure, au sein d'un laboratoire pharmaceutique et administrant un cluster de calculs HPC, il connaît parfaitement les environnements GNU/Linux dans le cadre d'une entreprise et des systèmes de haute disponibilité. Il aime partager son expérience.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail