Section 2 Ingénierie inverse Delphi
Actuellement, Borland ne fournit aucun produit permettant de décompiler les fichiers exécutables (.exe) ou les « fichiers compilés Delphi » (.dcu) en code de programme brut (.pas).
Unité compilée Delphi : DCU ( Unité compilée Delphi : DCU )
Lorsqu'un projet Delphi est compilé ou exécuté, un fichier d'unité de compilation (.dcu) est généré. Par défaut, la version compilée de chaque unité est stockée dans un fichier binaire distinct. Le nom du fichier est le même que celui du fichier de l'unité et son extension est .DCU. Par exemple : le fichier unit1.dcu contient le code et les données déclarées dans le fichier unit1.pas.
Cela signifie que si vous disposez d'une ressource, comme un composant compilé, tout ce que vous avez à faire est de la décompiler et d'obtenir le code source. Faux, le format de fichier DCU n'est pas documenté (format propriétaire) et il peut changer de version en version.
Après le compilateur : Delphi Reverse Engineering
Si vous essayez de décompiler un exécutable Delphi, vous devez savoir certaines choses :
Les fichiers du programme source 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 des détails (propriétés) des objets contenus dans le formulaire. Lors de la création d'un fichier exécutable, Delphi copie les informations du fichier .dfm dans le fichier de code .exe terminé. Le fichier de formulaire décrit chaque composant du formulaire, y compris toutes les valeurs de propriétés stables. Chaque fois que nous modifions la position d'un formulaire, le titre d'un bouton ou attribuons une procédure événementielle à un composant, Delphi enregistre ces modifications dans le fichier DFM (et non le code de la procédure événementielle : il est stocké dans le fichier pas/dcu). . Afin d'obtenir « dfm » à partir d'un exécutable, nous devons comprendre quel type de ressources sont stockées dans l'exécutable Win32.
Tous les programmes compilés par Delphi comportent les parties suivantes : CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Du point de vue de la décompilation, les parties les plus importantes sont : CODE, .rsrc. Dans l'article "Ajout de fonctionnalités à un programme Delphi" ("Ajout de fonctionnalités à un programme Delphi") (ajout du traducteur : les uns après les autres), quelques éléments intéressants sur le format exécutable Delphi, les informations sur les classes et les ressources DFM sont abordés : Comment attribuer des événements à d'autres gestionnaires d'événements définis dans le même formulaire. Comment ajouter votre propre gestionnaire d'événements pour ajouter du code au fichier exécutable pour changer le titre du bouton.
Parmi les différents types de ressources stockées dans le fichier .exe, les ressources RT_RCDATA ou définies par l'application (données brutes) possèdent les informations contenues dans le fichier DFM avant compilation. Afin de sélectionner des données DFM à partir d'un fichier .exe, nous pouvons appeler la fonction API EnumResourceNames... Pour plus d'informations sur la sélection de données DFM à partir d'un fichier .exe, veuillez vous référer à : « Codage d'un explorateur Delphi DFM » (« Écrire un Détecteur Delphi DFM"). (Traducteur ajouté : Traduit l'un après l'autre)