1 puntos por GN⁺ 2024-08-24 | Aún no hay comentarios. | Compartir por WhatsApp

Extensión exportadora de archivos objeto para Ghidra

Esta extensión de Ghidra permite exportar parte de un programa como archivo objeto. Estos archivos objeto cuentan con metadatos válidos (símbolos, tablas de reubicación, etc.), por lo que pueden reutilizarse directamente en una toolchain.

Casos de uso

  • Patching binario avanzado: combinar el original y las partes modificadas usando el linker en lugar de hacerlo manualmente
  • Portabilidad de software: separar del programa el código independiente del sistema y reemplazar el resto
  • Conversión de formatos de archivo: convertir un programa o archivo objeto a otro formato de archivo
  • Creación de librerías: extraer parte de un programa para reutilizarla en otro contexto
  • Proyectos de decompilación: dividir un programa en varios archivos objeto y reimplementarlo

Arquitecturas de conjunto de instrucciones y formatos de archivo objeto compatibles

  • x86: COFF (compatible), ELF (compatible)
  • MIPS: COFF (no compatible), ELF (compatible)

Compilación (CLI)

  • Clona este repositorio
  • Configura la variable de entorno GHIDRA_INSTALL_DIR con el directorio de instalación de Ghidra
  • Ejecuta el comando gradle buildExtension
  • El archivo de extensión de Ghidra se genera en el directorio dist/

Instalación

  • Descarga la extensión desde la página de releases o compílala localmente
  • Instala la extensión en una instancia de Ghidra desde File > Install Extensions…
  • En la ventana CodeBrowser, activa el plugin RelocationTableSynthesizedPlugin desde File > Configure

Uso

  1. Selecciona un conjunto de direcciones en la vista Listing
  2. Ejecuta el analizador Relocation table synthesizer (puede usarse en modo one-shot)
  3. Invoca el exportador de archivos objeto reubicables desde File > Export Program…
  4. Puedes revisar la tabla de reubicación reconstruida en Window > Relocation table(synthesized)
  • ⚠️ El analizador Relocation table synthesizer requiere una base de datos de Ghidra completamente rellenada (símbolos, tipos de datos y referencias declarados con precisión). La información incorrecta o faltante puede provocar reubicaciones erróneas o no detectadas durante el análisis
  • ⚠️ El exportador de archivos objeto depende de los resultados del analizador Relocation table synthesizer. Antes de exportar un archivo objeto, ejecuta este analizador para asegurarte de que el contenido de la tabla de reubicación esté actualizado

Cómo funciona

Un archivo objeto consta de tres partes:

  • bytes de secciones reubicables
  • tabla de símbolos
  • tabla de reubicación

Cuando el linker genera un ejecutable a partir de varios archivos objeto:

  • coloca las secciones en memoria
  • calcula las direcciones de los símbolos en el espacio de direcciones virtual
  • aplica las reubicaciones a los bytes de las secciones según las direcciones finales de los símbolos

Normalmente, después de este proceso la tabla de reubicación se descarta y, a menos que se conserven los símbolos de depuración, la tabla de símbolos también se descarta. Sin embargo, mediante un análisis cuidadoso es posible regenerar estos datos, lo que permite volver a delink un programa en forma de archivo objeto.

Resumen de GN⁺

  • Esta extensión de Ghidra permite exportar parte de un programa como archivo objeto.
  • Tiene varios casos de uso, como patching binario avanzado, portabilidad de software y conversión de formatos de archivo.
  • Requiere una base de datos precisa y es importante ejecutar el analizador antes de exportar el archivo objeto.
  • Entre los proyectos con funciones similares hay decompiladores como IDA Pro.

Aún no hay comentarios.

Aún no hay comentarios.