Image 2
Tech & Gaming

Introduction au Reverse Engineering

Découvrez les bases du reverse engineering : légalité, utilité, outils comme W32Dasm et OllyDbg, et un exemple concret de modification de programme.

As-tu aimé cet article ?

Image 2
Image 2

Qu'est-ce que le reverse engineering ?

En général, le reverse engineering désigne le fait de décompiler un programme, c'est-à-dire de traduire un langage machine en un langage compréhensible par un être humain.

Dans la pratique, cette technique consiste à analyser le fonctionnement d'un programme ou d'un périphérique, soit en examinant sa structure, soit en observant pas à pas les résultats de son exécution.

La législation du reverse engineering

Le droit d'analyse

Un droit d'analyser le logiciel a été introduit par la loi de 1994. Il est défini comme la possibilité d'observer, d'étudier ou de tester le fonctionnement du logiciel lorsque l'utilisateur effectue toute opération de chargement, d'affichage, d'exécution, de transmission ou de stockage de ce dernier.

Il s'agit donc d'un droit au reverse engineering, défini comme l'analyse d'un système destinée à rechercher ses principes de conception. Cette analyse, tout comme la décompilation, n'est autorisée que si elle ne cause pas de préjudice injustifié aux intérêts légitimes de l'auteur et si elle ne porte pas atteinte à l'exploitation normale du programme, conformément au droit international.

Enfin, la loi précise que toute stipulation contractuelle contraire à ce droit est nulle et non avenue. Toutefois, le contrat peut fixer le cadre de l'utilisation normale du logiciel.

Le droit de décompilation

Le droit de décompiler le logiciel, c'est-à-dire de tenter de retrouver le code source à partir du programme objet, est accordé à la condition qu'il soit effectué à des fins d'interopérabilité. La décompilation doit donc servir à créer une interface avec d'autres logiciels, permettant leur articulation. Elle doit se limiter strictement aux parties nécessaires à cet interfaçage. En effet, cette pratique suscite des inquiétudes légitimes quant à la protection du programme.

Si la loi interdit toute clause contraire à ce droit, l'auteur peut néanmoins l'organiser contractuellement. Cela implique une procédure où l'utilisateur informe l'auteur de son désir de décompiler, suivie de la communication des interfaces utiles et des points d'ancrage.

La décompilation n'est autorisée que si les informations nécessaires n'ont pas été rendues facilement et rapidement accessibles auparavant. Elle ne pourra donc être considérée comme indispensable au sens de la loi dans le cas d'une standardisation du logiciel, d'une publication ou d'une réponse à une demande individuelle.

À quoi sert le reverse engineering ?

L'être humain est par nature curieux. Le reverse engineering part de cette philosophie : lorsqu'il a un logiciel entre les mains, il veut tout comprendre de son fonctionnement.

Le reverse engineering fait progresser la programmation. Il permet de mieux comprendre comment fonctionnent notre machine et les logiciels utilisés quotidiennement. C'est une méthode qui enseigne une grande quantité d'informations techniques.

Au-delà de l'apprentissage, le reverse engineering possède d'autres utilités. Il est souvent utilisé pour contourner les paiements de logiciels, une technique appelée cracking. Cela consiste à « déplomber » un logiciel pour trouver un moyen de contourner les protections mises en place par les éditeurs. Ces protections peuvent aller du Serial (code fourni à l'achat) au Nag-Screen (fenêtre rappelant l'achat du logiciel).

On peut aussi utiliser le reverse engineering pour lire des formats de fichiers propriétaires non documentés (comme le format MS-Word) ou pour communiquer via un protocole secret avec un serveur propriétaire. Le logiciel Samba, qui sert à partager des fichiers entre différentes architectures via le protocole SMB, est basé entièrement sur le reverse engineering.

En utilisant ces techniques, il est possible de comprendre la structure d'un document et de le convertir en un format ouvert. Cela permet de conserver ses documents même lorsque les systèmes utilisés deviennent obsolètes.

Enfin, de nombreux fabricants de matériel refusent de diffuser les spécifications de leurs produits. Les développeurs doivent alors utiliser le reverse engineering pour faire fonctionner ce matériel, comme c'est le cas pour certaines cartes graphiques ou les BIOS d'IBM.

Les bases du reverse engineering

Lorsque l'on décompile un programme, on n'obtient pas un langage de haut niveau comme le C ou le Visual Basic. C'est un peu plus complexe : le langage qui apparaît est l'ASM, ou assembleur.

Le langage assembleur est très proche du langage machine (binaire 0 et 1). Il dépend donc du type de processeur : il n'existe pas un langage assembleur unique, mais un langage par type de processeur. Bien que nous n'allions pas faire un cours complet ici, sachez que pour le reverse engineering, on se sert beaucoup des sauts conditionnels.

Tableau des sauts assembleurs

Instruction Signification Opcode
JNE Saute si pas égal 75 ou 85
JE Saute si égal 74 ou 84
JMP Saute EB ou E9
JA Saute si au dessus 0F87
JNA Saute si pas au dessus 0F86
JAE Saute si au dessus ou égal 0F83
JNAE Saute si pas au dessus ou égal 0F82
JB Saute si en dessous 0F82
JNB Saute si pas en dessous 0F83
JBE Saute si en dessous ou égal 0F86
JNBE Saute si pas en dessous ou égal 0F87
JG Saute si plus grand 0F8F
JNG Saute si pas plus grand 0F8E
JGE Saute si plus grand ou égal 0F8D
JNGE Saute si pas plus grand ou égal 0F8C
JL Saute si moins grand 0F8C
JLE Saute si moins grand ou égal 0F8D
JNLE Saute si pas moins grand ou égal 0F8E
NOP Ne fais rien 90 ou 908F

Les outils du reverse engineer

Le meilleur désassembleur est sans équivoque W32Dasm, qui fonctionne sous Windows.

Il vous faudra aussi un éditeur hexadécimal. Je ne citerai pas de nom précis vu le grand nombre d'outils disponibles : à vous de faire votre choix.

Ensuite, un debugger est indispensable ; le meilleur est SoftICE, mais OllyDbg existe également.

On peut citer pleins d'autres programmes très utiles en reversing comme Procdump (pour détecter si un logiciel est compressé), SmartCheck, et bien d'autres.

Et surtout, ce qu'il faut pour réussir en reverse engineering, c'est de ne pas avoir peur de passer de longues heures devant votre ordinateur pour essayer de comprendre le fonctionnement d'un logiciel.

Dans un futur article, nous étudierons plus en profondeur le reverse engineering. Nous aborderons probablement le reverse engineering Java qui, avec les bons outils, reste assez simple.

Exemple de reverse engineering

Prenons un programme tout basique codé en C par TheShade. Voici à quoi il ressemble ; il a l'air tout simple.

Ce programme demande simplement un mot de passe. Lorsque le mot de passe est faux, le message « Perdu ! » s'affiche. Si le mot de passe est correct, on voit : « Bravo ! ».

Nous allons donc ouvrir notre programme avec W32Dasm, l'un des désassembleurs les plus puissants. Nous allons faire une recherche du mot : « Perdu ». Pour cela, allez dans : Search > Find Text.

Après avoir effectué la recherche, nous arrivons ici.

Ici, on peut voir quelque chose de très intéressant. On remarque un saut provenant de l'adresse 004013DA qui arrive ici, ce qui signifie que « Perdu ! » s'affichera. Nous allons donc nous rendre à l'adresse 004013DA pour voir à quoi ressemble ce saut.

On voit à l'adresse 004013DA que le saut est un JNE, c'est-à-dire que si ce n'est pas égal, on saute à l'adresse 00401413 (c'est-à-dire l'affichage de « Perdu ! »). Maintenant, ce qu'il nous reste à faire, c'est de changer le saut JNE en JE. On va modifier le 7537 en 7437 grâce à un éditeur hexadécimal. Pour cela, regardons avec W32Dasm à quel offset se trouve notre saut à modifier. Regardez tout en bas de W32Dasm. Voici ce que vous devez voir.

Ce qui nous intéresse, c'est l'offset, ici c'est : 000007DAh. On peut donc retirer les cinq zéros et le « h ». Notre 75 à changer se trouve donc à l'offset 7DA. On changera donc le 75 en 74. Grâce à cette modification, on pourra entrer n'importe quel mot de passe, « Bravo ! » s'affichera toujours.

Voilà un petit exemple de reverse engineering, très basique.

Crédits :
* Introduction to Reverse Engineering Software
* The Millenium Cracking Tutorial by Acid Burn

As-tu aimé cet article ?
thetchesk
thetchesk @thetchesk
1 articles 0 abonnés

Commentaires (6)

Connexion pour laisser un commentaire.

Chargement des commentaires...