Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ghostrings — Scripts de Ghidra para recuperar definiciones de cadenas en binarios de Go | Kitploit
Herramientas/GitHubGitHub/nccgroup/ghostrings
Análisis de CódigoIngeniería InversaAnálisis de Binarios
GitHubnccgroup/ghostrings

ghostrings

Scripts de Ghidra para recuperar definiciones de cadenas en binarios de Go

Ver RepositorioSitio web
1389hace 8 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Ghostrings

Scripts para recuperar definiciones de cadenas en binarios de Go con análisis P-Code. Probado con x86, x86-64, ARM y ARM64.

Scripts

Golang

Estos se pueden encontrar en la categoría Golang del Script Manager.

  • GoDynamicStrings.java
    • Analiza P-Code para encontrar estructuras de cadenas creadas en la pila. Utiliza el análisis de estilo "register" de nivel inferior.
  • GoFuncCallStrings.java
    • Analiza P-Code para encontrar estructuras de cadenas pasadas directamente a llamadas de funciones a través de registros, sin ser escritas en la pila. Utiliza el análisis de estilo "normalize" con el nuevo soporte integrado de Golang de Ghidra (consulte las notas de la versión de Ghidra para conocer las versiones de Golang compatibles).
  • GoStaticStrings.java
    • Encuentra estructuras de cadenas de Go asignadas estáticamente en memoria de solo lectura.
  • GoKnownStrings.java
    • Busca cadenas únicas estándar y las define. Los datos de cadenas se cargan desde data/known_strings.json.
  • GoStringFiller.java
    • Rellena los huecos en go.string.* después del análisis inicial, basándose en el orden ascendente de longitud de los datos de cadenas.

También hay un par de variaciones especiales del script de análisis de cadenas dinámicas:

  • GoDynamicStringsSingle.java
    • Realiza el mismo análisis que GoDynamicStrings.java, pero utiliza un único proceso del descompilador. Úselo si analizar un binario hace que los procesos paralelos del descompilador agoten la memoria del sistema.
  • GoDynamicStringsHigh.java
    • Experimental, utiliza la salida P-Code del análisis de estilo "normalize" de nivel superior. Actualmente depende de un hack que desactiva la eliminación de código muerto en el descompilador (ver https://research.nccgroup.com/2022/05/20/earlyremoval-in-the-conservatory-with-the-wrench/). Este hack se rompe en Ghidra 10.2.

P-Code

Esto se puede encontrar en la categoría PCode del Script Manager.

  • PrintHighPCode.java
    • Imprime la salida P-Code de alto nivel para la función seleccionada actualmente en la consola, con un selector para el estilo de simplificación del descompilador a utilizar. Se utiliza principalmente para desarrollar scripts de análisis P-Code.

Flujo de recuperación de cadenas

A continuación se presenta el flujo general para usar estos scripts y recuperar definiciones de cadenas en un binario de Go:

  1. Borre todas las cadenas incorrectas o definidas automáticamente en el bloque de memoria de datos de solo lectura.
    • En la ventana "Defined Strings", active la columna "Mem Block" y filtre por bloque de memoria para seleccionar todas las cadenas en .rodata, .rdata o __rodata. Luego haga clic derecho en el listado de código y elija "Clear Code Bytes".
  2. (Opcional) Ejecute GoKnownStrings.java para detectar algunas cadenas estándar.
  3. Ejecute GoStaticStrings.java.
  4. Ejecute GoFuncCallStrings.java (si la versión del binario de Golang es compatible con las funciones integradas de Golang de Ghidra).
  5. Ejecute GoDynamicStrings.java.
  6. Ejecute GoStringFiller.java.
    • Si detecta una violación del orden ascendente de longitud de los datos de cadenas, borre las definiciones de cadenas falsas positivas en esa área y vuelva a ejecutar el script. Hay una opción para hacer esto automáticamente.
    • Si el binario está sin símbolos, localice el área de cadenas de un byte encontradas por el script de cadenas dinámicas. Asegúrese de que sea el inicio de las cadenas agrupadas no terminadas en nulo (se deberían definir más cadenas después con longitud en orden ascendente). Cree la etiqueta go.string.* en la primera cadena de un byte.

Configuración

Instalación

En Ghidra:

  1. File -> Install Extensions -> Add extension
  2. Seleccione el archivo ZIP de la extensión

Desarrollo

Para Eclipse con el complemento GhidraDev:

  1. Clonar el repositorio
  2. File -> Import -> Projects from Folder or Archive
  3. Seleccionar el directorio del repositorio
  4. GhidraDev -> Link Ghidra...
  5. Seleccionar el proyecto importado

Compilación

Compilar con Eclipse:

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

Compilar directamente con Gradle:

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

Antecedentes

Un problema bien conocido al hacer ingeniería inversa de programas Go es que la falta de terminadores nulos en las cadenas de Go dificulta la recuperación de definiciones de cadenas a partir de binarios compilados. Muchos de los valores de cadena constantes de un programa Go se almacenan juntos en un bloque gigante en la compilación, sin caracteres terminadores incorporados en los datos de cadena para marcar dónde termina una cadena y comienza otra. Incluso un programa simple que solo imprime "Hello world!" contiene más de 1,500 cadenas relacionadas con el sistema de tiempo de ejecución de Go y otras bibliotecas estándar. Esto puede hacer que las implementaciones típicas de descubrimiento de cadenas ASCII, como la proporcionada por Ghidra, creen definiciones de cadenas falsas positivas de decenas de miles de caracteres de longitud.

En lugar de cadenas terminadas en nulo, Go utiliza una estructura de cadena que consiste en un puntero y un valor de longitud. Muchas de estas estructuras de cadena se crean en la pila del programa en tiempo de ejecución, por lo que recuperar las ubicaciones de inicio y los valores de longitud de cada cadena requiere analizar el código de máquina compilado. Existen algunos scripts que realizan este análisis comprobando ciertos patrones de instrucciones x86-64, pero omiten estructuras creadas con variaciones no manejadas de instrucciones que, en última instancia, tienen el mismo efecto en la pila, y además están restringidos a una ISA específica.

Ghostrings evita ambos problemas al trabajar con las operaciones P-Code simplificadas e independientes de la arquitectura producidas por el análisis del descompilador de Ghidra.

Información de la versión

Copyright 2022 NCC Group. Publicado bajo la licencia GPLv3 (ver LICENSE).

Autor principal del proyecto: James Chambers [email protected]

Descargar herramienta
  • Compruebe si quedan huecos en go.string.* y defina las cadenas con puntos de inicio y fin obvios.
    • Para aprovechar al máximo GoStringFiller.java, identifique dónde cambian las longitudes de las cadenas en los datos de cadenas no definidos y defina las cadenas más cercanas a ese límite. Luego vuelva a ejecutar GoStringFiller.java para rellenar automáticamente los lugares donde pueda determinar correctamente la longitud de las cadenas no definidas restantes.
  • (Opcional) Vuelva a ejecutar la herramienta de análisis de cadenas ASCII integrada de Ghidra.
    • Desactive la sobrescritura de cadenas existentes. Ejecute con y sin el requisito de terminador nulo.