Décompiler

Définition, exemples et bonnes pratiques

À retenir

  • C'est le processus inverse de la compilation (Binaire vers Source).
  • Le résultat est souvent plus complexe à lire que le code d'origine.
  • C'est un outil indispensable pour l'audit de sécurité et l'interopérabilité.

Décompiler consiste à transformer un programme informatique déjà prêt à l'emploi (que seule la machine comprend) pour tenter de retrouver son code source d'origine, lisible par un être humain. C'est un peu comme essayer de retrouver la recette complète d'un gâteau à partir du plat fini que l'on vient de goûter.

Étymologie

Le mot est formé du préfixe dé-, marquant l'action inverse, et du verbe compiler. C'est un calque du terme anglais decompile. Il est apparu avec le besoin d'analyser des logiciels dont le code source original n'était pas disponible ou avait été perdu.

Exemples d'usage

  • Utiliser un outil pour lire les instructions à l'intérieur d'une application Android afin de comprendre comment elle gère les données.
  • Tenter de restaurer le code d'un vieux logiciel dont l'entreprise créatrice a disparu et dont on ne possède plus que les fichiers d'installation.

Cas d'usage

La décompilation intervient principalement en cybersécurité pour analyser des virus (malwares) et comprendre leur fonctionnement. Elle est aussi utilisée pour la rétro-ingénierie, afin de rendre des logiciels compatibles entre eux ou pour corriger des bugs sur des systèmes très anciens dont on a perdu les sources.

Bonnes pratiques

Il est important de savoir que le code décompilé n'est jamais une copie exacte de l'original : les commentaires explicatifs et souvent les noms des variables ont disparu. Sur le plan légal, la décompilation est strictement encadrée par le droit de la propriété intellectuelle et les contrats de licence.

Synonymes

rétro-ingénierie désassembler (proche)

Antonymes

compiler

Conseil

Pour bien comprendre le concept, essayez de décompiler un petit programme que vous avez vous-même écrit dans un langage comme Java. Vous verrez alors la différence entre votre code propre et la version brute générée par l'outil de décompilation.

Questions fréquentes

Le code obtenu est-il identique à celui écrit par le programmeur ?

Non, la décompilation produit une approximation fonctionnelle. Les noms de variables originaux et les commentaires sont généralement perdus lors de la compilation.

Est-ce légal de décompiler un logiciel ?

Cela dépend du pays et de l'usage (par exemple, c'est parfois autorisé pour l'interopérabilité), mais c'est souvent interdit par les licences commerciales des logiciels propriétaires.

Quels langages sont les plus faciles à décompiler ?

Les langages comme Java, C# ou Android (Dalvik/ART) se décompilent assez bien. Le C ou le C++ sont beaucoup plus difficiles car ils sont traduits directement en langage machine très brut.