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
Virtuailor — Strumento IDAPython per la creazione automatica di tabelle virtuali C++ in IDA Pro | Kitploit
Strumenti/GitHubGitHub/0xgalz/virtuailor
Analisi StaticaAnalisi Dinamica (Sandboxing)Reverse EngineeringDebuggerAnalisi di Binari
GitHub0xgalz/virtuailor

Virtuailor

Strumento IDAPython per la creazione automatica di tabelle virtuali C++ in IDA Pro

Vedi Repository
1.4k13946 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

Virtuailor - Strumento IDAPython per la ricostruzione di vtable C++

Virtuailor è uno strumento IDAPython che ricostruisce le vtable per codice C++ scritto per architettura Intel, sia a 32 bit che a 64 bit, e AArch64 (Nuovo!). Lo strumento è composto da 2 parti, statica e dinamica.

La prima è la parte statica, che contiene le seguenti capacità:

  • Rileva le chiamate indirette.
  • Aggancia l'assegnazione di valore delle chiamate indirette utilizzando breakpoint condizionali (il codice hook).

La seconda è la parte dinamica, che contiene le seguenti capacità:

  • Crea strutture vtable.
  • Rinomina le funzioni e gli indirizzi delle vtable.
  • Aggiunge offset di struttura alle chiamate indirette nell'assembly.
  • Aggiunge xref dalle chiamate indirette alle loro funzioni virtuali (xref multipli).
  • Per AArch64: tenta di correggere vtable non definite e funzioni virtuali correlate (supporto per firmware).

Come si usa?

Virtuailor ora supporta le versioni di IDA dalla 7.0 fino alla più recente (7.5). Se stai usando una versione di IDA precedente alla 7.4, dovrai passare al branch beforeIDA-7.4; il branch master supporta la versione più recente disponibile (7.5).

  1. Di default Virtuailor cercherà le chiamate virtuali in TUTTI gli indirizzi del codice. Se vuoi limitare il codice solo a un intervallo di indirizzi specifico, nessun problema: modifica il file Main per aggiungere l'intervallo che vuoi targetizzare nelle variabili start_addr_range e end_addr_range:
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # Puoi cambiare l'intervallo di indirizzi delle chiamate virtuali
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. Opzionale, ma estremamente raccomandato: crea uno snapshot del tuo idb. Basta premere ctrl+shift+t e creare uno snapshot.

  2. Premi File->Run script... poi vai nella cartella di Virtuailor e scegli di eseguire Main.py. Puoi vedere la seguente gif per una spiegazione più chiara e visiva. Come si usa

Ora la GUI ti fornirà un'opzione per scegliere un intervallo da targetizzare; nel caso volessi targetizzare l'intero binario, premi OK con i valori predefiniti negli indirizzi di inizio e fine.

Successivamente, i breakpoint verranno posizionati nel tuo codice e tutto ciò che devi fare è eseguire il tuo codice con il debugger IDA, eseguire le azioni che desideri e osservare come la vtable viene costruita! Per AArch64 puoi impostare un server gdb remoto e fare debug usando il debugger IDA.

Nel caso non volessi/avessi più bisogno dei breakpoint, vai alla scheda dell'elenco breakpoint in IDA ed elimina i breakpoint come preferisci.

È anche molto importante per me notare che questa è la seconda versione dello strumento con supporto sia a 32 che a 64 bit e aarch64. Probabilmente in alcuni casi una piccola quantità di breakpoint verrà persa; in questi casi per favore apri un issue e contattami in modo che io possa migliorare il codice e aiutare a risolvere. Grazie in anticipo per questo :)

Output e Funzioni Generali

strutture vtable

Le strutture che Virtuailor crea dalla vtable utilizzata nelle chiamate virtuali che sono state colpite. Le funzioni della vtable vengono estratte dalla memoria in base al registro pertinente utilizzato nell'opcode del BP.

esempio vtable Poiché volevo creare una correlazione tra la struttura in IDA e le vtable nella sezione dati, il BP cambia il nome dell'indirizzo della vtable nella sezione dati con il nome della struttura. Come puoi vedere nell'immagine seguente: esempio vtable

Anche i nomi delle funzioni virtuali vengono cambiati, tranne in situazioni in cui i nomi non sono i nomi IDA predefiniti (funzioni con simboli o funzioni che l'utente ha cambiato). In questi casi i nomi delle funzioni rimarranno invariati e verranno anche aggiunti alla struttura vtable con il loro nome attuale.

I nomi scelti sono costruiti usando il seguente pattern:

  • vtable_
  • vfunc_ Il resto del nome è l'offset dall'inizio del Segmento, principalmente perché la maggior parte dei binari oggi sono PIE e PIC e quindi ASLR è attivo (invece di usare il nome completo dell'indirizzo, che è anche piuttosto lungo in ambienti a 64 bit). La struttura vtable ha anche un commento, "Was called from offset: XXXX", questo offset è l'offset dall'inizio del Segmento.

Aggiunta di Strutture all'Assembly

Dopo aver creato la vtable, Virtuailor aggiunge anche una connessione tra la struttura creata e l'assembly, come puoi vedere nelle immagini seguenti: BP dopo un'esecuzione, Esempio 2

P.S: L'offset di struttura utilizzato nel BP è rilevante solo per l'ultima chiamata effettuata. Per ottenere una comprensione migliore di tutte le chiamate virtuali effettuate, è stata aggiunta la funzionalità xref come spiegato nella prossima sezione

Xref alle funzioni virtuali

Quando si fa reverse engineering di C++ in modo statico, non è banale vedere chi ha chiamato chi, poiché la maggior parte delle chiamate sono chiamate indirette. Tuttavia, dopo aver eseguito Virtuailor, ogni funzione che è stata chiamata indirettamente ora ha un xref verso quelle posizioni.

La seguente gif mostra gli xref aggiunti con la loro chiamata di funzione indiretta:

xref

Presentazioni e lezioni passate

Lo strumento è stato presentato a RECon Brussels, Troopers e Warcon. La presentazione può essere trovata al seguente link: https://www.youtube.com/watch?v=Xk75TM7NmtA

Ringraziamenti

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

Licenza

Il plugin è concesso in licenza sotto la GNU GPL v3.

Scarica lo strumento