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
CodeCut — Un plugin Ghidra per individuare i confini dei file oggetto. | Kitploit
Strumenti/GitHubGitHub/jhuapl/codecut
Analisi StaticaReverse EngineeringAnalisi di BinariMachine Learning
GitHubjhuapl/codecut

CodeCut

Un plugin Ghidra per individuare i confini dei file oggetto.

Vedi Repository
1312347 mesi 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

Plugin CodeCut per Ghidra

Plugin Ghidra per l'interfaccia DeepCut / CodeCut

Teoria del funzionamento

CodeCut consente a un utente di assegnare funzioni a file oggetto in Ghidra, e quindi di interagire con il binario a livello di file oggetto. Le funzioni vengono assegnate ai file oggetto impostando il campo Namespace nel database di Ghidra. DeepCut tenta di stabilire i confini iniziali dei file oggetto che l'utente può poi regolare utilizzando la finestra CodeCut Table.

Perché è utile?

La maggior parte dei binari proviene da più file di codice sorgente. Durante il reversing, gli analisti di RE spesso sviluppano un senso di quali funzioni sono correlate e quindi probabilmente appartenevano allo stesso file sorgente. CodeCut consente all'analista di sviluppare un'ipotesi come "Penso che questo blocco di funzioni siano funzioni del sistema operativo." Ora, se ci sono funzioni inesplorate in quella regione, appariranno nel disassembly e nella decompilazione come OS::FUN_XXXXXXXX invece di semplicemente FUN_XXXXXXXX. Questo porta a una comprensione più rapida di cosa potrebbero fare le funzioni quando vengono visualizzate nel contesto.

Installazione del plugin

Seguire le normali procedure di installazione delle estensioni di Ghidra. Copiare gli zip delle estensioni CodeCut e DeepCut in $GHIDRA_INSTALL_DIR/Extensions, poi nella finestra principale di Ghidra selezionare File -> Install Extensions e selezionare le caselle CodeCut e DeepCut. Ghidra vi dirà che deve riavviarsi. Poiché Ghidra ora richiede che i plugin corrispondano solo alla versione major/minor della versione base e non alle patch version, prevediamo di rilasciare solo versioni major/minor pari.

Scarica lo strumento

NOTA: Dopo il riavvio e il caricamento di una finestra CodeBrowser, Ghidra vi dirà che ha trovato nuovi plugin e vi chiederà se desiderate configurarli. In questa finestra appare solo CodeCut. Questo perché DeepCut è un analizzatore "one-shot" (è comunque installato).

Configurazione dei percorsi Python nativi e delle dipendenze Python

Sia CodeCut che DeepCut si basano sull'estensione nativa PyGhidra e non sono compatibili con Jython. CodeCut usa Python nativo per indovinare i nomi dei moduli. L'inferenza del modello di DeepCut viene eseguita in Python nativo.

Dipendenze Python native

CodeCut:

  • nltk

DeepCut:

  • torch
  • torch-geometric
  • networkx
  • scipy

Per installare le dipendenze, eseguire:

root@kitploit:~
pip install nltk
pip install torch torch-geometric networkx scipy

usando l'installazione Python collegata al vostro PyGhidra.

Esecuzione dell'analisi DeepCut

DeepCut è preferibile eseguirlo come analizzatore one-shot dopo l'auto-analisi iniziale. Selezionare Analysis -> One Shot -> Deepcut. Dopo l'esecuzione di DeepCut, è possibile visualizzare i risultati guardando il campo Namespace nella vista Symbol Table.

Utilizzo di CodeCut

Dopo l'esecuzione di DeepCut, è possibile interagire a livello di file oggetto con la vista CodeCut Table. Selezionare Window -> CodeCut Table per visualizzare la tabella. La tabella CodeCut è essenzialmente un insieme combinato di symbol table, una per ogni modulo.

È possibile far indovinare a CodeCut i nomi dei moduli (in base ai riferimenti alle stringhe) scegliendo Analysis -> Guess Module Names nella finestra CodeCut Table. Questo è utile se il vostro eseguibile di destinazione ha molti debug string. Lo script di indovinamento dei nomi tenta prima di trovare i nomi dei file sorgente, poi ripiega sulle stringhe (incluse bigrammi e trigrammi) che vengono ripetute più volte.

È possibile dividere/combinare i file oggetto facendo clic con il tasto destro su un oggetto e scegliendo Split Namespace Here / Combine Namespaces. È possibile spostare le funzioni tra i file oggetto (modificando i confini dei file oggetto) trascinandole e rilasciandole.

Esportazione in C ricompilabile

CodeCut contiene due opzioni per esportare un intero modulo o un sottointervallo di un modulo come C ricompilabile sotto il menu Export quando si fa clic con il tasto destro su un modulo nella tabella CodeCut. Questa funzionalità è contrassegnata come SPERIMENTALE e non è ben testata.

Il grafico CodeCut

CodeCut ora ha un'opzione grafica per visualizzare le interazioni / la gerarchia dei moduli all'interno di un binario. Aggiungete namespace alla vista grafica facendo clic con il tasto destro su una funzione nella CodeCut Table e scegliendo Add Namespace to Graph. È possibile rimuovere moduli dal grafico facendo clic con il tasto destro e scegliendo Show Namespaces in Graph Filter.

Limitazioni

Attenzione a dove si fa clic

Sebbene sembri possibile fare clic con il tasto destro sui nomi dei moduli sul lato destro, CodeCut in realtà presta attenzione a quale funzione è evidenziata nella tabella. Quindi, ad esempio, se avete una funzione in object3 evidenziata e fate clic con il tasto destro sulla casella grigia di object2 a sinistra e fate clic su Combine/Split o Rename Namespaces, CodeCut eseguirà l'operazione a partire dalla funzione che avete evidenziato in object3.

Peculiarità degli intervalli di indirizzi

CodeCut tenta di ordinare i namespace in base al loro indirizzo di partenza. CodeCut potrebbe sembrare elencare i moduli fuori ordine, ma ciò è solitamente dovuto a irregolarità del disassembly di Ghidra. Ad esempio, supponiamo di avere una mappa di memoria come questa:

root@kitploit:~
object2:  0x00010000 - 0x00018000
object3:  0x00018004 - 0x00020000
...
object50: 0x00480000 - 0x00480a00

Supponiamo che la funzione a 0x00480000 faccia un branch o un salto a un indirizzo 0x00016008. Questo dovrebbe essere un nuovo punto di ingresso di funzione, ma se solo una funzione lo usa, Ghidra potrebbe non etichettarlo come punto di ingresso di funzione e considerarlo semplicemente parte di FUN_00480000. Ciò significa che l'intervallo effettivo di object50 è 0x00016008 - 0x00480a00. E così object50 apparirà tra object2 e object3 nella tabella. CodeCut scrive gli intervalli dei moduli nel log dell'applicazione di Ghidra per aiutare a eseguire il debug di questo problema. In questo caso, definire 0x00016008 come funzione farà sì che i limiti di object50 abbiano i valori corretti e object50 apparirà nel posto giusto nella tabella.

Definizione di funzioni in seguito

Le funzioni che vengono definite dopo l'esecuzione dell'analisi DeepCut vengono per impostazione predefinita aggiunte al namespace Global. In futuro prevediamo di aggiungere una funzionalità che le aggiunga automaticamente al namespace più vicino, o di fornire un meccanismo per assegnare più facilmente singole funzioni direttamente a un namespace specifico.

Compilazione

Istruzioni di compilazione specifiche sono fornite nelle sottocartelle DeepCut e CodeCut.