Définition reverse engineering
La reverse engineering consiste à démonter un objet pour voir comment il fonctionne afin de le dupliquer ou de l’améliorer. Cette pratique, empruntée à des industries plus anciennes, est maintenant fréquemment utilisée sur le matériel et les logiciels informatiques. La reverse engineering logicielle consiste à inverser le code machine d’un programme (la chaîne de 0 et de 1 qui est envoyée au processeur logique) pour le ramener dans le code source dans lequel il a été écrit, en utilisant des instructions en langage de programmation.
L’ingénierie inverse des logiciels est effectuée pour récupérer le code source d’un programme parce que celui-ci a été perdu, pour étudier la manière dont le programme effectue certaines opérations, pour améliorer les performances d’un programme, pour corriger un bug (corriger une erreur dans le programme lorsque le code source n’est pas disponible), pour identifier le contenu malveillant d’un programme tel qu’un virus ou pour adapter un programme écrit pour être utilisé avec un microprocesseur pour l’utiliser avec un autre. Le reverse engineering dans le but de copier ou de dupliquer des programmes peut constituer une violation du droit d’auteur. Dans certains cas, l’utilisation sous licence d’un logiciel interdit expressément la rétro-ingénierie.
Quelqu’un qui fait de la rétro-ingénierie sur un logiciel peut utiliser plusieurs outils pour désassembler un programme. L’un de ces outils est un dumper hexadécimal, qui imprime ou affiche les nombres binaires d’un programme au format hexadécimal (plus facile à lire qu’un format binaire). En connaissant les configurations binaires qui représentent les instructions du processeur ainsi que la longueur des instructions, la reverse engineering peut identifier certaines parties d’un programme pour voir comment elles fonctionnent. Un autre outil courant est le désassembleur. Le désassembleur lit le code binaire et affiche ensuite chaque instruction exécutable sous forme de texte. Un désassembleur ne peut pas faire la différence entre une instruction exécutable et les données utilisées par le programme. Un débogueur est donc utilisé, ce qui permet au désassembleur d’éviter de désassembler les parties de données d’un programme. Ces outils peuvent être utilisés par un pirate pour modifier le code et pénétrer dans un système informatique ou causer d’autres dommages.
La reverse engineering matérielle consiste à démonter un appareil pour en voir le fonctionnement. Par exemple, si un fabricant de processeurs veut voir comment fonctionne le processeur d’un concurrent, il peut acheter le processeur d’un concurrent, le désassembler, puis fabriquer un processeur similaire. Toutefois, ce procédé est illégal dans de nombreux pays. En général, la reverse engineering du matériel requiert beaucoup d’expertise et est assez coûteuse.
Un autre type de reverse engineering consiste à produire des images en 3D des pièces fabriquées lorsqu’un plan n’est pas disponible, afin de refabriquer la pièce. Pour réaliser la reverse engineering d’une pièce, celle-ci est mesurée par une machine de mesure des coordonnées (CMM). Pendant la mesure, une image filaire en 3D est générée et affichée sur un moniteur. Une fois la mesure terminée, l’image filaire est dimensionnée. Ces méthodes permettent de faire de la reverse engineering sur n’importe quelle pièce.
Le terme « forward engineering » est parfois utilisé par opposition à « reverse engineering ».