La rétro-ingénierie (aussi connue sous les noms d’ingénierie inversée ou de rétro-conception, est une méthode qui tente d'expliquer, par déduction et analyse systémique, comment un mécanisme, un dispositif, un système ou un programme existant accomplit une tâche, sans connaissance précise de la manière dont il fonctionne. La rétro-ingénierie s'applique notamment dans les domaines de l'ingénierie mécanique, informatique, électronique, chimique, biologique et dans celui du design. Le terme équivalent en anglais est (ou ).
Objectifs Bien qu'il soit généralement question d'expliquer le fonctionnement d'un produit ou d'un système lorsqu'il n'existe pas ou peu de documentation, les objectifs de la rétro-ingénierie sont variés : ils peuvent concerner la vérification du bon fonctionnement d'un objet Marie-Hélène Durand, « Les standards et la prise en compte des COTS : comment se concilient l’utilisation des COTS et les normes actuelles ? », Laboratoire d'analyse et d'architecture des systèmes (LAAS)., la création ou l'amélioration d'un objet, l'identification des vulnérabilités et failles de sécurité dans un logiciel ou un système ou encore de la modification d'un produit ou un logiciel pour l'adapter à des besoins spécifiques (cf. interopérabilité en informatique).
La rétro-ingénierie est également utile dans un cadre purement éducatif, où à l'inverse de l'usage qui commencerait par la théorie pour ensuite aborder la pratique, l'éducation via des cas de rétro-ingénierie aborde la théorie par la pratique, où les étudiants tentent de déterminer les mécanismes qui expliquent le comportement et le fonctionnement d'un objet qu'ils étudient en pratique, pour ensuite expliquer la théorie par l'exemple qu'ils viennent d'aborder.
En biologie et génie génétique, la rétro-ingénierie peut s'avérer utile dans la compréhension des comportements et des mécanismes d'une ou plusieurs espèces données, éventuellement pour s'en inspirer et innover dans d'autres domaines plus technique (voir biomimétique).
Dans le cadre d'une activité de veille concurrentielle, l'analyse d'objet produit par un concurrent grâce à la rétro-ingénierie peut s'avérer utile pour déceler et comprendre ses innovations, dans le but de les reproduire, de détecter d'éventuelles violations de brevets.
En archéologieStricot, M. (2015). Préservation et archéologie des médias : importance de la rétro ingénierie dans la reconstruction archéologique d'œuvres d'art à composante technologique. (et en archéologie industrielleHervy, B., Laroche, F., Kerouanton, J. L., & Bernard, A. (2012). Projet Nantes1900: les nouvelles technologies au service de la capitalisation des connaissances et de la valorisation du patrimoine historique.), la rétro-ingénierie est utilisé pour comprendre le fonctionnement et l'utilité d'un objet technique ancien, ou d'une œuvre d'art présentant des aspects techniques, et dans le cadre de la restauration d’œuvres, comprendre les techniques anciennes pour mieux les reproduireGeindreau, R. (2016, January). Étude préalable à la restauration d'un objet technico-scientifique contemporain. Le générateur Cockcroft-Walton de l’Institut de Physique Nucléaire de Lyon. In CeROArt. Conservation, exposition, Restauration d'Objets d'Art (No. 5). CeROArt asbl..
Suivant la nature de l'objet et l'objectif poursuivi, il existe plusieurs méthodes et techniques : Pour des objets physiques, il est possible de démonter le système jusqu'à un certain point pour en analyser les composants ; En électronique et en informatique, la démarche peut être celle de l'étude d'une boîte opaque : l'objet à étudier est isolé, les entrées et les sorties actives sont déterminées ; la réponse du système en fonction des variations du signal ou des signaux en entrée est ensuite déterminée ; Certains outils de rétro-ingénierie peuvent être utilisés pour analyser des systèmes complexes tels le web ou l'une de ses partiesLammari, N. (2008). Méthode de rétro-ingénierie pour l'analyse des sites Web (Doctoral dissertation, CEDRIC Lab/CNAM). ; En biomimétique, où il s'agit de comprendre le fonctionnement d'êtres vivants ou d'écosystèmes, un large éventail d'outils d'imagerie, de biomarqueurs et bioindicateurs, d'analyse biomoléculaire et jusqu'à l'observation éthologique peuvent être mobilisés. La rétro-ingénierie est aussi une activité de veille technologique.
Usages Design d'objet en 3D vignette|La rétro-conception.
Circuit imprimé
Elle consiste à reconstituer un schéma électronique fonctionnel en analysant les connexions d'une puce ou d'un circuit imprimé ou le dessin des masques d'un circuit intégré. On peut aussi, sur certains dispositifs informatisés récupérer le code assembleur de leur firmware. Le code source est alors élaboré à partir de l'image mémoire de ces composants. On parle alors de désassemblage. Il est parfois possible de dialoguer avec un objet via des liaisons laissées à la discrétion du boîtier (interfaces sérielles, JTAG, ICSP…).
Informatique
La rétro-ingénierie s'applique aussi au logiciel. Ceci peut être réalisé en utilisant des outils d'analyse comme le désassembleur ou le décompilateur. Les méthodes employées sont similaires à celle du débogage.
Le projet Samba est un exemple typique de rétro-ingénierie. L'équipe a dû déterminer le fonctionnement du partage de ressources en réseau du système d'exploitation Microsoft Windows sans avoir accès aux spécifications techniques officielles. Ils ont donc dû les déterminer puis les traduire sous forme d'un programme informatique. Il en va de même pour le système de fichier NTFS.
La rétro-ingénierie logicielle est fréquemment appliquée aux structures de données : il s'agit, dans ce cas, d'effectuer une documentation des structures de données physiques peu ou mal documentées (applications vieillissantes). On essaie de reconstituer un modèle de données à partir des structures physiques des fichiers ou des tables.
La rétro-ingénierie logicielle fut popularisée avec le détournement des protections anticopie des jeux vidéo. Cette activité est appelée cracking.
Pour écrire des pilotes pour certains périphériques (webcam, scanner, etc.), les développeurs de logiciels libres se retrouvent souvent contraints à faire de la rétro-ingénierie sur un pilote propriétaire fourni par le constructeur en interceptant les échanges entre la puce et le pilote, découvrant ainsi comment dialoguer avec la puce. L'objectif est d'améliorer la sécurité (par la connaissance de ce que fait précisément le logiciel, et en s'assurant de l'absence de vulnérabilités) et la portabilité du pilote (sur des environnements pour lesquels le pilote fourni par le constructeur n'est pas prévu). Il s'agit alors de simuler le pilote, puis de reproduire son fonctionnement (cf. pilote Linux de webcam spca, pwc, etc.). Un exemple est le projet Nouveau visant à produire des pilotes 3D libres pour les cartes graphiques NVIDIA ou radeonHD, projet similaire pour les cartes graphiques ATI Radeon HD.
En cryptographie, la rétro-ingénierie prend plusieurs formes avec des attaques cryptanalytiques. Le but est d'extraire des informations secrètes depuis la « boîte noire » symbolisant la procédure de chiffrement. Ces types d'attaques sont nommées attaques par canaux auxiliaires. On pense que la rétro-ingénierie est aussi à l'origine de la fuite des algorithmes RC2 et RC4 qui furent diffusés sur Internet via le groupe de discussion sci.crypt. L'algorithme Arcfour est d'ailleurs un clone de RC4.
Légalité De nombreux éditeurs de logiciels propriétaires incluent dans leurs CLUF des clauses interdisant la rétro-ingénierie. Cependant dans de nombreux pays la rétro-ingénierie est autorisée par la loi, notamment à des fins d'interopérabilité. Dans ces pays, les clauses de ces CLUF ne sont pas valables, ou tout au plus dans les limites déterminées par la loi.
En France, la loi pose un cadre légal restrictif à la rétro-ingénierie, pour laquelle des exceptions spécifiques sont définies dans l'article L122-6-1 du code de la propriété intellectuelle, ce cadre étant partiellement issu du droit européen .
Programmes en langages intermédiaires Les langages de programmation semi-compilés (compilé en un code binaire interprété par une machine virtuelle) tels que Java et .NET rendent la rétro-ingénierie plus aisée.
Ainsi, la rétro-ingénierie de fichiers binaires exécutables destinés à la plate-forme Java peut se réaliser avec le programme ArgoUML.
Pour les programmes .NET, Microsoft fournit en standard ILDASM., et il existe également des décompilateurs .NET « », ..
La rétro-ingénierie comme défense Étude de binaire malicieux (exemple : rootkit) dans le cadre d'une attaque informatique. Étude de virus informatique pour l'amélioration d'un antivirus ou en vue d'apporter un moyen d'éradication. Étude et recherche de vulnérabilités dans les logiciels, afin d'améliorer leur sécurité.
Législation Les activités de rétro-ingénieries sont généralement légales lorsque la possession de l'objet ou du produit est licite. Concernant la rétro-ingénierie des programmes informatiques, elle est souvent légale pour permettre l'interopérabilité, c'est-à-dire la capacité de logiciels ou de protocoles différents à fonctionner ensemble.
France
Dispositions relatives à la traduction de la forme de code d'un logiciel (directives 91/250/CEE et 2009/24/CE)
Description de la loi La Directive 91/250/CEE du Conseil, du , concernant la protection juridique des programmes d'ordinateur porte un Article 6, Décompilation qui sera plus tard transposé en majeure partie dans les articles L122-6 et L122-6-1 du code de la propriété intellectuelle, par la Loi n° 94-361 du portant mise en œuvre de la directive (C. E. E.) n° 91-250 du Conseil des communautés européennes en date du concernant la protection juridique des programmes d'ordinateur et modifiant le code de la propriété intellectuelle portant mise en oeuvre de la directive (C. E. E.) n° 91-250 du Conseil des communautés européennes en date du 14 mai 1991 concernant la protection juridique des programmes d'ordinateur et modifiant le code de la propriété intellectuelle.
L'article L122-6 spécifie que traduire la forme du code d'un logiciel fait partie du droit d'exploitation appartenant à l'auteur d'un logiciel (dont, comme l'indique l'article L335-3 du même code, la violation par autrui est assimilable à un délit de contrefaçon), et n'est pas possible, sans autorisation et d'une façon qui ne soit pas opposable par contrat, par autrui, sauf dans le cas explicité par l'article L122-6-1 du code de la propriété intellectuelle, spécifiant un certain nombre de conditions, y compris que « ces actes [soient] limités aux parties du logiciel d'origine nécessaires à » « l'interopérabilité d'un logiciel créé de façon indépendante avec d'autres logiciels », sans que « Les informations ainsi obtenues [ne soient] » « utilisées à des fins autres que la réalisation de l'interopérabilité du logiciel créé de façon indépendante », « Ni communiquées à des tiers sauf si cela est nécessaire à l'interopérabilité du logiciel créé de façon indépendante », « Ni utilisées pour la mise au point, la production ou la commercialisation d'un logiciel dont l'expression est substantiellement similaire ou pour tout autre acte portant atteinte au droit d'auteur », tout en rappelant que « Le présent article ne saurait être interprété comme permettant de porter atteinte à l'exploitation normale du logiciel ou de causer un préjudice injustifié aux intérêts légitimes de l'auteur ».