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
ghostrings — Script Ghidra per il recupero delle definizioni di stringhe nei binari Go | Kitploit
Strumenti/GitHubGitHub/nccgroup/ghostrings
Analisi del CodiceReverse EngineeringAnalisi di Binari
GitHubnccgroup/ghostrings

ghostrings

Script Ghidra per il recupero delle definizioni di stringhe nei binari Go

Vedi RepositorySito web
13898 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

Ghostrings

Script per recuperare le definizioni di stringhe nei binari Go con analisi P-Code. Testato con x86, x86-64, ARM e ARM64.

Script

Golang

Questi si trovano nella categoria Golang dello Script Manager.

  • GoDynamicStrings.java
    • Analizza il P-Code per trovare le strutture di stringa create sullo stack. Utilizza l'analisi di stile "register" di livello inferiore.
  • GoFuncCallStrings.java
    • Analizza il P-Code per trovare le strutture di stringa passate direttamente alle chiamate di funzione tramite registri, senza essere scritte nello stack. Utilizza l'analisi di stile "normalize" con il nuovo supporto Golang integrato di Ghidra (vedi le note di rilascio di Ghidra per le versioni di Golang supportate).
  • GoStaticStrings.java
    • Trova le strutture di stringa Go allocate staticamente in memoria di sola lettura.
  • GoKnownStrings.java
    • Cerca stringhe univoche standard e le definisce. I dati delle stringhe vengono caricati da data/known_strings.json.
  • GoStringFiller.java
    • Riempie le lacune in go.string.* dopo l'analisi iniziale, in base all'ordine crescente di lunghezza dei dati delle stringhe.

Ci sono anche un paio di varianti speciali dello script di analisi delle stringhe dinamiche:

  • GoDynamicStringsSingle.java
    • Esegue la stessa analisi di GoDynamicStrings.java, ma utilizza un singolo processo del decompilatore. Usalo se l'analisi di un binario fa sì che i processi paralleli del decompilatore esauriscano la memoria di sistema.
  • GoDynamicStringsHigh.java
    • Sperimentale, usa l'output P-Code dall'analisi di stile "normalize" di livello superiore. Attualmente dipende da un hack che disattiva l'eliminazione del codice morto nel decompilatore (vedi https://research.nccgroup.com/2022/05/20/earlyremoval-in-the-conservatory-with-the-wrench/). Questo hack non funziona in Ghidra 10.2.

P-Code

Questo si trova nella categoria PCode dello Script Manager.

  • PrintHighPCode.java
    • Stampa l'output P-Code di alto livello per la funzione attualmente selezionata sulla console, con un selettore per lo stile di semplificazione del decompilatore da utilizzare. Usato principalmente per sviluppare script di analisi P-Code.

Flusso di recupero delle stringhe

Ecco il flusso generale per usare questi script per recuperare le definizioni di stringhe in un binario Go:

  1. Cancella tutte le stringhe errate o definite automaticamente nel blocco di memoria dati di sola lettura.
    • Nella finestra "Defined Strings", abilita la colonna "Mem Block" e filtra per blocco di memoria per selezionare tutte le stringhe in .rodata, .rdata o __rodata. Quindi fai clic con il tasto destro nel listing del codice e scegli "Clear Code Bytes".
  2. (Opzionale) Esegui GoKnownStrings.java per rilevare alcune stringhe standard.
  3. Esegui GoStaticStrings.java.
  4. Esegui GoFuncCallStrings.java (se la versione del binario Golang è supportata dalle funzionalità Golang integrate di Ghidra).
  5. Esegui GoDynamicStrings.java.
  6. Esegui GoStringFiller.java.
    • Se rileva una violazione dell'ordine crescente di lunghezza dei dati delle stringhe, cancella eventuali definizioni di stringhe che sono falsi positivi in quell'area e riesegui lo script. È disponibile un'opzione per farlo automaticamente.
    • Se il binario è strippato, individua l'area delle stringhe di un byte trovate dallo script di stringhe dinamiche. Assicurati che sia l'inizio del gruppo di stringhe non terminate da null raggruppate insieme (dovrebbero essere definite altre stringhe dopo, con lunghezza in ordine crescente). Crea l'etichetta go.string.* sulla prima stringa di un byte.

Configurazione

Installazione

In Ghidra:

  1. File -> Install Extensions -> Add extension
  2. Seleziona il file ZIP dell'estensione.

Sviluppo

Per Eclipse con il plugin GhidraDev:

  1. Clona il repository
  2. File -> Import -> Projects from Folder or Archive
  3. Seleziona la directory del repository
  4. GhidraDev -> Link Ghidra...
  5. Seleziona il progetto importato

Compilazione

Compila con Eclipse:

  • GhidraDev -> Export -> Ghidra Module Extension...

Compila direttamente con Gradle:

root@kitploit:~
$ cd Ghostrings
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>

Contesto

Un problema noto nel reverse engineering dei programmi Go è che la mancanza di terminatori null nelle stringhe Go rende difficile il recupero delle definizioni di stringhe dai binari compilati. Molti valori di stringa costanti di un programma Go sono memorizzati insieme in un unico grande blob nella build compilata, senza caratteri terminatore integrati nei dati delle stringhe che indichino dove finisce una stringa e ne inizia un'altra. Anche un semplice programma che stampa solo "Hello world!" contiene oltre 1.500 stringhe relative al sistema runtime di Go e ad altre librerie standard. Questo può portare le tipiche implementazioni di rilevamento delle stringhe ASCII, come quella fornita da Ghidra, a creare definizioni di stringhe false positive lunghe decine di migliaia di caratteri.

Invece di stringhe terminate da null, Go usa una struttura di stringa composta da un puntatore e un valore di lunghezza. Molte di queste strutture di stringa vengono create sullo stack del programma in fase di esecuzione, quindi recuperare le singole posizioni di inizio delle stringhe e i valori di lunghezza richiede l'analisi del codice macchina compilato. Esistono alcuni script che eseguono questa analisi controllando determinati pattern di istruzioni x86-64, ma non rilevano le strutture create con variazioni di istruzioni non gestite che alla fine hanno lo stesso effetto sullo stack, e sono inoltre limitati a una specifica ISA.

Ghostrings evita entrambi questi problemi lavorando con le operazioni P-Code semplificate e indipendenti dall'architettura prodotte dall'analisi del decompilatore di Ghidra.

Informazioni sulla release

Copyright 2022 NCC Group. Rilasciato sotto licenza GPLv3 (vedi LICENSE).

Autore principale del progetto: James Chambers [email protected]

Scarica lo strumento
  • Controlla le lacune rimanenti in go.string.* e definisci eventuali stringhe con punti di inizio e fine evidenti.
    • Per sfruttare al meglio GoStringFiller.java, individua dove le lunghezze delle stringhe stanno cambiando nei dati di stringhe non definiti e definisci le stringhe più vicine a quel confine. Quindi riesegui GoStringFiller.java per riempire automaticamente i punti in cui può determinare correttamente la lunghezza delle restanti stringhe non definite.
  • (Opzionale) Riesegui lo strumento di analisi delle stringhe ASCII integrato di Ghidra.
    • Disattiva la sovrascrittura delle stringhe esistenti. Esegui con e poi senza il requisito del terminatore nullo.