Parte: 5 — Explotación de sistemas y binarios · Fuente: Andriesse, Practical Binary Analysis · docs de la NSA/Ghidra ⏱️ Duración estimada: 130 min · Nivel: Intermedio
Aprender a usar Ghidra, el framework libre de ingeniería inversa de la NSA, para desensamblar y
decompilar binarios a pseudo-C legible. Verás cómo crear un proyecto, navegar por funciones,
renombrar variables, corregir tipos y usar el decompilador para entender la lógica de un crackme
mucho más rápido que leyendo ensamblador puro.
⚠️ Ética: analiza solo binarios propios/autorizados.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Proyecto e importación | Punto de partida |
| 2 | Auto-análisis | Ghidra reconstruye funciones y tipos |
| 3 | Listing vs Decompiler | ASM detallado vs C legible |
| 4 | Renombrar y comentar | Documentar hallazgos |
| 5 | Retipado de estructuras | Legibilidad de structs/arrays |
| 6 | Xrefs | Rastrear flujo de datos y llamadas |
| 7 | Bookmarks y symbol tree | Organizar el análisis |
| 8 | Scripting (GhidraScript) | Automatizar y extraer |
Ctrl+Shift+F
para ver quién llama a una función.# Requiere JDK; descarga Ghidra desde el sitio oficial:
# https://ghidra-sre.org/ (o el repo de GitHub de la NSA)
# Descomprime y ejecuta:
./ghidraRun
Ten a mano un crackme de práctica (por ejemplo, el de la clase 130).
Entorno propio.
Crea un proyecto no compartido (File → New Project), importa el crackme y acepta el auto-análisis.
En el Symbol Tree abre main; observa el panel Decompiler (pseudo-C) junto al Listing.
Localiza la comparación de la clave. Renombra variables genéricas (local_28 → input,
uVar1 → len) con L para clarificar la lógica.
Sigue las xrefs de la cadena del prompt: haz doble clic en la string en Defined Strings y usa
References → Show References to.
Retipa un buffer como char[32] para que el decompilador muestre la clave esperada de forma legible.
Deduce la contraseña/serial válido a partir del pseudo-C (comparación, transformación, longitud).
(Opcional) Escribe un GhidraScript en Python que liste todas las funciones que llaman a strcmp.
Verifica tu hipótesis ejecutando el crackme con la clave deducida.
main hasta que el pseudo-C sea autoexplicativo.struct para un objeto que el binario usa y aplícala.Usando solo Ghidra (sin ejecutar hasta el final), deduce la clave válida de un crackme y luego
compruébala ejecutándolo.
Criterio de aceptación: el crackme acepta la clave que dedujiste del pseudo-C, y documentas en
comentarios de Ghidra cómo llegaste a ella.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Decompilado ilegible | Renombra/retipa variables; define structs |
| Ghidra no arranca | Falta JDK compatible; instala el JDK requerido |
| Funciones no reconocidas | Reejecuta auto-análisis o define funciones manualmente |
| El decompilador "miente" | Contrasta con el Listing (ASM) real |
| Strings no aparecen | Están cifradas; combínalo con análisis dinámico |
❓ ¿Ghidra o IDA? Ghidra es gratuito y muy capaz; IDA es el estándar comercial. Aprende ambos si puedes (IDA/radare2 en la clase 132).
❓ ¿El decompilado es fiable? Es una aproximación; para detalles finos (offsets, flags) confía en el Listing.
❓ ¿Puedo automatizar? Sí, con GhidraScript o el modo headless (analyzeHeadless) para lotes.
Clase 130 — Ingeniería inversa: introducción