L’ingénierie inverse consiste à démonter un objet pour voir comment il fonctionne afin de le dupliquer ou de l’améliorer. Cette pratique, tirée d’industries plus anciennes, est maintenant fréquemment utilisée pour le matériel et les logiciels informatiques. La rétroingénierie 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 énoncés de langage de programme.
L’ingénierie inverse de logiciels est effectuée pour retrouver le code source d’un programme parce que celui-ci a été perdu, pour étudier comment 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 un programme écrit pour être utilisé avec un microprocesseur pour être utilisé avec un autre. L’ingénierie inverse 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 spécifiquement l’ingénierie inverse.
Une personne faisant de l’ingénierie inverse 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 (qui est plus facile à lire qu’un format binaire). En connaissant les modèles de bits qui représentent les instructions du processeur ainsi que la longueur des instructions, l’ingénieur inverse 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, c’est pourquoi un débogueur est utilisé, ce qui permet au désassembleur d’éviter de désassembler les parties données d’un programme. Ces outils pourraient être utilisés par un pirate pour modifier et pénétrer dans un système informatique ou causer d’autres dommages.
L’ingénierie inverse du matériel consiste à démonter un dispositif pour voir comment il fonctionne. Par exemple, si un fabricant de processeurs veut voir comment fonctionne le processeur d’un concurrent, il peut acheter le processeur de ce dernier, le démonter, puis fabriquer un processeur similaire. Toutefois, ce procédé est illégal dans de nombreux pays. En général, la rétro-ingénierie matérielle nécessite une grande expertise et est assez coûteuse.
Un autre type de rétro-ingénierie consiste à produire des images en 3D de pièces fabriquées lorsqu’un plan n’est pas disponible afin de refabriquer la pièce. Pour faire de l’ingénierie inverse, une pièce est mesurée par une machine à mesurer tridimensionnelle (MMT). Au fur et à mesure qu’elle est mesurée, une image en 3D est générée et affichée sur un moniteur. Une fois la mesure terminée, l’image est dimensionnée. N’importe quelle pièce peut être rétroconçue à l’aide de ces méthodes.
Le terme d’ingénierie prévisionnelle est parfois utilisé par opposition à l’ingénierie inverse.
La rétroconception est une technique qui permet de réduire les coûts et d’améliorer la qualité.