Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
ghidra_svr_bridge — Plugin per Binary Ninja che sincronizza l'analisi in modo bidirezionale con un repository Ghidra Server, tramite un sottoprocesso bridge Java. | Kitploit
Strumenti/GitHubGitHub/gmh5225/ghidra_svr_bridge
Analisi StaticaAnalisi del CodiceReverse EngineeringScripting e AutomazioneUtilità e FrameworkAnalisi di Binari
GitHubgmh5225/ghidra_svr_bridge

ghidra_svr_bridge

Plugin per Binary Ninja che sincronizza l'analisi in modo bidirezionale con un repository Ghidra Server, tramite un sottoprocesso bridge Java.

Vedi Repository
252 mesi faNon ancora revisionato

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

binja-ghidra

Un plugin Binary Ninja che si connette a un repository Ghidra Server e importa la sua analisi — simboli, nomi di funzione e commenti — direttamente in una binary view Binary Ninja aperta.

Cosa fa

Ghidra e Binary Ninja hanno ciascuno i propri punti di forza. Questo plugin ti permette di usarli entrambi sullo stesso binario senza copiare manualmente nomi o commenti tra i due. Connettiti a un Ghidra Server in esecuzione, esplora i suoi repository e fai doppio clic su qualsiasi file di progetto per estrarre la sua analisi nella view BN attualmente aperta.

La sincronizzazione va in entrambe le direzioni.

BN ← Ghidra (import)BN → Ghidra (checkin)
Simboli (etichette, nomi di funzione)✓✓
Commenti (EOL/PRE/POST/PLATE/REP)✓✓
Firme di funzione (tipo di ritorno, calling convention)✓✓
Parametri di funzione (rinomina, retype, aggiunta)✓✓
Tipi di dato (struct/union/enum/typedef + pointer/array)✓✓
Equate (nomi di costanti + riferimenti)✓✓
Segnalibri✓✓
Elementi di dato tipizzati✓✓
Flag di funzione (thunk, no-return, inline)✓ come tag BN—
Variabili locali (storage-aware)✓parziale — mappatura dello storage dei registri non implementata

Architettura

Binary Ninja (C++ plugin)
    │  TCP / newline-delimited JSON
    ▼
ghidra-bridge-*.jar  (Java, runs as a subprocess)
    │  Java RMI / SSL
    ▼
Ghidra Server  (ghidraSvr, running on the network)

Il plugin avvia un sottoprocesso Java (il "bridge") al caricamento. Il bridge mantiene la connessione RMI al Ghidra Server e parla un semplice protocollo JSON verso il plugin tramite un socket TCP locale. Questo tiene tutto il codice Java/RMI fuori dal processo C++ e permette alla JVM di avviarsi in background mentre BN termina il caricamento.

La JVM del bridge inizializza anche il framework Application di Ghidra all'avvio, così il percorso di scrittura può usare le API di alto livello del program-model di Ghidra (ProgramDB, DataTypeManager, SymbolTable, FunctionManager) invece delle scritture grezze db.Table.putRecord() — vedi Checkin write path sotto.

Componenti

PathLinguaggioRuolo
plugin/C++ / Qt6Plugin sidebar di Binary Ninja
bridge/Java 17Client RMI Ghidra + server bridge JSON

Plugin (C++):

  • plugin.cpp — registra le impostazioni e il widget della sidebar; avvia subito la JVM del bridge al caricamento
  • GhidraConnection.cpp — singleton; gestisce il ciclo di vita del bridge e tutte le operazioni basate su RMI
  • BridgeProcess.cpp — lancia il JAR del bridge come sottoprocesso con pipe stdout/stderr; legge la riga di handshake READY port=N
  • BridgeClient.cpp — client TCP; invia richieste JSON, riceve risposte, smista eventi asincroni
  • SyncEngine.cpp — applica un GhidraDbExport a una BinaryView (simboli, commenti, flag)
  • ui/ProjectPanel.cpp — widget della sidebar: albero dei repo, dialog di connessione, log delle attività
  • ui/ConnectDialog.cpp — dialog host/porta/utente/password

Bridge (Java):

  • BridgeMain.java — parsing degli argomenti; inizializza UniversalIdGenerator e il framework Application di Ghidra; avvia il server TCP; stampa READY port=N su stdout
  • BridgeServer.java — accetta una connessione client TCP e le assegna una BridgeConnection
  • BridgeConnection.java — dispatcher delle richieste JSON; serializza le risposte delle API Ghidra in JSON; gestisce opCheckin (crea una nuova versione del programma sul server)
  • GhidraSession.java — sessione RMI autenticata; incapsula RemoteRepositoryServerHandle
  • EventStreamer.java — thread in background per ogni repo aperto; invia RepositoryChangeEvent al plugin come eventi JSON asincroni
  • DatabaseExporter.java — percorso di lettura: estrae le tabelle di simboli/commenti/flag di funzione/tipi di dato/equate/segnalibri da un ManagedBufferFileHandle (il buffer DB remoto di Ghidra) tramite accesso grezzo a db.jar
  • ProgramApplier.java — percorso di scrittura: apre il file buffer come un vero ProgramDB e applica tutte le modifiche lato BN tramite le API di alto livello di Ghidra (vedi Checkin write path sotto)
  • DatabaseImporter.java — helper legacy di scrittura grezza mantenuti solo come seam di test; la apply(...) di produzione delega a ProgramApplier

Checkin write path

opCheckin apre il file buffer gestito del programma in modalità scrittura, costruisce un ProgramDB sopra di esso e applica le modifiche lato BN tramite le API del program-model di Ghidra. Le scritture grezze db.Table.putRecord() sono evitate — erano la fonte di ogni bug di corruzione al checkin che abbiamo mai incontrato:

Scrittura di tier erratoModalità di fallimento
setIntValue(col, longTypeId) sulla tabella Function DataIntField.setLongValue tronca silenziosamente con l2i → StackPurge corrotto a ogni aggiornamento di firma
setByteValue(col, isUnion) su V5V6 Composite Data Typesla colonna è BooleanField in Ghidra 12.x → IllegalFieldAccessException ("Illegal field access")
setIntValue(col, 0) sulla colonna V2 Typedef Flagsla colonna è ShortField → stesso crash, schema diverso
Scrittura dell'header composite senza righe di component-settingsCompositeEditorModel.cloneAllComponentSettings lancia ArrayIndexOutOfBoundsException quando la struct viene aperta in Ghidra
Scrittura di un simbolo PARAMETER con SYM_ADDR_COL = indirizzo RAMAddress is not a VariableAddress lanciato da FunctionDB.loadSymbolBasedVariables a qualsiasi accesso alla funzione
Passaggio di un DBChangeSet null a DBHandle.save()il server scrive un file change-data da 0 byte → il checkout successivo fallisce con EOFException in ProgramContentHandler.loadProgramChangeSet

ProgramApplier non ha queste trappole perché passa attraverso DataTypeManager.addDataType, SymbolTable.createLabel, Listing.setComment, Function.setReturnType, ecc. — API che mantengono automaticamente gli invarianti delle tabelle interconnesse di Ghidra. Esegue anche un passaggio cleanupBadVariableSymbols all'inizio di ogni checkin per eliminare la corruzione lasciata nel database dalle versioni precedenti del bridge.

server-package/CleanupBadVariableSymbols.java è un GhidraScript standalone che esegue la stessa pulizia tramite analyzeHeadless — utile quando un file è troppo corrotto per essere aperto nella GUI di Ghidra.

Testing

./test.sh          # macOS / Linux: tiers 0-3 (C++ unit + BN-headless + Java)
test.bat           # Windows equivalent
test.bat --parity  # cross-DB parity tier only (C++ BN tests + gradlew parityTest)
test.bat --e2e     # live Ghidra-server E2E (starts a local ghidraSvr)

La suite è organizzata in cinque tier. I tier 2–4 esistono per dimostrare una proprietà: gli stessi dati compatibili finiscono per essere memorizzati sia nel .bndb sia nel program database di Ghidra (la matrice di compatibilità in cima a questo README).

Scarica lo strumento