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
Virtuailor — Outil IDAPython pour créer automatiquement des tables virtuelles C++ dans IDA Pro | Kitploit
Outils/GitHubGitHub/0xgalz/virtuailor
Analyse StatiqueAnalyse Dynamique (Sandboxing)Rétro-ingénierieDébogueursAnalyse de Binaires
GitHub0xgalz/virtuailor

Virtuailor

Outil IDAPython pour créer automatiquement des tables virtuelles C++ dans IDA Pro

Voir le dépôt
1.4k139il 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

Virtuailor - Outil IDAPython pour la reconstruction des vtables C++

Virtuailor est un outil IDAPython qui reconstruit les vtables pour du code C++ écrit pour architecture Intel, aussi bien en 32 bits qu'en 64 bits, et pour AArch64 (Nouveau !). L'outil est composé de 2 parties, statique et dynamique.

La première est la partie statique, qui contient les fonctionnalités suivantes :

  • Détecte les appels indirects.
  • Intercepte l'affectation de valeur des appels indirects à l'aide de points d'arrêt conditionnels (le code d'accroche).

La seconde est la partie dynamique, qui contient les fonctionnalités suivantes :

  • Crée des structures de vtable.
  • Renomme les fonctions et les adresses de vtables.
  • Ajoute un décalage de structure aux appels indirects dans l'assembleur.
  • Ajoute des xref des appels indirects vers leurs fonctions virtuelles (xref multiples).
  • Pour AArch64 – tente de corriger les vtables non définies et les fonctions virtuelles associées (support du firmware).

Comment l'utiliser ?

Virtuailor supporte désormais les versions d'IDA de 7.0 à la plus récente (7.5). Si vous utilisez une version d'IDA antérieure à 7.4, vous devrez basculer sur la branche beforeIDA-7.4 ; la branche master supporte la version la plus récente (7.5).

  1. Par défaut, Virtuailor recherche les appels virtuels dans TOUTES les adresses du code. Si vous souhaitez limiter le code à une plage d'adresses spécifique, pas de problème : éditez simplement le fichier Main pour ajouter la plage souhaitée dans les variables start_addr_range et end_addr_range :
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # Vous pouvez modifier la plage d'adresses des appels virtuels
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. Facultatif (mais extrêmement recommandé) : créez un instantané de votre idb. Appuyez simplement sur Ctrl+Maj+T et créez un instantané.

  2. Allez dans Fichier -> Exécuter un script... puis naviguez vers le dossier Virtuailor et choisissez d'exécuter Main.py. Vous pouvez voir le gif suivant pour une explication plus claire et visuelle. How to use

Ensuite, l'interface graphique vous proposera de choisir une plage à cibler ; si vous souhaitez cibler l'intégralité du binaire, appuyez simplement sur OK avec les valeurs par défaut dans les adresses de début et de fin.

Ensuite, les points d'arrêt seront placés dans votre code et tout ce que vous avez à faire est d'exécuter votre code avec le débogueur d'IDA, d'effectuer les actions souhaitées et d'observer la construction des vtables ! Pour AArch64, vous pouvez configurer un serveur gdb distant et déboguer à l'aide du débogueur d'IDA.

Si vous ne souhaitez plus conserver les points d'arrêt, allez simplement dans l'onglet de la liste des points d'arrêt dans IDA et supprimez-les comme bon vous semble.

Il est également très important pour moi de noter qu'il s'agit de la deuxième version de l'outil avec le support 32 et 64 bits ainsi que aarch64 ; il est probable que dans certains cas, un petit nombre de points d'arrêt soient manqués. Dans ces cas, veuillez ouvrir un ticket et me contacter afin que je puisse améliorer le code et aider à le corriger. Merci d'avance pour cela :)

Sortie et fonctions générales

Structures de vtables

Les structures que Virtuailor crée à partir de la vtable utilisée dans l'appel virtuel qui a été atteint. Les fonctions de la vtable sont extraites de la mémoire en fonction du registre pertinent utilisé dans l'opcode du point d'arrêt.

vtable example Comme je souhaitais créer une corrélation entre la structure dans IDA et les vtables dans la section données, le point d'arrêt modifie le nom de l'adresse de la vtable dans la section données pour qu'il corresponde au nom de la structure. Comme vous pouvez le voir dans l'image suivante : vtable example

Les noms des fonctions virtuelles sont également modifiés, sauf dans les cas où les noms ne sont pas les noms par défaut d'IDA (fonctions avec symboles ou fonctions que l'utilisateur a renommées) ; dans ces cas, les noms de fonctions restent inchangés et sont également ajoutés à la structure de la vtable avec leur nom actuel.

Les noms choisis sont construits selon le modèle suivant :

  • vtable_
  • vfunc_ le reste du nom est soit un décalage depuis le début du segment, ceci principalement parce que la plupart des binaires modernes sont PIE et PIC et donc ASLR est appliqué (au lieu d'utiliser le nom complet de l'adresse, qui est également assez long sur les environnements 64 bits). La structure de la vtable porte également un commentaire : "Was called from offset: XXXX" (Appelée depuis le décalage : XXXX) ; ce décalage est celui depuis le début du segment.

Ajout de structures à l'assembleur

Après avoir créé la vtable, Virtuailor ajoute également une connexion entre la structure créée et l'assembleur, comme vous pouvez le voir dans les images suivantes : BP after an execution, Example 2

P.S. : Le décalage de structure utilisé dans le point d'arrêt n'est pertinent que pour le dernier appel effectué ; afin d'obtenir une meilleure compréhension de tous les appels virtuels effectués, la fonctionnalité de xref a été ajoutée comme expliqué dans la section suivante.

Xref vers les fonctions virtuelles

Lors du rétro-ingénierie statique en C++, il n'est pas trivial de voir qui appelle qui, car la plupart des appels sont des appels indirects. Cependant, après avoir exécuté Virtuailor, chaque fonction appelée indirectement possède désormais un xref vers ces emplacements.

Le gif suivant montre les Xref ajoutées avec leur appel de fonction indirect :

xref

Conférences et présentations antérieures

L'outil a été présenté à RECon Brussels, Troopers et Warcon. La présentation est disponible au lien suivant : https://www.youtube.com/watch?v=Xk75TM7NmtA

Remerciements

REcon Brussels, Troopers, Warcon crews, Nana, @tmr232, @matalaz, @oryandp, @talkain, @shiftreduce

Licence

Ce plugin est sous licence GNU GPL v3.

Télécharger l’outil