Rétro-ingénierie
14575
31431669
2008-07-09T11:04:57Z
196.12.216.126
/* Rétro-ingénierie des objets physiques */
La '''rétro-ingénierie''' (traduction littérale de l'anglais ''reverse engineering''), également appelée '''rétroconception''', '''ingénierie inversée''' ou '''ingénierie inverse''', est l'activité qui consiste à étudier un objet pour en déterminer le fonctionnement interne ou sa méthode de fabrication.
Plusieurs objectifs peuvent être visés par cette analyse :
* comprendre le fonctionnement de cet objet, pour être en mesure de l'utiliser correctement ou de le modifier
* fabriquer une copie de cet objet alors qu'on ne peut en obtenir ni les plans ni les méthodes de fabrication (activité généralement illégale sur un plan juridique)
* créer un nouvel objet ayant des fonctionnalités identiques à l'objet de départ, sans violer de brevet
* analyser un objet produit par un concurrent, soit dans le cadre d'une activité de veille concurrentielle soit pour détecter de potentielles violations de brevets
Suivant la nature de l'objet et l'objectif, différentes méthodes et techniques sont utilisées. Pour des objets physiques, il est possible de démonter le système jusqu'à un certain point pour en analyser les constituants. En électronique et en informatique, la démarche peut être celle de l'étude d'une [[Boîte noire (informatique)|boîte noire]] : on isole l'objet à étudier, on détermine les entrées et les sorties actives. On essaie ensuite de déterminer la réponse du système en fonction des variations du ou des signaux en entrée.
== Brève histoire de la rétro-ingénierie ==
On trouve plusieurs exemples de rétro-ingénierie dans le domaine militaire. Par exemple, à la fin des années 1940, les Soviétiques ont construit le bombardier [[Tupolev Tu-4]], qui est en fait une copie du bombardier américain [[Boeing B-29 Superfortress]]. Cette copie a été réalisée par rétro-ingénierie de trois B-29 capturés après un atterrissage forcé en URSS.
{{...}}
== Rétro-ingénierie des objets physiques ==
Le principe de la rétroconception repose sur la prise d’un nuage de points issu de la surface de l’objet à scanner numériquement ou à palper mécaniquement.
Ce nuage de points est traité au travers des logiciels de reconstruction de surfaces permettant d’abord de construire un modèle polygonal (utilisé dans l’usinage,
la simulation et le prototypage rapide) et par la suite de générer une surface NURBS. Exporté vers un logiciel CAO, l’objet défini numériquement pourra être modifié,
analysé et adapté à son environnement et à son architecture interne.
Quelles sont les différentes raisons d’utiliser la rétroconception?
* La conception originale n’est pas supportée par une documentation suffisante ou adéquate.
* Le modèle original de CAO n'est pas suffisant pour soutenir des modifications et/ou les procédés de fabrication courante.
* Le fabricant original n'existe plus ou ne fabrique plus le produit, mais il y a des besoins pour le produit.
* Composants usés ou cassés pour lesquels il n'y a aucune source d'approvisionnement.
* Renforcement des fonctionnalités.
* Analyse des fonctionnalités des produits des concurrents.
* Amélioration de la performance et/ou les fonctionnalités de produit.
* Manque pièces additionnelles (pièces de rechange).
* Actualisation des matériaux désuets ou des processus de fabrication désuets.
== Rétro-ingénierie en électronique ==
{{...}}
== Rétro-ingénierie en 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 (informatique)|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]] [[Microsoft Windows|Windows]] sans avoir accès aux [[spécification technique|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 [[logiciel]]le est fréquemment appliquée aux [[structure de données|structures de données]] : il s'agit, dans ce cas de figure, d'effectuer une ''rétrodocumentation'' des structures de données physiques peu ou mal documentées ([[logiciel|applications]] vieillissantes). On essaie de reconstituer un [[Modèle entité-relation|modèle de données]] à partir des structures physiques des [[Fichier (informatique)|fichiers]] ou des [[Table (base de données)|tables]].
La rétro-ingénierie [[logiciel]]le fut popularisée avec le détournement des protections anticopie des [[jeu vidéo|jeux vidéo]]. Cette activité est appelée [[crack (informatique)|crack]]ing.
Pour écrire des pilotes pour certains périphériques (cybercaméra, scanneur…), les développeurs de logiciels libres se retrouvent souvent contraints à faire de la rétro-ingénierie sur le pilote en interceptant les échanges entre la puce et le pilote, découvrant ainsi comment dialoguer avec la puce. Il s'agit alors de simuler le pilote, puis de faire mieux (Cf. pilote Linux de cybercaméra spca, pwc, etc.). Un exemple est le projet [[Nouveau (informatique)|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 [[cryptanalyse|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és [[attaque par canaux auxiliaires|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 [[Usenet|groupe de discussion]] [[sci.crypt]]. L'algorithme [[Arcfour]] est d'ailleurs un clone de RC4.
=== 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 [[fichier binaire|fichiers binaires]] exécutables destinés à la plate-forme [[langage Java|Java]] peut se réaliser avec le programme [[ArgoUML]].
Pour les programmes .NET, Microsoft fournit en standard [http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cptutorials/html/IL_DASM_Tutorial.asp ILDASM], et il existe également des [http://www.program-transformation.org/Transform/DotNetDecompilers décompilateurs .NET] {{en}}
=== La rétro-ingénierie comme défense ===
* étude de binaire malicieux ([[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 la recherche de vulnérabilités dans les logiciels, afin d'améliorer leur sécurité
== La rétro-ingénierie comme activité de veille technologique ==
La rétro-ingénierie est aussi une activité de [[veille technologique]]. Elle est orientée vers :
* l'étude des produits concurrents,
* la compréhension des méthodes utilisées par le concurrent,
* la recherche des fournisseurs,
* la détermination des composants utilisés,
* l'estimation du coût de revient à partir de tout ou partie des informations précédentes,
* déceler de potentielles violations de brevets commises par un concurrent ou à éviter.
== Législation ==
=== [[France]] ===
Extrait de l'article L. 331-5 du [[Code de la propriété intellectuelle]] :
:Les '''mesures techniques''' ne doivent pas avoir pour effet d'empêcher la mise en œuvre effective de l''''[[interopérabilité]]''', dans le respect du droit d'auteur. Les fournisseurs de mesures techniques donnent l'accès aux informations essentielles à l'interopérabilité dans les conditions définies aux articles L. 331-6 et L. 331-7.
Extrait de l'article L. 331-7 du Code de la propriété intellectuelle :
:Tout éditeur de logiciel, tout fabricant de système technique et tout exploitant de service peut, en cas de refus d'accès aux informations essentielles à l'interopérabilité, demander à l'Autorité de régulation des mesures techniques de garantir l'interopérabilité des systèmes et des services existants, dans le respect des droits des parties, et d'obtenir du titulaire des droits sur la mesure technique les informations essentielles à cette interopérabilité.
Depuis [[2006]], le chapitre IV du Titre I du [[Droit d'auteur et droits voisins dans la société de l'information]] interdit le contournement des mesures technique de protection, en particulier la [[gestion des droits numériques]].
Extrait de l'article 13 du DADVSI :
:Les mesures techniques ne doivent pas avoir pour effet d'empêcher la mise en oeuvre effective de l'interopérabilité, dans le respect du droit d'auteur. Les fournisseurs de mesures techniques donnent l'accès aux informations essentielles à l'interopérabilité dans les conditions définies aux articles L. 331-6 et L. 331-7.
Extrait du nouvel article Art. L. 335-3-1 introduit l'article 22 du DADVSI :
:I. - Est puni de 3 750 EUR d'amende le fait de '''porter atteinte''' sciemment, à des fins autres que la recherche, '''à une mesure technique efficace''' telle que définie à l'article L. 331-5, afin d'altérer la protection d'une oeuvre par un décodage, un décryptage ou toute autre intervention personnelle destinée à contourner, neutraliser ou supprimer un mécanisme de protection ou de contrôle, (...)
:II. - Est puni de six mois d'emprisonnement et de 30 000 EUR d'amende le fait de '''procurer ou proposer''' sciemment à autrui, directement ou indirectement, des moyens conçus ou spécialement adaptés pour '''porter atteinte à une mesure technique efficace''' (...)
:(...)
:IV. - Ces dispositions '''ne sont pas applicables aux actes réalisés à des fins de recherche''' (...) ou '''de sécurité informatique''', dans les limites des droits prévus par le présent code.
=== [[États-Unis]] ===
Comme un [[brevet]] nécessite de publier l'[[Invention (technique)|invention]], on peut se passer de rétro-ingénierie pour étudier les éléments brevetés. L'une des principales motivations de la rétro-ingénierie est de déterminer si un produit concurrent viole un brevet ou des [[Droit d'auteur|droits d'auteur]].
Depuis [[1998]], le [[Digital Millennium Copyright Act]] interdit le contournement des mesures techniques de protection.
== Voir aussi ==
* Outils pour la rétro-ingénierie du logiciel : [[Décompilateur]], [[Désassembleur]], [[Débogueur]]
* Législation : [[Brevet]], [[Brevetabilité du logiciel]], [[Logiciel libre]]
* [[Interopérabilité]]
=== Liens externes ===
* [http://www.openrce.org OpenRCE: Un portail de rétro-ingénierie]
* [http://www.samba.org Site du projet Samba]
* [http://www.eclipse.org/gmt/modisco/ MoDisco: (Model Discovery), un projet Eclipse sur la rétro-ingénierie dirigée par les modèles]
* [http://argouml.tigris.org Site d'ArgoUML] : Permet la rétro-ingénierie de fichiers binaires exécutables [[langage Java|Java]]
* [http://www.reverse-engineering.net/ Reverse Code Engineering Community]
* [http://binary-reverser.org French Reverse Engineering Team]
* [http://www.labo-asso.com/ Ligue des Assoiffés de Bricolage sur Ordinateur].
{{Audit de sécurité informatique}}
{{Portail sécurité informatique}}
[[Catégorie:Ingénierie]]
[[Catégorie:Génie logiciel]]
[[Catégorie:Audit logiciel]]
[[ar:هندسة عكسية]]
[[ca:Enginyeria inversa]]
[[cs:Zpětné inženýrství]]
[[da:Reverse engineering]]
[[de:Reverse Engineering]]
[[en:Reverse engineering]]
[[es:Ingeniería inversa]]
[[fa:مهندسی معکوس (رایانه)]]
[[fi:Takaisinmallinnus]]
[[he:הנדסה הפוכה]]
[[it:Reingegnerizzazione]]
[[ja:リバースエンジニアリング]]
[[ko:리버스 엔지니어링]]
[[ml:റിവേഴ്സ് എഞ്ചിനീയറിംഗ്]]
[[ms:Kejuruteraan undur]]
[[nl:Reverse engineering]]
[[pl:Reverse engineering]]
[[pt:Engenharia reversa]]
[[ro:Inginerie inversă]]
[[ru:Обратная разработка]]
[[sv:Reverse engineering]]
[[th:วิศวกรรมผันกลับ]]
[[tr:Tersine mühendislik]]
[[uk:Зворотна розробка]]
[[vi:Kỹ nghệ đảo ngược]]
[[zh:逆向工程]]