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
GhidraEmu — Native Pcode emulator | Kitploit
Strumenti/GitHubGitHub/nalen98/ghidraemu
Dynamic Code Analysis (DAST)Reverse EngineeringDebuggersBinary Analysis
GitHubnalen98/ghidraemu

GhidraEmu

Native Pcode emulator

Vedi Repository
305232 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

GhidraEmu



Questo plugin sperimentale per Ghidra ti consente di gestire facilmente l'emulazione nativa di pcode. Non servono più script: puoi usarlo direttamente da Ghidra. Può essere particolarmente utile per lavorare con una varietà di processori esotici non supportati dai comuni emulatori.

Se il processore/vm è supportato da Ghidra per il reverse engineering, può essere emulato! Ad esempio, qui sotto è mostrata l'emulazione delle istruzioni eBPF:

GhidraEmu

Cosa può fare

In sostanza, il plugin è un wrapper esteso attorno alle classi contenute nel pacchetto ghidra.app.emulator. Ecco cosa è stato implementato:

  • Funziona con tutte le architetture supportate da Ghidra, quindi puoi aggiungere processori esotici ed emularli
  • Emulazione di contesto CPU, stack ed heap
  • Applicazione di byte patchati tramite la GUI di Ghidra per cambiare il corso dell'emulazione
  • Breakpoint per controllare il processo di emulazione
  • Visualizzazione dei byte modificati durante l'emulazione nel ByteViewer
  • Hook di alcune funzioni libc (anche se è ancora carente)

Sebbene l'emulazione PCode ideale implichi l'unificazione, la maggior parte dei processori richiede un approccio specifico. Non esitare a segnalare qualsiasi problema incontri. Mi piacerebbe davvero testare tutti i processori, ma è difficilmente possibile.

Cosa non può fare

  • Entrare all'interno delle funzioni di librerie esterne (limitazioni di EmulatorHelper)
  • Emulazione delle syscall

Tutte le finestre del plugin in un unico insieme

GhidraEmu

Funzionalità

Finestra del menu

Contiene tutte le finestre del plugin: vista Stack, Registri, vista Breakpoint e finestra principale.

GhidraEmu menu

Finestra popup

Contiene i tasti di scelta rapida per impostare l'inizio e la fine dell'emulazione, i breakpoint e l'applicazione dei byte modificati allo stato dell'emulatore.

Vista dei registri

Modifica i registri come preferisci. Impostare il link register (freccia verde) aiuta l'emulatore a capire quale registro contiene l'indirizzo di ritorno. Il plugin sa come funziona tramite lo stack, il registro lr e i registri AARCH64 e MIPS. Se ne hai uno esotico, seleziona il link register e premi il pulsante.

Vista dello stack

Quando apri il tuo programma nel СodeBrowser, GhidraEmu mappa automaticamente lo spazio dello stack. Il puntatore allo stack verrà impostato al centro dell'intervallo dello stack. Questo ti consente di impostare valori all'inizio o alla fine dei frame dello stack. Scorrilo se noti blocchi durante l'aggiornamento o il ripristino. Durante il processo di emulazione, se il programma necessita di più spazio per lo stack, il plugin lo allocherà automaticamente.

Vista dei breakpoint

Vista RAM

Se durante l'emulazione alcuni byte cambiano, li vedrai nel classico ByteViewer. Non preoccuparti: verranno ripristinati ai valori originali dopo aver premuto il pulsante "Reset".

Applica i byte patchati

Se hai apportato modifiche, comunica all'emulatore i byte modificati (lo stack si aggiorna automaticamente: non serve farlo). Dopo la modifica, selezionali (diventeranno verdi) e premi questa opzione (oppure usa il tasto di scelta rapida "M").

GhidraEmu apply patched bytes

Console

Qui il plugin stampa le informazioni di output. Ad esempio, messaggi di errore di emulazione come questo:

GhidraEmu console

Nuova funzionalità - Jump Over

La funzionalità "Jump Over" ti consente di saltare un'istruzione in avanti se per qualche motivo non vuoi emulare quella corrente. Poiché il processo di emulazione viene interrotto se viene rilevato un tentativo di lettura di memoria non inizializzata, questa funzionalità ti permette di bypassarlo. Guarda un esempio. Ecco una delle prime istruzioni in molti programmi x86_64, il salvataggio del canary dello stack:

MOV RAX, qword ptr FS:[0x28]

Proveremo a barare un po' e a saltarla incrementando il valore del PC. Per farlo, fermati sull'istruzione che non vuoi emulare e premi il tasto di scelta rapida J. Altrimenti, proseguendo si otterrebbe un errore di lettura di memoria non inizializzata.

Jump Over

Nuova funzionalità - Step Over

Se ti fermi su un'istruzione che porta a una subroutine (chiamata interna) e vuoi emulare tutto fino all'istruzione successiva (classico "step over"), premi il tasto di scelta rapida F6 e accadrà di sicuro:

Step Over

Prima di iniziare

Alcuni punti importanti da considerare:

  • Non dimenticare di analizzare il programma in Ghidra, l'emulatore dipende da questo.
  • Come già accennato, imposta il link register se hai un processore/vm esotico.
  • Se il processore del tuo binario necessita di determinati segmenti di memoria secondo le specifiche, non dimenticare di crearli nella finestra MemoryMap di Ghidra e di inizializzarli con zeri. In caso contrario, l'emulatore segnalerà spazi di memoria sconosciuti durante le operazioni di lettura/scrittura e interromperà il processo di emulazione. Se un blocco di memoria esiste ma non è inizializzato con zeri ed è necessario all'emulatore, il plugin proverà a renderlo inizializzato in modo che l'emulazione continui.
  • Se hai modificato dei byte tramite il ByteViewer, il plugin non li ripristinerà ai valori originali durante il reset dello stato di emulazione.
  • Prima di chiudere il progetto in Ghidra, dovresti premere il pulsante "Reset" e ripristinare lo stato dell'ultima emulazione se non è già stato fatto. Questo è importante perché al momento della chiusura, le transazioni di ripittura delle istruzioni tracciate nel Listing non verranno eseguite, così come le transazioni di ripristino dei byte del programma dopo l'emulazione. Questo può portare non solo a vedere il "vecchio pappagallo giallo", che è il problema minore, ma anche a lasciare i byte modificati come tali senza ritornare ai valori originali (a meno che il progetto non venga ripristinato in Ghidra, ovviamente).

Installazione

  1. Usa gradle per compilare l'estensione: GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle e usa Ghidra per installarla: File → Install Extensions...

  2. Nel CodeBrowser, vai su File → Configure → Miscellaneous e seleziona la casella per il plugin GhidraEmu.

Feedback

Hai incontrato bug durante l'uso del plugin o hai idee per miglioramenti? Non essere timido, apri una nuova issue e ci penso io.

Lavori futuri

Le restrizioni di EmulatorHelper non consentono di usare uno spazio del programma in un altro. Quindi, ad esempio, la tua libreria condivisa esterna non saprà mai dello spazio di memoria del programma e viceversa. Non puoi quindi emularla come un unico processo con un unico spazio di memoria. Fammi sapere se mi sfugge qualcosa qui.

Scarica lo strumento