Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Virtuailor — Herramienta IDAPython para crear tablas virtuales C++ automáticas en IDA Pro | Kitploit
Herramientas/GitHubGitHub/0xgalz/virtuailor
Análisis EstáticoAnálisis Dinámico (Sandboxing)Ingeniería InversaDepuradoresAnálisis de Binarios
GitHub0xgalz/virtuailor

Virtuailor

Herramienta IDAPython para crear tablas virtuales C++ automáticas en IDA Pro

Ver Repositorio
1.4k139hace 6 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Virtuailor - Herramienta IDAPython para reconstrucción de vtables de C++

Virtuailor es una herramienta IDAPython que reconstruye vtables para código C++ escrito para arquitectura Intel, tanto código de 32 bits como de 64 bits y AArch64 (¡Nuevo!). La herramienta se compone de 2 partes, estática y dinámica.

La primera es la parte estática, que contiene las siguientes capacidades:

  • Detecta llamadas indirectas.
  • Engancha la asignación de valores de las llamadas indirectas usando puntos de interrupción condicionales (el código de enganche).

La segunda es la parte dinámica, que contiene las siguientes capacidades:

  • Crea estructuras vtable.
  • Renombra funciones y direcciones de vtables.
  • Añade offset de estructura a las llamadas indirectas en el ensamblador.
  • Añade xref desde llamadas indirectas a sus funciones virtuales (múltiples xrefs).
  • Para AArch64: intenta corregir vtables indefinidas y funciones virtuales relacionadas (soporte para firmware).

¿Cómo usar?

Virtuailor ahora soporta versiones de IDA desde 7.0 hasta la versión más reciente (7.5), si estás usando versiones de IDA anteriores a 7.4 necesitarás cambiar a la rama beforeIDA-7.4, la rama master soporta la versión más reciente disponible (7.5).

  1. Por defecto, Virtuailor buscará llamadas virtuales en TODAS las direcciones del código. Si quieres limitar el código solo a un rango de direcciones específico, no hay problema, solo edita el archivo Main para añadir el rango que deseas en las variables start_addr_range y end_addr_range:
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # You can change the virtual calls address range
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. Opcional (pero extremadamente recomendado), crea una instantánea de tu idb. Simplemente presiona ctrl+shift+t y crea una instantánea.

  2. Presiona File->Run script... luego ve a la carpeta Virtuailor y elige ejecutar Main.py. Puedes ver el siguiente gif para una explicación más clara y visual. How to use

Ahora la GUI te ofrecerá una opción para elegir un rango a apuntar; en caso de que quieras apuntar a todo el binario, solo presiona OK con los valores predeterminados en las direcciones de inicio y fin.

Después, los puntos de interrupción se colocarán en tu código y todo lo que tienes que hacer es ejecutar tu código con el depurador de IDA, realiza las acciones que desees y observa cómo se construyen las vtables. Para AArch64 puedes configurar un servidor gdb remoto y depurar usando el depurador de IDA.

En caso de que ya no quieras/necesites los puntos de interrupción, solo ve a la pestaña de lista de puntos de interrupción en IDA y elimínalos como prefieras.

También es muy importante para mí señalar que esta es la segunda versión de la herramienta con soporte tanto para 32 como para 64 bits y aarch64, probablemente en algunos casos se perderá una pequeña cantidad de puntos de interrupción, en esos casos por favor abre un issue y contáctame para que pueda mejorar el código y ayudar a solucionarlo. Gracias de antemano por eso :)

Salida y Funciones Generales

estructuras vtable

Las estructuras que Virtuailor crea a partir de la vtable utilizada en la llamada virtual que fue alcanzada. Las funciones vtable se extraen de la memoria basándose en el registro relevante que se utilizó en el código de operación del BP.

vtable example Como quería crear una correlación entre la estructura en IDA y las vtables en la sección de datos, el BP cambia el nombre de la dirección de la vtable en la sección de datos al nombre de la estructura. Como puedes ver en la siguiente imagen: vtable example

Los nombres de las funciones virtuales también se cambian, excepto en situaciones donde los nombres no son los nombres predeterminados de IDA (funciones con símbolos o funciones que el usuario cambió); en esos casos los nombres de las funciones se mantendrán igual y también se añadirán a la estructura vtable con su nombre actual.

Los nombres elegidos se construyen usando el siguiente patrón:

  • vtable_
  • vfunc_ el resto del nombre es el desplazamiento desde el inicio del Segmento, esto se debe principalmente a que la mayoría de los binarios hoy en día son PIE y PIC y, por lo tanto, se aplica ASLR (en lugar de usar el nombre de dirección completo, que también es bastante largo en entornos de 64 bits). La estructura vtable también tiene un comentario, "Fue llamado desde el offset: XXXX", este offset es el desplazamiento desde el inicio del Segmento.

Añadiendo Estructuras al Ensamblador

Después de crear la vtable, Virtuailor también añade una conexión entre la estructura creada y el ensamblador, como puedes ver en las siguientes imágenes: BP after an execution, Example 2

P.D.: El offset de estructura utilizado en el BP solo es relevante para la última llamada que se realizó; para obtener una mejor comprensión de todas las llamadas virtuales que se realizaron, se añadió la funcionalidad de xref como se explica en la siguiente sección

Xref a funciones virtuales

Cuando se revierte C++ estáticamente, no es trivial ver quién llamó a quién, esto se debe a que la mayoría de las llamadas son indirectas; sin embargo, después de ejecutar Virtuailor, cada función que fue llamada indirectamente ahora tiene un xref a esas ubicaciones.

El siguiente gif muestra los Xref añadidos con su llamada a función indirecta:

xref

Charlas y conferencias anteriores

La herramienta fue presentada en RECon Bruselas, Troopers y Warcon. La presentación se puede encontrar en el siguiente enlace: https://www.youtube.com/watch?v=Xk75TM7NmtA

Agradecimientos

Equipos de REcon Bruselas, Troopers, Warcon, Nana, @tmr232, @matalaz, @oryandp, @talkain, @shiftreduce

Licencia

El plugin está licenciado bajo la licencia GNU GPL v3.

Descargar herramienta