IntermedioGhidraIDA ProRadare2reverse engineeringdecompiladoresanálisis de malware

Ghidra vs IDA vs Radare2: Comparativa de Reversing Frameworks

Comparativa exhaustiva de los tres principales frameworks de reverse engineering: Ghidra (NSA), IDA Pro (Hex-Rays) y Radare2/Rizin. Funcionalidades, decompiladores, scripting, precio y cuándo usar cada uno para análisis de malware.

MalwareIntel Research··9 min lectura

El papel del desensamblador en análisis de malware

El desensamblador (o disassembler) es la herramienta central del reverse engineering. Convierte código máquina binario en instrucciones de ensamblador legibles, y en el mejor caso, en pseudocódigo C/C++ (decompilación). Para el análisis de malware, el desensamblador permite entender qué hace un binario sin ejecutarlo: qué funciones llama, qué datos manipula, cómo se comunica con el C2, dónde persiste y cómo evade la detección.

Tres frameworks dominan el mercado: IDA Pro (comercial, estándar de la industria), Ghidra (gratuito, NSA) y Radare2/Rizin (gratuito, CLI). Cada uno tiene filosofía, fortalezas y debilidades diferentes.

Ghidra

Historia y contexto

Ghidra fue desarrollado por la NSA como herramienta interna durante más de una década antes de ser publicado como software de código abierto en marzo de 2019 durante la conferencia RSA. Su liberación transformó el panorama del reverse engineering: por primera vez, un desensamblador y decompilador de calidad profesional estaba disponible gratuitamente.

Instalación

# Requisitos: JDK 17+
# Descargar desde https://ghidra-sre.org/

# Linux / macOS
unzip ghidra_X.Y.Z_PUBLIC.zip
cd ghidra_X.Y.Z_PUBLIC
./ghidraRun

# Windows
# Ejecutar ghidraRun.bat

Características principales

Decompilador integrado: Ghidra incluye un decompilador que produce pseudocódigo C legible para múltiples arquitecturas. Es la funcionalidad más valiosa y la que más tiempo ahorra en análisis.

Multi-arquitectura: soporta x86, x64, ARM, MIPS, PowerPC, SPARC, y muchas más. Ideal para análisis de malware IoT y firmware.

Scripting con Java y Python: Ghidra permite automatización completa con scripts:

# Ghidra Python script: extraer strings interesantes
from ghidra.program.model.data import StringDataType

listing = currentProgram.getListing()
for string in listing.getStrings(True):
    value = string.getValue()
    if any(kw in value.lower() for kw in ["http", "cmd", ".exe", "reg "]):
        print(f"[*] {string.getAddress()}: {value}")

Collaboration Server: permite trabajo en equipo sobre el mismo proyecto, con control de versiones de anotaciones y análisis.

Patch Diffing: comparación de binarios para identificar cambios entre versiones (útil para análisis de parches de seguridad).

Flujo de trabajo en Ghidra

1. CREAR PROYECTO
   File → New Project → nombre del caso

2. IMPORTAR BINARIO
   File → Import File → seleccionar muestra
   Ghidra detecta formato (PE, ELF, Mach-O) automáticamente

3. ANÁLISIS AUTOMÁTICO
   Aceptar "Auto Analysis" cuando Ghidra lo sugiera
   Opciones importantes:
   - Aggressive Instruction Finder: sí
   - Decompiler Parameter ID: sí
   - WindowsPE x86 Propagate External Parameters: sí (para PE)

4. NAVEGACIÓN
   - Symbol Tree: funciones, imports, exports, clases
   - Listing: vista de desensamblado
   - Decompile: pseudocódigo C
   - Defined Strings: todas las strings del binario

5. ANÁLISIS MANUAL
   - Renombrar funciones con nombres descriptivos
   - Añadir comentarios
   - Definir tipos de datos de estructuras
   - Seguir references (Ctrl+Shift+F para buscar XRefs)

Strengths y weaknesses

Fortalezas:

  • Gratuito y open source
  • Decompilador potente incluido
  • Multi-arquitectura (ARM, MIPS, etc.)
  • Scripting extensivo (Java/Python)
  • Collaboration server para equipos
  • Comunidad activa y creciente

Debilidades:

  • Interfaz Java puede ser lenta
  • El auto-analysis es más lento que IDA
  • La decompilación de código C++ complejo es inferior a Hex-Rays
  • Debugging limitado (requiere plugins adicionales)
  • Curva de aprendizaje de la interfaz

IDA Pro

Historia y contexto

IDA (Interactive DisAssembler) fue creado por Ilfak Guilfanov en los años 90 y se convirtió en el estándar de la industria para reverse engineering. Hex-Rays, el decompilador que se vende como complemento de IDA, produjo la primera decompilación a pseudocódigo C de calidad comercial y sigue siendo la referencia del mercado.

Versiones disponibles

VersiónPrecioDecompiladorArquitecturasUso
IDA FreeGratisNox86, x64, ARMAprendizaje
IDA Home~365 EUR/añoCloud (limitado)x86, x64, ARMUso personal
IDA ProMiles de EURHex-Rays (local)TodasProfesional

Características principales

Hex-Rays Decompiler: el decompilador más maduro y preciso del mercado. Produce pseudocódigo C/C++ de alta calidad incluso para código optimizado y ofuscado.

FLIRT (Fast Library Identification and Recognition): identifica automáticamente funciones de librerías estándar (CRT, STL, WinAPI), reduciendo drásticamente el ruido en el análisis.

IDAPython: scripting con Python integrado, con acceso completo a la API de IDA:

# IDAPython: listar todas las funciones que llaman a CreateRemoteThread
import idautils
import idc

for xref in idautils.CodeRefsTo(idc.get_name_ea_simple("CreateRemoteThread"), 0):
    func = idaapi.get_func(xref)
    if func:
        print(f"[!] {idc.get_func_name(func.start_ea)} calls CreateRemoteThread at {hex(xref)}")

Type Libraries: extensa colección de definiciones de tipos para APIs de Windows, Linux, macOS y frameworks comunes.

Debugger integrado: debugging local y remoto con soporte para Windows, Linux, macOS y vía GDB/LLDB.

Strengths y weaknesses

Fortalezas:

  • Decompilador Hex-Rays: el mejor del mercado
  • FLIRT: identificación de librerías excepcional
  • Velocidad de análisis superior
  • Estabilidad: décadas de madurez
  • Plugins y comunidad masiva
  • Type Libraries extensas
  • Debugger integrado potente

Debilidades:

  • Precio alto (miles de euros para uso comercial)
  • Licenciamiento por plataforma (cada arquitectura se paga aparte)
  • Código cerrado
  • IDA Free es muy limitada
  • La interfaz, aunque funcional, muestra su edad

Radare2 / Rizin

Historia y contexto

Radare2 (r2) fue creado por pancake (Sergi Álvarez) en 2006 como una herramienta de línea de comandos para reverse engineering. Su filosofía es la de las herramientas Unix: hacer una cosa bien, combinable con otras herramientas, y completamente scriptable.

Rizin es un fork de Radare2 (2020) con enfoque en estabilidad, API limpia y Cutter como GUI oficial. Ambos proyectos coexisten y comparten mucha funcionalidad.

Instalación

# Radare2
git clone https://github.com/radareorg/radare2.git
cd radare2
sys/install.sh

# Rizin (fork)
meson setup build
ninja -C build
sudo ninja -C build install

# Cutter (GUI para Rizin)
# Descargar AppImage desde https://cutter.re/

Uso básico

# Abrir un binario
r2 sample.exe

# Analizar el binario
[0x00401000]> aaa    # Analyze All Autoname

# Listar funciones
[0x00401000]> afl    # Analyze Function List

# Ir a main
[0x00401000]> s main

# Desensamblado
[0x00401000]> pdf    # Print Disassembly Function

# Buscar strings
[0x00401000]> iz     # Strings in data sections
[0x00401000]> izz    # All strings

# Buscar patrones
[0x00401000]> / http://    # Buscar string literal
[0x00401000]> /x 4d5a      # Buscar bytes hex (MZ header)

# Cross references
[0x00401000]> axt @@ sym.*  # XRefs a todos los símbolos

# Modo visual
[0x00401000]> V     # Visual mode
[0x00401000]> VV    # Graph mode

# Decompilación (requiere plugin r2ghidra)
[0x00401000]> pdg   # Decompile con Ghidra

Scripting y automatización

Radare2 brilla en automatización:

# Script r2pipe (Python)
import r2pipe

r2 = r2pipe.open("sample.exe")
r2.cmd("aaa")

# Listar funciones sospechosas
functions = r2.cmdj("aflj")
suspicious_apis = ["VirtualAlloc", "CreateRemoteThread", "WriteProcessMemory"]

for func in functions:
    disasm = r2.cmd(f"pdf @ {func['offset']}")
    for api in suspicious_apis:
        if api in disasm:
            print(f"[!] {func['name']} calls {api}")

r2.quit()
# One-liner para extraer strings de un directorio de muestras
for f in samples/*; do r2 -q -c "iz~http" "$f"; done

Cutter (GUI)

Cutter proporciona una interfaz gráfica moderna para Rizin/Radare2:

  • Vista de grafo de funciones
  • Decompilador integrado (Ghidra como backend)
  • Panel de strings, imports, exports
  • Debugger visual
  • Temas personalizables
  • Plugins de la comunidad

Strengths y weaknesses

Fortalezas:

  • Completamente gratuito y open source
  • CLI potente para automatización
  • Ideal para scripting y pipelines
  • Ligero (funciona en cualquier sistema)
  • r2pipe: scriptable desde Python, JS, Go, Rust
  • Cutter: GUI moderna y funcional
  • Soporte para muchas arquitecturas

Debilidades:

  • Curva de aprendizaje muy alta (CLI con comandos crípticos)
  • Decompilador nativo no incluido (requiere r2ghidra plugin)
  • La documentación puede ser inconsistente
  • La comunidad es más técnica y menos accesible
  • La estabilidad ha mejorado pero aún tiene bugs edge-case

Comparativa directa

Funcionalidades

CaracterísticaGhidraIDA ProRadare2/Rizin
PrecioGratisMiles EURGratis
Código abiertoNo
DecompiladorIncluidoHex-Rays (extra)Plugin (r2ghidra)
GUISí (Java)Sí (Qt)Cutter (Qt)
CLILimitadaLimitadaExcelente
ScriptingJava/PythonIDAPythonr2pipe (multi-lang)
Velocidad análisisMediaRápidaMedia
Multi-archExcelenteExcelenteExcelente
DebuggerPluginIntegradoIntegrado
CollaborationServer nativoNo nativoNo nativo
PluginsCreciendoEnormeActiva

Calidad de decompilación

EscenarioGhidraHex-Raysr2ghidra
C simpleExcelenteExcelenteBueno
C++ con STLBuenoExcelenteAceptable
Código optimizado (O2)BuenoExcelenteAceptable
Código ofuscadoAceptableBuenoAceptable
Go binariesBuenoBuenoAceptable
Rust binariesAceptableBuenoLimitado
.NET (con plugin)BuenoBuenoLimitado

Cuándo usar cada uno

EscenarioRecomendación
Analista SOC/CTI (triage rápido)Ghidra
Reverse engineering profesionalIDA Pro (si hay presupuesto)
Automatización y pipelinesRadare2
Análisis de IoT/firmware (ARM, MIPS)Ghidra o Radare2
Formación y aprendizajeGhidra
Empresa con presupuestoIDA Pro + Ghidra
Investigador individualGhidra + Radare2
CTF y competicionesGhidra o Radare2

Herramientas complementarias

Independientemente del framework elegido, estas herramientas complementan el análisis:

HerramientaUso
Binary NinjaDesensamblador comercial intermedio (precio entre Ghidra y IDA)
x64dbgDebugger dinámico para Windows (complementa al desensamblador estático)
capaDetección automática de capacidades mapeadas a ATT&CK
FLOSSExtracción de strings ofuscadas
Detect It EasyIdentificación de packer/compilador
dnSpyDecompilador específico para .NET
JD-GUIDecompilador específico para Java

Recomendación práctica

Para un analista de malware que empieza:

  1. Empezar con Ghidra: es gratuito, tiene decompilador incluido, y la comunidad tiene muchos tutoriales
  2. Aprender los conceptos: funciones, control flow, calling conventions, API patterns
  3. Complementar con Radare2/Cutter: para automatización y análisis rápido desde CLI
  4. IDA Pro solo si la empresa lo proporciona: la inversión personal no se justifica cuando Ghidra es tan capaz

Para un equipo profesional de análisis de malware:

  1. IDA Pro como herramienta principal (el ROI del tiempo ahorrado justifica el coste)
  2. Ghidra como segunda herramienta (colaboración, arquitecturas exóticas, scripts personalizados)
  3. Radare2 para automatización en pipelines de análisis

El ecosistema de reverse engineering nunca ha sido tan accesible. Con Ghidra gratuito y un decompilador incluido, la barrera de entrada para el análisis de malware se ha reducido enormemente. La elección del framework es menos importante que el conocimiento de los conceptos fundamentales de reverse engineering.

Preguntas frecuentes

Artículos relacionados

Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.