Signification et utilisations de la décompilation

En termes simples, la décompilation est l'inverse de la compilation: traduire un fichier exécutable dans un langage de niveau supérieur.

Supposons que vous perdiez la source de votre projet Delphi et que vous ne disposiez que du fichier exécutable: l'ingénierie inverse (décompilation) est utile si les sources d'origine ne sont pas disponibles.

Hm, "sources non disponibles", cela signifie-t-il que nous pouvons décompiler les projets Delphi d'autres personnes? Eh bien, oui et non ...

La vraie décompilation est-elle possible?

Non bien sûr que non. La décompilation entièrement automatisée n'est pas possible - aucun décompilateur ne pourrait reproduire exactement le code source d'origine.

Lorsqu'un projet Delphi est compilé et lié pour produire un fichier exécutable autonome, la plupart des noms utilisés dans le programme sont convertis en adresses. Cette perte de noms signifie qu'un décompilateur devrait créer des noms uniques pour toutes les constantes, variables, fonctions et procédures. Même si un certain degré de réussite est atteint, le "code source" généré manque de noms de variables et de fonctions significatifs.

instagram viewer

De toute évidence, la syntaxe du langage source n'existe plus dans l'exécutable. Il serait très difficile pour un décompilateur d'interpréter la série d'instructions en langage machine (ASM) qui existent dans un fichier exécutable et de décider quelle était l'instruction source d'origine.

Pourquoi et quand utiliser la décompilation

La rétro-ingénierie peut être utilisée pour plusieurs raisons, dont certaines:

  • Récupération du code source perdu
  • Migration d'applications vers une nouvelle plateforme matérielle
  • Détermination de l'existence de virus ou de code malveillant dans le programme
  • Correction d'erreurs lorsque le propriétaire de l'application n'est pas disponible pour effectuer la correction.
  • Récupération du code source de quelqu'un d'autre (pour déterminer un algorithme par exemple).

Est-ce légal?

L'ingénierie inverse ne se fissure PAS, bien qu'il soit parfois difficile de tracer la ligne fine entre ces deux. Les programmes informatiques sont protégés par les lois sur les droits d'auteur et les marques. Différents pays ont des exceptions différentes aux droits du titulaire du droit d'auteur. Les plus courants déclarent qu'il est correct de décompiler: à des fins d'interprétabilité lorsque la spécification d'interface n'a pas été rendue disponible, pour le fins de correction d'erreurs lorsque le titulaire du droit d'auteur n'est pas disponible pour effectuer la correction, pour déterminer les parties du programme qui ne sont pas protégées par droits d'auteur. Bien sûr, vous devez être très prudent / contacter votre avocat si vous avez un doute quant à la possibilité de démonter le fichier exe d'un programme.

Remarque: si vous cherchez des fissures Delphi, des générateurs de clés ou juste des numéros de série: vous êtes sur le mauvais site. Veuillez garder à l'esprit que tout ce que vous trouvez ici est écrit / présenté à des fins d'exploration / pédagogique uniquement.

Pour le moment, Borland ne propose aucun produit capable de décompiler un fichier exécutable (.exe) ou "l'unité compilée Delphi" (.dcu) en retour au code source d'origine (.pas).

Unité compilée Delphi (DCU)

Lorsqu'un projet Delphi est compilé ou exécuté, un fichier d'unité compilée (.pas) est créé. Par défaut, la version compilée de chaque unité est stockée dans un fichier au format binaire distinct portant le même nom que le fichier d'unité, mais avec l'extension .DCU. Par exemple, unit1.dcu contient le code et les données déclarés dans le fichier unit1.pas.

Cela signifie que si vous avez quelqu'un, par exemple, une source compilée de composants, tout ce que vous avez à faire est de l'inverser et d'obtenir le code. Faux. Le format de fichier DCU n'est pas documenté (format propriétaire) et peut changer d'une version à l'autre.

Après le compilateur: Delphi Reverse Engineering

Si vous souhaitez essayer de décompiler un fichier exécutable Delphi, voici certaines des choses que vous devez savoir:

Les fichiers source des programmes Delphi sont généralement stockés dans deux types de fichiers: les fichiers de code ASCII (.pas, .dpr) et les fichiers de ressources (.res, .rc, .dfm, .dcr). Les fichiers Dfm contiennent les détails (propriétés) des objets contenus dans un formulaire. Lors de la création un exe, Delphi copie les informations des fichiers .dfm dans le fichier de code .exe terminé. Les fichiers de formulaire décrivent chaque composant de votre formulaire, y compris les valeurs de toutes les propriétés persistantes. Chaque fois que nous changeons la position d'une fiche, la légende d'un bouton ou assignons une procédure événementielle à un composant, Delphi écrit ces modifications dans un fichier DFM (pas le code de la procédure événementielle - il est stocké dans le pas / dcu fichier). Afin d'obtenir le "dfm" du fichier exécutable, nous devons comprendre quel type de ressources sont stockées dans un exécutable Win32.

Tous les programmes compilés par Delphi ont les sections suivantes: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Les plus importantes du point de vue de la décompilation sont les sections CODE et .rsrc. Dans le "Ajout de fonctionnalités à un programme Delphi"Cet article présente des faits intéressants sur le format des exécutables Delphi, les informations de classe et les ressources DFM: comment réaffecter des événements à gérer par d'autres gestionnaires d'événements définis sous la même forme. Encore plus: comment ajouter votre propre gestionnaire d'événements, en ajoutant le code à l'exécutable, cela changera la légende d'un bouton.

Parmi de nombreux types de ressources stockées dans un fichier exe, le RT_RCDATA ou la ressource définie par l'application (données brutes) contient les informations qui étaient dans le fichier DFM avant la compilation. Afin d'extraire les données DFM d'un fichier exe, nous pouvons appeler le EnumResourceNames Fonction API... Pour plus d'informations sur l'extraction de DFM à partir d'un exécutable, consultez: Codage d'un explorateur DFM Delphi article.

L'art de la rétro-ingénierie a toujours été le pays des assistants techniques, familiarisés avec le langage d'assemblage et les débogueurs. Plusieurs décompilateurs Delphi sont apparus qui permettent à quiconque, même avec des connaissances techniques limitées, de désosser la plupart des fichiers exécutables Delphi.

Si vous êtes intéressé par les programmes Delphi de reverse engineering, je vous suggère de jeter un œil aux quelques "décompilateurs" suivants:

Un décompilateur de fichiers exécutables (EXE) et bibliothèques dynamiques (DLL), écrit en Delphi et exécuté dans l'environnement Windows32. L'objectif final du projet est le développement du programme capable de restaurer la majeure partie de Delphi initial codes sources à partir du fichier compilé mais IDR, ainsi que d'autres décompilateurs Delphi, ne peuvent pas encore le faire. Néanmoins, l'IDR est considérablement en mesure de faciliter ce processus. Par rapport à d'autres décompilateurs Delphi bien connus, le résultat de l'analyse IDR est le plus complet et le plus fiable.

Revendepro trouve presque toutes les structures (classes, types, procédures, etc.) dans le programme, et génère la représentation pascal, les procédures seront écrites en assembleur. En raison de certaines limitations de l'assembleur, la sortie générée ne peut pas être recompilée. La source de ce décompilateur est disponible gratuitement. Malheureusement, c'est le seul décompilateur que je n'ai pas pu utiliser - il invite à une exception lorsque vous essayez de décompiler un fichier exécutable Delphi.

EMS Source Rescuer est une application d'assistant facile à utiliser qui peut vous aider à restaurer votre code source perdu. Si vous perdez vos sources de projet Delphi ou C ++ Builder, mais avez un fichier exécutable, cet outil peut sauver une partie des sources perdues. Le sauveteur produit tous les formulaires de projet et modules de données avec toutes les propriétés et événements attribués. Les procédures événementielles produites n'ont pas de corps (ce n'est pas un décompilateur), mais ont une adresse de code dans un fichier exécutable. Dans la plupart des cas, le sauveteur économise 50 à 90% de votre temps pour projeter la restauration.

DeDe est un programme très rapide qui peut analyser les exécutables compilés avec Delphi. Après la décompilation, DeDe vous donne ce qui suit:

  • Tous les fichiers dfm de la cible. Vous pourrez les ouvrir et les modifier avec Delphi.
  • Toutes les méthodes publiées dans du code ASM bien commenté avec des références aux chaînes, aux appels de fonction importés, aux appels de méthodes de classe, aux composants de l'unité, aux blocs Try-Except et Try-Enfin. Par défaut, DeDe récupère uniquement les sources de méthodes publiées, mais vous pouvez également traiter une autre procédure dans un exécutable si vous connaissez le décalage RVA à l'aide de Outils | Démonter le menu Proc.
  • Beaucoup d'informations supplémentaires.
  • Vous pouvez créer un dossier de projet Delphi avec tous les fichiers dfm, pas, dpr. Remarque: les fichiers pas contiennent le code ASM mentionné ci-dessus bien commenté. Ils ne peuvent pas être recompilés!
instagram story viewer