Menu

Comprendre et utiliser le reverse engineering

Temps de lecture : 6min

 

Le reverse engineering, ou rétro-ingénierie, est une discipline fascinante et puissante utilisée pour analyser et comprendre le fonctionnement interne de logiciels sans accès à leur code source.

Bien que ce ne soit pas mon domaine principal, je pratique cette technique occasionnellement. Je vais donc vous partager les bases, les outils disponibles et un cas concret de son application.

 

Pourquoi faire du Reverse Engineering ?

Le reverse engineering est souvent utilisé pour des raisons de sécurité, par exemple pour vérifier qu'un programme fait exactement ce qu'il est censé faire ou ce pourquoi nous l’avons acheté et qu'il ne contient pas de vulnérabilités et/ou Backdoor.

Vous pourriez aussi avoir besoin d'analyser un programme inconnu

  •  Soit parce que vous ne savez pas ce que c'est (ex : exécutable sans code source...)
  •  Soit parce que vous pensez qu'il pourrait être malveillant et éviter ainsi de l'exécuter directement. (Et si c’était un malware...)

Cette technique a notamment été utilisée pour découvrir les failles exploitées par des virus célèbres comme Stuxnet.

 Dans le monde professionnel, le reverse engineering peut également être utilisé pour des applications non sécuritaires, comme la maintenance et la mise à jour de logiciels anciens dont le code source a été perdu. Cela peut impliquer de décompiler des binaires, analyser leur fonctionnement et reconstruire des fonctionnalités dans un environnement moderne.

🚨Attention 🚨Le reverse engineering et l’analyse de code sont des activités chronophages. Ainsi, il peut être pertinent de définir une stratégie d’analyse permettant d’avoir une idée d’ensemble des fonctionnalités liées à ce code et ainsi valider son utilisation sans devoir l’analyser en totalité.

 

Les Bases du Reverse Engineering

Le reverse engineering, ou rétro-ingénierie, vise à analyser un programme compilé.
Le principal défi est que les fichiers binaires, qui constituent les programmes compilés, sont illisibles sans contexte. La rétro-ingénierie consiste donc à décompiler le code pour le transformer en un format plus compréhensible, comme l'assembleur, puis éventuellement en code source dans des langages de programmation modernes comme le C ou le Java.

Du code binaire illisible ... ... au code post compilation

 

Les Méthodes de Reverse Engineering

La décompilation commence souvent par la conversion du binaire en assembleur. Cependant, l'assembleur, bien que plus lisible que le binaire, reste complexe et difficile à gérer pour de grands programmes. Pour faciliter cette tâche, nous essayons souvent de remonter au code source.

Différents langages de programmation ont des spécificités qui influencent le processus de décompilation. Par exemple, le bytecode Java se décompile plus facilement que le code C, qui passe par une phase d'assemblage avant d'être transformé en binaire. Connaître le langage d'origine aide à accélérer le processus.

 

Les Outils de Reverse Engineering

IDA Pro
IDA Pro est l'outil standard de l'industrie pour le reverse engineering. Il est extrêmement puissant et offre de nombreuses fonctionnalités comme la génération d'assembleur bien organisé et des diagrammes de flux de programme pour visualiser les blocs de code et les conditions. Cependant, IDA Pro est également très cher, avec des licences allant de 365 € par an à plusieurs milliers d'euros.
GHIDRA
Développé par la NSA et rendu public en 2019, Ghidra est une alternative gratuite à IDA Pro. Il supporte des projets collaboratifs et offre une interface pour lire et reconstruire le code de manière efficace. Bien que Ghidra ait quelques défauts d'interface, il reste une option très solide et accessible.
Autres outils
Binary Ninja  Un outil basé sur l'utilisation de plugins, apparu en 2015.
Radare2  Contenu de la cellule
JEB  Contenu de la cellule

 

Cas Concret : Analyse d'un Programme Mystérieux

Récemment, j'ai été confronté à un programme inconnu sur une machine Linux. Personne n’a été en mesure de me fournir d’information sur ce dernier. 

C’est là que le reverse engineering rentre en piste. Pour cela, j’ai opté pour Ghidra.

 

Préparation

 

  • Isolation : J'ai isolé le programme dans une machine virtuelle sans connexion réseau pour éviter tout risque de contamination en cas de virus.
  • Analyse préliminaire : J'ai utilisé des outils comme file pour vérifier le type de fichier et confirmé qu'il s'agissait d'un programme ELF 32 bits.


 

Décompilation

Ensuite, j'ai utilisé Ghidra qui a transformé le binaire en assembleur, puis en code C.

 

Ghidra - Assembleur
Ghidra -Assembleur

 

Ghidra - Code post compilation

 

Après avoir analysé les différentes lignes, renommé les variables de ce code, j'ai pu comprendre que le programme n'était pas malveillant mais simplement un utilitaire anciennement utilisé pour éditer des segments de mémoire. Cette analyse approfondie a permis de déterminer que le programme n'était pas une menace.

 

La Rétro-Ingénierie dans les Jeux Vidéo

La rétro-ingénierie trouve également des applications fascinantes dans le domaine des jeux vidéo. Les passionnés de jeux utilisent cette technique pour créer des mods, déverrouiller des fonctionnalités cachées, ou même porter des jeux sur des plateformes non supportées. Par exemple, des jeux conçus initialement pour des consoles spécifiques peuvent être portés sur PC grâce au reverse engineering. Cela implique de comprendre le fonctionnement interne du jeu, de réécrire certains composants pour les adapter à une nouvelle architecture matérielle et de s'assurer que le jeu fonctionne correctement dans ce nouvel environnement.

 

La Légalité et l'Éthique du Reverse Engineering

Il est important de mentionner les aspects légaux et éthiques du reverse engineering. La rétro-ingénierie peut parfois violer des accords de licence ou des droits d'auteur, surtout lorsqu'elle est utilisée pour contourner des mesures de protection contre la copie ou pour créer des produits concurrents. Elle peut ainsi enfreindre les droits de propriété intellectuelle, notamment lorsqu'elle implique le décryptage de logiciels. Dans certains pays, des lois comme le Digital Millennium Copyright Act (DMCA) aux États-Unis interdisent certaines formes de reverse engineering, sauf à des fins spécifiques comme l'interopérabilité. Les ingénieurs doivent donc être conscients des réglementations locales et s'assurer qu'ils ne violent pas la loi.

 

Le Futur du Reverse Engineering

Avec l'évolution rapide de la technologie, le reverse engineering continuera de jouer un rôle crucial. L'Internet des objets (IoT), l'intelligence artificielle (IA) et les nouvelles architectures de processeurs posent de nouveaux défis et offrent de nouvelles opportunités pour les experts en rétro-ingénierie. Les compétences en reverse engineering seront de plus en plus demandées pour comprendre et sécuriser ces technologies émergentes.

 

Conclusion

Le reverse engineering est une discipline complexe mais essentielle, particulièrement en sécurité informatique. Les outils disponibles permettent de découvrir des vulnérabilités, analyser des virus sans les exécuter, et comprendre des programmes sans code source. Néanmoins, l'ingéniosité et la perspicacité des ingénieurs restent au cœur de cette pratique fascinante et indispensable pour protéger et sécuriser les systèmes informatiques.

Que vous soyez convaincu ou non de vous lancer dans la rétro-ingénierie, j'espère que cet aperçu vous aura fourni une compréhension de base et des ressources pour commencer. Le domaine est vaste et en constante évolution, offrant de nombreuses opportunités d'apprentissage et de développement de compétences. Qu'il s'agisse de sécuriser des systèmes, de maintenir des logiciels anciens, ou de découvrir les secrets des jeux vidéo, le reverse engineering est une aventure intellectuelle passionnante.

 


Références

 

Retour aux articles

C'est à lire...