Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
pythia — Un outil pour extraire les informations RTTI des exécutables Delphi, écrit en Python pur. | Kitploit
Outils/GitHubGitHub/nccgroup/pythia
Rétro-ingénierieAnalyse de MalwareAnalyse de Binaires
GitHubnccgroup/pythia

pythia

Un outil pour extraire les informations RTTI des exécutables Delphi, écrit en Python pur.

Voir le dépôt
247il y a 6 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Introduction / tl;dr

Cet outil analyse un fichier exécutable à la recherche de données Delphi, notamment les RTTI et les tables de fonctions virtuelles. Il génère un fichier JSON contenant des informations sur les classes et fonctions identifiées, pouvant être utilisé pour des analyses supplémentaires, par exemple :

  • Générer un arbre de classes.
  • Générer des noms et commentaires pour IDA.
  • Alimenter d'autres traitements, par exemple une décompilation automatique.

Un script IDAPython capable de charger la sortie dans IDA est fourni.

Ce script a été écrit pour compléter d'autres outils de rétro-ingénierie Delphi.

Auteur et licence

Publié en open source par NCC Group Plc - http://www.nccgroup.com/

Développé par David Cannings (@edeca) [email protected]

http://www.github.com/nccgroup/pythia

Ce projet est publié sous licence AGPL. Veuillez consulter le fichier LICENSE pour plus d'informations.

Comment ça fonctionne

Le flux de haut niveau est le suivant :

  • Charger un fichier PE et trouver les sections de code
  • Parcourir chaque section de code, 4 octets à la fois
  • Identifier les vftables potentielles et les valider
  • Extraire les noms de classes et les relations parentales
  • Identifier l'héritage des fonctions

Identification des vftables potentielles

Les vftables Delphi sont bien documentées. Les informations pour la dernière version sont disponibles auprès d'Embarcadero. Une documentation non officielle est disponible pour Delphi 2005 (voir ici).

Le code source de Free Pascal est également utile (miroir Github).

Le premier élément d'une vftable est vmtSelfPtr, qui pointe vers le début de la table de fonctions virtuelles. Le script parcourt chaque segment de code du fichier PE à la recherche de tout emplacement pointant vers l'avant de +0x4C octets. Notez que le compilateur Delphi aligne les vftables sur une limite de 4 octets (par souci d'optimisation).

Par exemple, l'adresse virtuelle (VA) 0x0046E1C8 contient l'offset 0x0046E214, qui est 0x4C en avant de l'emplacement actuel. Comme le montre IDA :

root@kitploit:~
.text:0046E1C8                   ; Classes::TComponent *vftable_TDCP_misty1
.text:0046E1C8 14 E2 46 00       vftable_TDCP_misty1 dd offset off_46E214

Cette approche peut générer des faux positifs ; par conséquent, les autres champs de la vftable sont vérifiés pour des valeurs plausibles. Par exemple, le vmtInstanceSize est vérifié pour s'assurer qu'il n'est pas excessif, et les pointeurs de fonctions sont vérifiés pour s'assurer qu'ils se trouvent dans une section exécutable. Lors des tests, le taux de faux positifs était très faible, malgré la méthode de recherche par force brute.

Héritage

Chaque fonction trouvée dans une vftable est vérifiée pour déterminer si elle est héritée du parent ou surchargée. Delphi ne prend pas en charge l'héritage multiple, ce qui permet de déterminer cela en comparant le pointeur dans la vftable parente au même offset.

Si les deux pointeurs référencent la même fonction, elle est héritée. Si l'enfant a un pointeur différent, alors elle a été surchargée.

Exemple de sortie

La sortie principale de l'outil est un fichier JSON qui peut être injecté dans des traitements ou outils ultérieurs. Cependant, quelques autres formats de sortie sont inclus.

Sortie en arbre

Utilisez l'option --save-tree pour générer un fichier comme :

root@kitploit:~
TObject (at 0x0040112c)
|-- Exception (at 0x004081f8)
|   |-- EAbort (at 0x00408260)
|   |-- EAbstractError (at 0x00408ad4)
|   |-- EAssertionFailed (at 0x00408a74)
|   |-- EBcdException (at 0x004bd110)
|   |   +-- EBcdOverflowException (at 0x004bd16c)
|   |-- EBitsError (at 0x0041ab04)
|   |-- EComponentError (at 0x0041abbc)
|   |-- EConvertError (at 0x00408850)
|   |-- EDCP_cipher (at 0x0046a0ac)
|   |   +-- EDCP_blockcipher (at 0x0046a29c)
|   |-- EDCP_hash (at 0x00469f20)
.. etc ..

Objectifs futurs

  • Identifier la version de Delphi (par exemple à partir de la ressource PACKAGEINFO ou DVCLAL) et ajuster l'analyse en fonction des différentes dispositions de vftable.
  • Analyser davantage d'informations de classe, par exemple les propriétés (un élément spécifique à Delphi) et les tables de méthodes.
  • Analyser les informations RTTI de Delphi (vmtTypeInfo dans la vftable).
  • Désassembler le code avec Capstone et identifier les appels virtuels (par exemple, faire correspondre call [ecx+3Fh] à une méthode d'instance).

Mises en garde

  • Testé uniquement sur du code 32 bits pour le moment. Veuillez m'envoyer des échantillons 64 bits.
  • Ne prend en charge que les fichiers PE Windows (Delphi compile également vers d'autres formats).
  • Non conçu pour être un décompilateur Delphi complet. Utilisez DeDe / IDR / Hex-Rays.
  • Utile uniquement avec les binaires Delphi qui utilisent des objets (ce n'est pas le cas de tous).
  • Delphi moderne utilise des noms comme TComparer<System.Bindings.EvalProtocol.TPair<System.IInterface,System.Pointer>> qui sont assez indéchiffrables dans IDA.

Veuillez m'envoyer des exemples de binaires sur lesquels cet outil ne fonctionne pas, afin qu'il puisse être amélioré.

Télécharger l’outil