Le reverse engineering d’un logiciel

Au départ, la rétro-ingénierie s’appliquait à la construction mécanique. Aujourd’hui, avec les technologies de scan 3D, la tomographie informatisée, le contrôle par ultrasons et autres techniques, nous sommes en mesure de collecter de précieuses informations sur le fonctionnement d’une machine ou d’un appareil mécanique. De son côté, l’ingénierie a pour but de concevoir et d’assembler les différents composants d’un produit pour en faire un appareil fonctionnel. Le reverse engineering (ingénierie inversée) retourne quant à lui tout le processus.

L’ingénierie inversée a pour but de cerner le fonctionnement des différents composants d’un système pour comprendre le fonctionnement de l’ensemble. C’est la raison pour laquelle on applique parfois cette technique sur les produits de ses concurrents. On se donne ainsi les chances d’améliorer son propre produit et de l’adapter pour le rendre plus compétitif sur le marché. Le reverse engineering est utilisé dans toutes sortes d’autres contextes, et ne se limite pas à du matériel. Comment et pourquoi pratique-t-on le reverse engineering sur des logiciels ?

Le développement inversé d’un logiciel

Le reverse engineering du code permet aux analystes programmeurs d’inverser les processus de développement et de production d’un logiciel et ainsi découvrir ce qui passe dans les coulisses d’un programme. La déconstruction et le développement inversé d’un logiciel vous permettent d’accéder au code-source d’une application. Une fois que son code est compris, le logiciel devient un livre ouvert, accessible à tous les experts. Il est alors possible de comprendre l’architecture du programme, son mode de fonctionnement et sa structure interne, pour ensuite le modifier ou le réutiliser en partie. Les informations que vous procure le développement inversé d’un logiciel sur ses processus, permettent de corriger des erreurs de programmation. Dans le domaine des logiciels, on utilise avant tout le reverse engineering pour développer de nouveaux produits, pour identifier des bugs ou pour analyser les produits des concurrents.

Définition: Ingénierie inversée

Désigne l’activité qui consiste à analyser la structure d’un produit existant - ici celle d’un logiciel. Pour ce faire, le produit est mis à plat pour permettre de comprendre sa structure et son fonctionnement. L’objectif du reverse engineering dans le secteur des logiciels, est de décompiler le code d’un logiciel existant. Cela permet d’optimiser un logiciel, d’en corriger des erreurs de fonctionnement, d’analyser des programmes concurrents, et même de concevoir de nouveaux produits.

Les processus du reverse engineering d’un logiciel

On utilise le reverse engineering autant pour analyser des produits industriels que pour la reconstruction d’un logiciel. La reconstruction de logiciel est généralement composée d’un des trois processus suivants :

  • L’accès au code-source du logiciel
  • La compréhension des règles qui régissent le protocole de communication
  • La création ultérieure d’un nouveau modèle

La restauration du code-source d’un logiciel

On entend par code-source le texte rédigé dans un langage de programmation pour développer un logiciel. L’ordinateur traduit ce texte parfaitement lisible par des hommes dans un langage-machine qu’il comprend lui-même. Pour accéder au code-source d'un logiciel, il faut donc inverser le processus de traduction de votre machine. Pour ce faire, on va par exemple utiliser un décompilateur. Il s’agit d’un logiciel capable de reconstituer un texte-source lisible à partir d’un code-machine binaire. Ce processus, consistant à traduire un code machine binaire en un texte lisible par les hommes se fait alors automatiquement.

Si le code binaire n’est pas reconstruisible, on peut recourir à un désassembleur. Ce type de programme permet de transformer le langage machine codé de façon binaire en un langage assembleur, lisible par les hommes. Celui-ci pourra être analysé de façon manuelle. Dans la plupart des cas, les programmeurs ne réussissent pas à reconstituer l’intégralité du code source. En principe, ce n’est pas trop grave, car le but du reverse engineering est de pouvoir percevoir l’idée du programme, et pas vraiment de pouvoir recopier le code source dans son ensemble. Même avec des codes partiels, il est possible de réaliser des analyses dynamiques de programmes ou de corriger certains bugs. Ce sont avant tout les analystes-programmeurs qui utilisent des décompilateurs et des désassembleurs.

Comprendre les règles qui régissent un protocole de communication

Le reverse engineering est également utilisé par les programmeurs devant développer par exemple des pilotes pour des systèmes d’exploitation, dont la structure et le mode de fonctionnement sont confidentiels et non-documentés. Au moyen d’un sniffer (renifleur), il est possible d’accéder aux règles qui régissent un protocole de communication. Le sniffer est un utilitaire qui permet d’analyser les flux de données au sein d’un réseau. Un tel utilitaire va par exemple constater les particularités dans les échanges de données entre deux appareils. Analyser ces modes de communication permet aux programmeurs de comprendre les règles qui définissent le protocole en question.

Créer ultérieurement un nouveau modèle à partir du logiciel

Dans un tel cas de figure, on parle de restauration de code plutôt que de reverse engineering. On modifie alors le code source d’un logiciel et on le reporte dans un nouveau modèle, où il sera traité et retravaillé. De cette manière il est possible de créer, de compléter et de documenter certains éléments de logiciels avec le Langage de Modélisation Unifié UML.

Quand utilise-t-on le reverse engineering pour les logiciels ?

On peut utiliser le reverse engineering de code de programmation dans toutes sortes de domaines, et à des fins diverses :

  • Pour gérer et contrôler la qualité de son propre logiciel et ses fonctionnalités
  • Pour poursuivre le développement de son propre logiciel
  • Pour analyser des protocoles de communication réseau
  • Pour détecter des virus, des chevaux de Troie, des logiciels de chantage et autres programmes malveillants
  • Pour le portage ou l’entretien d’un abandonware (logiciel abandonné)
  • Pour identifier des erreurs dans un logiciel
  • Analyse générale du format d’un fichier pour en comprendre la structure
  • Amélioration de compatibilités logicielles avec des plateformes et des logiciels de prestataires tiers
  • Utilisation de fonctions non-documentées d’une plateforme

Par ailleurs, on peut recourir à un reverse engineering de logiciel pour analyser les produits des concurrents. Bien qu’un bon nombre d’entreprises interdisent le reverse engineering de leurs produits, le stipulant dans les conditions de licence, l’analyse de protocoles n’est pas soumise à des restrictions juridiques. C’est notamment lié au fait que le logiciel n’est pas soumis à l’analyse au moyen d’outils de reverse engineering. De telles clauses contractuelles sont d’ailleurs illégales dans un bon nombre de pays. Les utilisateurs d’un logiciel ont généralement le droit de soumettre le logiciel à un reverse engineering pour vérifier le caractère sécurisé du logiciel et pour corriger d’éventuels bugs.

Le développement inversé d’un logiciel permet aux programmeurs et aux développeurs de mieux comprendre le fonctionnement des applications numériques. Il facilite aussi la correction des erreurs de programmation et vous apporte de précieuses informations quand vous développez votre propre logiciel.

Pour afficher cette vidéo, des cookies de tiers sont nécessaires. Vous pouvez consulter et modifier vos paramètres de cookies ici.