Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
pythia — Uno strumento per estrarre informazioni RTTI da eseguibili Delphi, scritto in puro Python | Kitploit
Strumenti/GitHubGitHub/nccgroup/pythia
Reverse EngineeringAnalisi MalwareAnalisi di Binari
GitHubnccgroup/pythia

pythia

Uno strumento per estrarre informazioni RTTI da eseguibili Delphi, scritto in puro Python

Vedi Repository
2476 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Introduzione / tl;dr

Questo strumento analizza un file eseguibile per individuare dati Delphi, incluse le tabelle RTTI e le tabelle delle funzioni virtuali. Produce un file JSON con informazioni su classi e funzioni identificate, che può essere usato per analisi aggiuntive, ad esempio:

  • Generare un albero delle classi.
  • Generare nomi e commenti per IDA.
  • Passare il risultato a ulteriori elaborazioni, ad esempio decompilazione automatica.

È incluso uno script IDAPython in grado di caricare l'output in IDA.

Lo script è stato scritto per integrare altri strumenti di reverse engineering di Delphi.

Autore e licenza

Rilasciato come open source da NCC Group Plc - http://www.nccgroup.com/

Sviluppato da David Cannings (@edeca) [email protected]

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

Questo progetto è rilasciato sotto licenza AGPL. Consultare LICENSE per maggiori informazioni.

Come funziona

Il flusso di alto livello è:

  • Caricare un file PE e trovare le sezioni di codice
  • Scansionare ogni sezione di codice 4 byte alla volta
  • Identificare potenziali vftable e validarle
  • Estrarre il nome della classe e le relazioni con la classe padre
  • Identificare l'ereditarietà delle funzioni

Identificazione delle potenziali vftable

Le vftable di Delphi sono ben documentate. Le informazioni per la versione più recente sono disponibili presso Embarcadero. La documentazione non ufficiale è disponibile per Delphi 2005 (vedi qui).

Anche il codice sorgente di Free Pascal è utile (mirror Github).

Il primo elemento in una vftable è vmtSelfPtr, che punta all'inizio della tabella delle funzioni virtuali. Lo script esegue la scansione di ogni segmento di codice nel file PE per trovare qualsiasi posizione che punti avanti di +0x4C byte. Si noti che il compilatore Delphi allinea le vftable a un limite di 4 byte (per ottimizzazione).

Ad esempio, il seguente VA 0x0046E1C8 contiene l'offset 0x0046E214, che è 0x4C avanti rispetto alla posizione corrente. Come mostrato in IDA:

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

Questo approccio può generare falsi positivi, pertanto gli altri campi nella vftable vengono controllati per verificare che abbiano valori plausibili. Ad esempio vmtInstanceSize viene verificato per assicurarsi che non sia eccessivo e i puntatori a funzione vengono controllati per verificare che si trovino in una sezione eseguibile. Durante i test il tasso di falsi positivi è stato molto basso, nonostante il metodo di ricerca a forza bruta.

Ereditarietà

Ogni funzione trovata in una vftable viene controllata per determinare se è ereditata dal genitore o sovrascritta. Delphi non supporta l'ereditarietà multipla, quindi questo può essere ottenuto controllando il puntatore nella vftable del genitore con lo stesso offset.

Se entrambi i puntatori fanno riferimento alla stessa funzione, questa è ereditata. Se il figlio ha un puntatore diverso, allora la funzione è stata sovrascritta.

Esempio di output

L'output principale dello strumento è un file JSON che può essere passato a successive elaborazioni / strumenti. Tuttavia, sono inclusi anche alcuni altri formati di output.

Output ad albero

Usare l'opzione --save-tree per generare un file come:

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

Obiettivi futuri

  • Identificare la versione di Delphi (ad esempio dalla risorsa PACKAGEINFO o DVCLAL) e adattare la scansione ai diversi layout delle vftable.
  • Analizzare più informazioni sulle classi, ad esempio proprietà (un elemento specifico di Delphi) e tabelle dei metodi
  • Analizzare le informazioni RTTI di Delphi (vmtTypeInfo nella vftable)
  • Disassemblare il codice con Capstone e identificare le chiamate virtuali (ad esempio associare call [ecx+3Fh] a un metodo di istanza)

Avvertenze

  • Al momento testato solo su codice a 32 bit. Inviate per favore campioni a 64 bit.
  • Supporta solo file PE di Windows (Delphi compila anche verso altri formati).
  • Non è progettato per essere un decompilatore Delphi completo. Usare DeDe / IDR / Hex-Rays.
  • Utile solo con binari Delphi che usano oggetti (non tutti lo fanno).
  • Delphi moderno usa nomi come TComparer<System.Bindings.EvalProtocol.TPair<System.IInterface,System.Pointer>> che sono piuttosto indecifrabili in IDA.

Inviate per favore esempi di binari in cui questo strumento non funziona, così può essere migliorato.

Scarica lo strumento