Ghidra: cómo analizar un programa sin tener su código fuente

Ghidra permite analizar programas compilados sin tener su código fuente: puedes examinar sus instrucciones, descompilar funciones y explorar su lógica.

Resulta útil cuando una investigación te lleva a un binario: un ejecutable heredado, una biblioteca nativa o un componente cuyo comportamiento no explica la documentación. Tienes el programa. Lo que necesitas es una forma de examinar qué hace.

¿Qué es Ghidra y para qué sirve?

Ghidra es una herramienta gratuita y de código abierto para la ingeniería inversa de software, creada y mantenida por la Dirección de Investigación de la NSA.

Reúne funciones para inspeccionar instrucciones de máquina, reconstruir código de alto nivel, visualizar la estructura de un programa y automatizar análisis. Admite distintas arquitecturas de procesador y formatos de ejecutables, tanto en sesiones interactivas como en procesos automatizados. Puedes consultar sus capacidades en el repositorio oficial.

Para un desarrollador, conviene empezar con una pregunta concreta. ¿Dónde se origina este error? ¿Qué ocurre antes de que esta función devuelva un resultado? ¿Qué parte de un componente nativo procesa determinada entrada?

Esas preguntas delimitan la investigación. Entender un ejecutable desconocido completo en el primer intento es un trabajo mucho mayor.

¿Qué es ingeniería inversa?

La ingeniería inversa consiste en estudiar un sistema existente para comprender cómo está construido o cómo funciona. En este caso, partes del programa compilado y analizas sus instrucciones para reconstruir una explicación de su comportamiento.

Ghidra proporciona herramientas para ese proceso, conocido también como reverse engineering. Una aplicación práctica es investigar software cuyo código fuente no tienes disponible.

¿Se puede recuperar el código fuente con Ghidra?

Ghidra genera una representación similar a C de las funciones compiladas; no debes esperar que reconstruya el proyecto original.

Su descompilador reconstruye expresiones, variables y llamadas a funciones a partir del binario. El resultado cambia conforme aportas información, como nombres, tipos de datos y firmas de funciones. Las vistas de ensamblador y código descompilado están conectadas, lo que permite examinar las instrucciones detrás de una expresión de alto nivel. Así lo describe la documentación oficial del descompilador.

Trata ese resultado como un análisis que vas refinando. Una función legible es un buen punto de partida, pero todavía necesitas revisar los tipos y nombres inferidos. Comprender qué hace exige comprobar la evidencia detrás de esa representación.

La distinción importa al leer una condición o una llamada: el código puede parecer tan familiar que te lleve a confiar en una interpretación antes de haberla verificado.

¿Cómo instalar Ghidra?

Descarga la distribución oficial y sigue la documentación de esa versión.

Al momento de preparar esta nota, el 16 de septiembre de 2026, GitHub identifica Ghidra 12.1.3 como la última versión publicada. Descarga el ZIP de la distribución desde Assets en la página de versiones. Los archivos de código fuente generados automáticamente no son la distribución lista para ejecutar.

Para esa versión:

  1. Instala el JDK 21 de 64 bits indicado en su documentación.
  2. Extrae la distribución en una carpeta nueva, sin sobrescribir una instalación anterior.
  3. En Windows, ejecuta ghidraRun.bat. En Linux o macOS, ejecuta ./ghidraRun desde la carpeta extraída, una vez satisfechos los requisitos de tu plataforma.

Hay una diferencia entre plataformas: la guía de esa versión incluye componentes nativos precompilados para Windows y Linux x86-64; para macOS y Linux ARM64 indica que debes compilarlos. Sigue las instrucciones específicas de la guía de instalación de la versión. Las funciones del depurador y de PyGhidra también requieren Python.

¿Cómo usar Ghidra para analizar un programa?

Crea un proyecto local, importa un ejecutable pequeño y deja que Ghidra realice el análisis inicial.

Para el primer ejercicio, utiliza un programa nativo pequeño que hayas compilado tú. Conserva su código fuente para contrastar tu interpretación con algo que conoces.

  1. Selecciona File → New Project, elige Non-Shared y asigna un nombre y una ubicación al proyecto.
  2. Selecciona File → Import File… e importa el ejecutable. Comprueba el formato y el lenguaje detectados.
  3. Abre el programa importado en CodeBrowser y acepta la propuesta de análisis.
  4. Selecciona una función y examina su representación descompilada junto al ensamblador.

El análisis automático identifica funciones y referencias cruzadas siguiendo el flujo del código. Si Ghidra no reconoce el archivo y lo presenta como un binario sin formato, tendrás que indicar la combinación adecuada de lenguaje y compilador. Para este primer ejercicio, elige un ejecutable que reconozca. El procedimiento está desarrollado en la guía oficial para principiantes.

Ponte un objetivo concreto: encuentra una bifurcación que reconozcas de tu programa y explica qué la controla. Después, compara tu explicación con el código fuente.

Así obtienes un primer resultado útil sin tener que comprender todas las funciones que incluyó el compilador.

¿Cómo automatizar el análisis con Ghidra?

Ghidra permite ejecutar análisis por lotes sin interfaz gráfica, en modo headless, y PyGhidra ofrece acceso mediante Python 3. Ambas opciones están documentadas entre sus modos de ejecución.

Completa primero una investigación manual. Cuando sepas qué información necesitas obtener de forma repetida, tendrás una base más clara para decidir qué automatizar.

Una buena primera sesión termina con un resultado modesto y verificable: identificaste una función, comprendiste una decisión que toma y contrastaste esa interpretación con el programa. Es un primer paso útil para trabajar con software cuyo código fuente no puedes consultar.