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
pythia — Una herramienta para extraer información RTTI de ejecutables de Delphi, escrita en Python puro. | Kitploit
Herramientas/GitHubGitHub/nccgroup/pythia
Ingeniería InversaAnálisis de MalwareAnálisis de Binarios
GitHubnccgroup/pythia

pythia

Una herramienta para extraer información RTTI de ejecutables de Delphi, escrita en Python puro.

Ver Repositorio
2473hace 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

Introducción / tl;dr

Esta herramienta escanea un archivo ejecutable en busca de datos de Delphi, incluyendo RTTI y tablas de funciones virtuales. Genera un archivo JSON con información sobre las clases y funciones identificadas, que puede utilizarse para análisis adicionales, por ejemplo:

  • Generar un árbol de clases.
  • Generar nombres y comentarios para IDA.
  • Alimentar procesos posteriores, p. ej. descompilación automática.

Se incluye un script de IDAPython que puede cargar la salida en IDA.

El script fue escrito para complementar otras herramientas de ingeniería inversa de Delphi.

Autor y licencia

Publicado como código abierto por NCC Group Plc - http://www.nccgroup.com/

Desarrollado por David Cannings (@edeca) [email protected]

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

Este proyecto se publica bajo la licencia AGPL. Consulta LICENSE para más información.

Cómo funciona

El flujo de alto nivel es:

  • Cargar un archivo PE y encontrar las secciones de código
  • Escanear cada sección de código de 4 bytes a la vez
  • Identificar posibles vftables y validarlas
  • Extraer el nombre de la clase y las relaciones con el padre
  • Identificar la herencia de funciones

Identificando posibles vftables

Las vftables de Delphi están bien documentadas. La información para la última versión está disponible en Embarcadero. Documentación no oficial está disponible para Delphi 2005 (ver aquí).

El código fuente de Free Pascal también es útil (espejo de Github).

El primer elemento de una vftable es vmtSelfPtr, que apunta al inicio de la tabla de funciones virtuales. El script escanea cada segmento de código en el archivo PE en busca de cualquier ubicación que apunte hacia adelante +0x4C bytes. Ten en cuenta que el compilador de Delphi alinea las vftables a un límite de 4 bytes (para optimización).

Por ejemplo, la siguiente VA 0x0046E1C8 contiene el offset 0x0046E214, que está 0x4C por delante de la ubicación actual. Como se muestra en IDA:

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

Este enfoque puede generar falsos positivos, por lo que se comprueban otros campos de la vftable en busca de valores razonables. Por ejemplo, se verifica que vmtInstanceSize no sea excesivo y que los punteros a función se encuentren en una sección ejecutable. Durante las pruebas, la tasa de falsos positivos fue muy baja, a pesar del método de búsqueda por fuerza bruta.

Herencia

Cada función encontrada en una vftable se comprueba para ver si se hereda del padre o está sobrescrita. Delphi no admite herencia múltiple, por lo que esto se puede lograr comprobando el puntero en la vftable del padre con el mismo offset.

Si ambos punteros hacen referencia a la misma función, se hereda. Si el hijo tiene un puntero diferente, entonces está sobrescrita.

Ejemplo de salida

La salida principal de la herramienta es un archivo JSON que puede introducirse en procesos / herramientas posteriores. Sin embargo, se incluyen algunos otros formatos de salida.

Salida de árbol

Usa la opción --save-tree para generar un archivo como:

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 ..

Objetivos futuros

  • Identificar la versión de Delphi (p. ej. a partir del recurso PACKAGEINFO o DVCLAL) y ajustar el escaneo para diferentes formatos de vftable.
  • Analizar más información de la clase, p. ej. propiedades (un elemento específico de Delphi) y tablas de métodos
  • Analizar la información RTTI de Delphi (vmtTypeInfo en la vftable)
  • Desensamblar código con Capstone e identificar llamadas virtuales (p. ej. hacer coincidir call [ecx+3Fh] con un método de instancia)

Advertencias

  • Solo probado con código de 32 bits por ahora. Por favor, envíame muestras de 64 bits.
  • Solo admite archivos PE de Windows (Delphi puede compilar a otros formatos).
  • No está diseñado para ser un descompilador completo de Delphi. Usa DeDe / IDR / Hex-Rays.
  • Solo es útil con binarios de Delphi que usan objetos (no todos lo hacen).
  • El Delphi moderno usa nombres como TComparer<System.Bindings.EvalProtocol.TPair<System.IInterface,System.Pointer>> que son bastante indescifrables en IDA.

Por favor, envíame ejemplos de binarios donde esta herramienta no funcione, para que pueda mejorarse.

Descargar herramienta