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
tenet — Un Esploratore di Tracce per Reverse Engineers | Kitploit
Strumenti/GitHubGitHub/gaasedelen/tenet
Analisi Dinamica (Sandboxing)Reverse EngineeringDebuggerAnalisi di Binari
GitHubgaasedelen/tenet

tenet

Un Esploratore di Tracce per Reverse Engineers

Vedi Repository
1.5k1694 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

Tenet - Un Esploratore di Tracce per Reverse Engineers

Tenet Esploratore di Tracce

Panoramica

Tenet è un plugin per IDA Pro per esplorare tracce di esecuzione. L'obiettivo di questo plugin è fornire controlli più naturali e umani per navigare tracce di esecuzione rispetto a un dato binario. Questo lavoro nasce dal desiderio di ricercare metodi nuovi o innovativi per esaminare e distillare pattern di esecuzione complessi nel software.

Per ulteriori informazioni su questo progetto, leggi il post sul blog relativo al suo rilascio iniziale.

Un ringraziamento speciale a QIRA / geohot et al. per l'ispirazione.

Versioni

  • v0.2 -- Rilevamento dell'immagine base, visualizzazione delle celle, refactoring dei breakpoint, correzioni di bug.
  • v0.1 -- Rilascio iniziale

Installazione

Tenet è un plugin Python 3 multipiattaforma (Windows, macOS, Linux). Non richiede dipendenze di terze parti, rendendo il codice sia portabile che facile da installare.

  1. Dalla console Python del tuo disassemblatore, esegui il seguente comando per trovare la directory dei plugin:

    • IDA Pro: import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")
  2. Copia il contenuto della cartella /plugins/ di questo repository nella directory indicata.

  3. Riavvia il tuo disassemblatore.

Questo plugin è supportato solo per IDA 7.5 e versioni successive.

Utilizzo

Una volta installato correttamente, apparirà una nuova voce di menu nel disassemblatore. Può essere utilizzata per caricare tracce di esecuzione raccolte esternamente in Tenet.

Carica traccia Tenet

Poiché questo è il primo rilascio, Tenet accetta solo tracce di testo semplici e leggibili. Consulta il readme sul tracing in questo repository per ulteriori informazioni sul formato delle tracce, limitazioni e tracer di riferimento.

Esplorazione Bidirezionale

Durante l'uso di Tenet, il plugin "dipingerà" tracce per indicare il flusso di esecuzione in avanti (blu) e all'indietro (rosso) rispetto alla posizione corrente nella traccia attiva.

Tracce Tenet

Per passare avanti o indietro nel tempo, è sufficiente scorrere mentre si passa sopra la timeline sul lato destro del disassemblatore. Per saltare le chiamate di funzione, tieni premuto SHIFT durante lo scorrimento.

Cronologia della Traccia

La timeline della traccia sarà ancorata sul lato destro del disassemblatore. Questo widget viene utilizzato per visualizzare diversi tipi di eventi lungo la timeline e per eseguire la navigazione di base come descritto sopra.

Zoom sulla timeline della traccia

Cliccando e trascinando sulla timeline, è possibile zoomare su una sezione specifica della traccia di esecuzione. Questa azione può essere ripetuta più volte per raggiungere la granularità desiderata.

Punti di Interruzione dell'Esecuzione

Facendo doppio clic sul puntatore di istruzione nella finestra dei registri, questo verrà evidenziato in rosso, rivelando tutte le posizioni in cui l'istruzione è stata eseguita lungo la timeline della traccia.

Posizionamento di un breakpoint sull'istruzione corrente

Per saltare tra le esecuzioni, scorri verso l'alto o verso il basso mentre passi sopra il puntatore di istruzione evidenziato.

Inoltre, puoi cliccare con il tasto destro nel listing del disassemblatore e selezionare una delle voci di menu basate sulla navigazione per cercare rapidamente l'esecuzione di un'istruzione di interesse.

Ricerca della prima esecuzione di un'istruzione

Il tasto rapido nativo F2 di IDA può anche essere utilizzato per impostare breakpoint su istruzioni arbitrarie.

Punti di Interruzione della Memoria

Facendo doppio clic su un byte nelle viste stack o memoria, vedrai immediatamente tutte le letture/scritture su quell'indirizzo visualizzate lungo la timeline della traccia. Il giallo indica una lettura di memoria, il blu indica una scrittura di memoria.

Esplorazione degli accessi alla memoria con breakpoint di memoria

I breakpoint di memoria possono essere navigati usando la stessa tecnica descritta per i breakpoint di esecuzione. Fai doppio clic su un byte e scorri mentre passi sopra il byte selezionato per portare la traccia a ciascuno dei suoi accessi.

Cliccando con il tasto destro su un byte di interesse avrai opzioni per cercare tra lettura/scrittura/accesso di memoria se hai in mente un'azione di navigazione specifica.

Ricerca nella memoria

Per navigare la vista memoria verso un indirizzo arbitrario, clicca sulla vista memoria e premi G per inserire un indirizzo o un simbolo del database a cui portare la vista.

Punti di Interruzione di Regione

È possibile impostare un breakpoint di memoria su una regione di memoria evidenziando un blocco di memoria e facendovi doppio clic per impostare un breakpoint di accesso.

Breakpoint di accesso a regioni di memoria

Come per i normali breakpoint di memoria, passare sopra la regione e scorrere può essere utilizzato per spostarsi tra gli accessi effettuati alla regione di memoria selezionata.

Ricerca nei Registri

Nel reverse engineering, è piuttosto comune trovarsi in situazioni in cui ci si chiede "Quale istruzione ha impostato questo registro al suo valore corrente?"

Usando Tenet, puoi cercare all'indietro quell'istruzione con un solo clic.

Ricerca della precedente scrittura del registro

Cercare all'indietro è di gran lunga la direzione più comune per navigare tra le modifiche ai registri... ma per destrezza puoi anche cercare avanti alla successiva assegnazione del registro usando la freccia blu sulla destra del registro.

Shell dei Timestamp

Una semplice 'shell' è fornita per navigare a timestamp specifici nella traccia. Incollare (o digitare...) un timestamp nella shell con o senza virgole è sufficiente.

Navigazione nella traccia usando la shell dei timestamp

Usando un punto esclamativo, puoi anche cercare una 'percentuale' specifica nella traccia. Inserendo !100 si cercherà l'ultima istruzione nella traccia, mentre !50 cercherà circa al 50% del percorso della traccia. !last cercherà l'ultima istruzione navigabile visualizzabile nel disassemblatore.

Temi

Tenet è dotato di due temi predefiniti -- uno 'chiaro' e uno 'scuro'. A seconda dei colori attualmente utilizzati dal tuo disassemblatore, Tenet tenterà di selezionare il tema che sembra più appropriato.

Temi di Tenet

I file dei temi sono memorizzati come semplici JSON su disco e sono altamente configurabili. Se non sei soddisfatto dei temi o dei colori predefiniti, puoi creare i tuoi temi e semplicemente inserirli nella directory dei temi utente.

Tenet ricorderà la tua preferenza di tema per i caricamenti futuri.

FAQ

D: Come registro una traccia di esecuzione usando Tenet?

  • R: Tenet è un lettore di tracce, non un registratore di tracce. Dovrai utilizzare framework di strumentazione binaria dinamica (o altre tecnologie correlate) per generare una traccia di esecuzione compatibile. Consulta il readme sul tracing per maggiori informazioni sui tracer esistenti o su come implementarne uno tuo.

D: Quali architetture di traccia supporta Tenet?

  • R: Solo x86 e AMD64, ma il codice è quasi interamente agnostico rispetto all'architettura.

D: Quanto grande può essere un file di traccia che Tenet può caricare/navigare?

  • R: Il lettore di tracce di Tenet è puro Python, è stato scritto come MVP. Non c'è garanzia che tracce che superano i 10 milioni di istruzioni siano ragionevolmente navigabili finché un backend nativo non lo sostituirà.

D: Ho caricato una traccia di esecuzione, ora c'è un file '.tt'. Cosa è?

  • R: Quando Tenet carica una traccia di testo, la analizza, indicizza e comprime in un formato più performante. Nei caricamenti successivi, Tenet tenterà di caricare il file '.tt' che dovrebbe caricarsi in una frazione del tempo necessario per caricare la traccia di testo originale.

D: Il plugin si è bloccato / ha generato un errore / mostra informazioni errate sulla traccia, cosa dovrei fare?

  • R: Se incontri un problema o un'inesattezza che può essere riprodotta, per favore apri un issue su questo repository e carica una traccia di esempio + eseguibile.

D: La memoria nella mia traccia sta cambiando, ma non ci sono scritture nella regione. È un bug!?

  • R: Il tuo file di log potrebbe non aver catturato tutte le scritture di memoria. Ad esempio, i DBI in modalità utente generalmente non ricevono un callback di memoria per scritture esterne alla memoria del processo. Questo è più comune quando si legge da un file o da un socket – è il kernel che scrive la memoria nel buffer utente designato, rendendo l'evento invisibile alla strumentazione tradizionale.
    • Microsoft TTD generalmente mostra lo stesso comportamento, è complicato da risolvere senza modellare le syscall.

D: Verrà portato su Binary Ninja / Ghidra / ... ?

  • R: Possibilmente, ma non a breve (a meno che non ci sia un incentivo significativo). Essendo un progetto orientato alla ricerca, la motivazione principale è sviluppare strategie innovative per organizzare ed esplorare l'esecuzione dei programmi – non portarle.

D: La mia organizzazione vorrebbe supportare questo progetto, come possiamo aiutare?

  • R: Senza finanziamenti, il tempo che posso dedicare a questo progetto è limitato. Se la tua organizzazione è entusiasta delle idee presentate qui e in grado di fornire capitale per sponsorizzare R&D dedicato, per favore contattaci.

Lavori Futuri

Tempo e motivazione fondi permettendo, i lavori futuri potrebbero includere:

  • Filtraggio / coagulazione delle chiamate di libreria dalle tracce
  • Analisi dei puntatori (es. annotazioni) per le viste registri / stack
  • Implementazioni native di TraceFile e TraceReader (es. tracce più grandi e veloci)
  • Cronologia di navigazione + vista segnalibri (magari 2-in-1?)
  • Informatica della traccia più ricca, indicizzazione più aggressiva degli eventi rilevanti (es. chiamate di funzione)
  • Cartografia della traccia, miglioramento della sintesi e della rappresentazione della geografia della traccia
  • Rendere la selezione/detezione dell'architettura della CPU leggermente meno hardcoded
  • Più ponti di tracing pronti all'uso, DynamoRIO, TTD, RR, QEMU, Bochs, ...
  • Supporto per viste Hex-Rays / decompilate (oltre alla sincronizzazione di base delle viste)
  • Flusso di lavoro migliorato per il caricamento automatico o l'iterazione sulle tracce
  • Analisi differenziale, 'diffing' di tracce di alto livello
  • Migliore navigazione e suddivisione dei thread, quanti
  • Migliore supporto per la navigazione di tracce 'multi modulo' (es. tracce di sistema completo)
  • Supporto per Binary Ninja
  • ... ?

Accolgo contributi esterni, issue e richieste di funzionalità. Per favore, invia qualsiasi pull request al branch develop di questo repository se desideri che vengano considerati per un rilascio futuro.

Autori

  • Markus Gaasedelen (@gaasedelen)
Scarica lo strumento