Introduction au Reverse Engineering

logo tux ouvrier

Généralités

Définition

Le Reverse Engineering, ou rétro-ingénierie / ingénierie inverse en français, représente l'étude et l'analyse d'un système pour en déduire son fonctionnement interne, et se retrouve dans de nombreux domaines de l'ingénierie : génie civil, mécanique, ingénierie navale, aéronautique, etc...

Dans le domaine informatique, faire du reverse revient souvent à utiliser des outils d'analyse comme le désassembleur ou le décompilateur dans le cadre d'analyse en boîte blanche. Nous reviendrons par la suite sur les différents contextes d'analyse. On retrouve également des outils permettant d'analyser les entrées/sorties d'un programme en sniffant le réseau comme Wireshark, ainsi que de nombreux autres outils, sur lesquels nous reviendront par la suite.

Le reverse étant très lié au monde de la sécurité informatique, une distribution Linux apellée Kali Linux (anciennement Backtrack) spécialisée dans le domaine de la sécurité est un très bon point de départ pour se former au monde du reverse. S'y aventurer n'est pas chose facile, mais de nombreux sites webs, conférences (Nuit du Hack, Hack in Paris, DEFCON, etc...), livres, et autres supports vous aideront durant cette longue quête.

Il vous reste à choisir votre camp : Etes vous plutôt White Hat ou Black Hat? Expert en sécurité ou Hacker? C'est à vous de décider de quelle côté de la force vous êtes ....

logo nsa sabre laser logo anonymous | we are legion

No. Try not. Do... or do not. There is no try; Yoda, Star Wars, épisode V : L'Empire contre-attaque

Objectifs

Mais pourquoi faire du Reverse Engineering?

Dans le domaine de l'informatique, le reverse a de nombreuses utilités :

Ainsi, il permet de passer sous licence libre de nombreux logiciels propriétaires :

On peut citer le désormais très populaire outil SaMBa, outil permettant de réaliser des partages réseaux de fichiers et d'imprimantes entre des systèmes Linux et Windows. Cette implémentation du protocole SMB/CIFS a été réalisée initialement par Andrew Tridgell par le biais d'une analyse réseau du protocole.

Dans le monde des drivers libres, Nouveau, projet de la fondation X.org produit des pilotes libres pour les cartes graphiques Nvidia, en utilisant le principe du Reverse : L'idée est d'analyser le comportement du pilote officiel de NVIDIA et ses interactions avec le matériel et le kernel Linux, pour ainsi en reproduire un totalement libre de droit.

logo open source

Compétences

Pour pouvoir rentrer dans ce cercle de "reverseur", il convient de disposer d'un minimum de bagages, dont voici une liste non exhaustive :

Un peu de vocabulaire

Pour la suite ainsi que pour les exemples, il convient de comprendre ce qu'est un fichier binaire.

En voici une définition spécifique au sujet traité : c'est un ensemble d'octets, dont chaque octet est représenté par 2 caractères hexadécimaux (de 0 à F, un octet : OO, FA, FF, ...). Chaque ensemble d'octets représente un code en assembleur, spécifique à une architecture de processeur (x86, ARM, ...).

Voici 3 exemples d'instructions assembleur et leurs représentations en octets, qui seront utilisés dans l'exemple :

Le drapeau ZF est mis à 1 lorsque le résultat de la dernière opération arithmétique à renvoyer 0.

Pour avoir une vision un peu plus précise de l'assembleur, allez voir ici