# Décompilateur

Un décompilateur est un outil servant à reconstituer, partiellement ou totalement, le code source d’un logiciel à partir d’un programme exécutable alors dans un format binaire.

## Utilisation

La décompilation est une technique de rétro-ingénierie ou d'ingénierie inverse. Elle peut servir au portage et à l'adaptation d'une application dont le code source n'est pas disponible, à la réalisation de l'interopérabilité, à la traduction, à l'analyse et la vérification du fonctionnement d'un programme, et encore au débogage du programme.
Le principe du décompilateur est donc d'étudier ou tester le fonctionnement de ce logiciel afin de déterminer les idées et principes qui sont à la base de n'importe quel élément du logiciel lorsqu'on effectue toute opération de chargement, d'affichage, d'exécution, de transmission ou de stockage du logiciel.
Les logiciels dont le code source est disponible ne nécessitent pas l'utilisation d'un décompilateur.
La décompilation est un problème difficile, et d'un strict point de vue théorique, impossible. La décompilation correspond à la fonction réciproque de la fonction de compilation (généralement) d'un langage de haut niveau vers un langage machine. Le problème de la décompilation est de pouvoir associer un code machine à une forme sémantiquement équivalente dans un langage de haut niveau. L'impossibilité mathématique du problème dépend du langage choisi. Dans le langage assembleur des machines x86, on dispose d'une instruction permettant de décider si un dépassement de tampon s'est produit. En langage C dans lequel on a retiré les appels assembleur, il est impossible d'avoir une instruction équivalente. Il faudrait alors écrire un code spécifique mais cela revient alors à changer le fonctionnement du programme.
Pour la plupart des langages de programmation, il est cependant possible de retrouver un certain nombre d'informations sur le code source initial à partir du code compilé. La décompilation est un outil assisté d'aide à la rétro-ingénierie. Un décompilateur fonctionnant de manière entièrement automatique n'est pas réalisable.

## Technique

Un décompilateur est un compilateur fonctionnant à l'envers. Il analyse (parse) le binaire, dans un premier temps. Il doit également transformer les instructions de saut conditionnel en éléments de programmation structurée switch, while et for. La dernière étape consiste à écrire les fichiers de source.
Le code est toutefois généralement peu lisible, car il ne suit plus les règles appliquées en développement logiciel, les commentaires d'origine sont en particulier manquants, et il est quasiment impossible de retrouver si une variable fait partie d'une structure ou bien est une donnée unitaire.

## Contraintes légales

La décompilation est généralement explicitement non autorisée par la licence d'utilisation de certains logiciels propriétaires. Elle est parfois interdite par des lois, dans certains pays. Dans certains cas, le recours à la rétro-ingénierie est autorisé dans un but d'interopérabilité.

### Ce qu'en dit la loi française

Chapitre II : Droits patrimoniaux
Article L122-6
(Loi nº 94-361 du 10 mai 1994 art. 4 Journal Officiel du 11 mai 1994)
    Sous réserve des dispositions de l'article L. 122-6-1, le droit d'exploitation appartenant à l'auteur d'un logiciel comprend le droit d'effectuer et d'autoriser :
       1º La reproduction permanente ou provisoire d'un logiciel en tout ou partie par tout moyen et sous toute forme. Dans la mesure où le chargement, l'affichage, l'exécution, la transmission ou le stockage de ce logiciel nécessitent une reproduction, ces actes ne sont possibles qu'avec l'autorisation de l'auteur ;
       2º La traduction, l'adaptation, l'arrangement ou toute autre modification d'un logiciel et la reproduction du logiciel en résultant ;
       3º La mise sur le marché à titre onéreux ou gratuit, y compris la location, du ou des exemplaires d'un logiciel par tout procédé. Toutefois, la première vente d'un exemplaire d'un logiciel dans le territoire d'un État membre de la Communauté européenne ou d'un État partie à l'accord sur l'Espace économique européen par l'auteur ou avec son consentement épuise le droit de mise sur le marché de cet exemplaire dans tous les États membres à l'exception du droit d'autoriser la location ultérieure d'un exemplaire.
Article L122-6-1
(inséré par Loi nº 94-361 du 10 mai 1994 art. 5 I Journal Officiel du 11 mai 1994)
    I. Les actes prévus aux 1º et 2º de l'article L. 122-6 ne sont pas soumis à l'autorisation de l'auteur lorsqu'ils sont nécessaires pour permettre l'utilisation du logiciel, conformément à sa destination, par la personne ayant le droit de l'utiliser, y compris pour corriger des erreurs.
    Toutefois, l'auteur est habilité à se réserver par contrat le droit de corriger les erreurs et de déterminer les modalités particulières auxquelles seront soumis les actes prévus aux 1º et 2º de l'article L. 122-6, nécessaires pour permettre l'utilisation du logiciel, conformément à sa destination, par la personne ayant le droit de l'utiliser.
    II. La personne ayant le droit d'utiliser le logiciel peut faire une copie de sauvegarde lorsque celle-ci est nécessaire pour préserver l'utilisation du logiciel.
    III. La personne ayant le droit d'utiliser le logiciel peut sans l'autorisation de l'auteur observer, étudier ou tester le fonctionnement de ce logiciel afin de déterminer les idées et principes qui sont à la base de n'importe quel élément du logiciel lorsqu'elle effectue toute opération de chargement, d'affichage, d'exécution, de transmission ou de stockage du logiciel qu'elle est en droit d'effectuer.
    IV. La reproduction du code du logiciel ou la traduction de la forme de ce code n'est pas soumise à l'autorisation de l'auteur lorsque la reproduction ou la traduction au sens du 1º ou du 2º de l'article L. 122-6 est indispensable pour obtenir les informations nécessaires à l'interopérabilité d'un logiciel créé de façon indépendante avec d'autres logiciels, sous réserve que soient réunies les conditions suivantes :
       1º Ces actes sont accomplis par la personne ayant le droit d'utiliser un exemplaire du logiciel ou pour son compte par une personne habilitée à cette fin ;
       2º Les informations nécessaires à l'interopérabilité n'ont pas déjà été rendues facilement et rapidement accessibles aux personnes mentionnées au 1º ci-dessus ;
       3º Et ces actes sont limités aux parties du logiciel d'origine nécessaires à cette interopérabilité.
    Les informations ainsi obtenues ne peuvent être :
       1º Ni utilisées à des fins autres que la réalisation de l'interopérabilité du logiciel créé de façon indépendante ;
       2º Ni communiquées à des tiers sauf si cela est nécessaire à l'interopérabilité du logiciel créé de façon indépendante ;
       3º 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.
    V. 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.
    Toute stipulation contraire aux dispositions prévues aux II, III et IV du présent article est nulle et non avenue.