>_
Terminal
guest@dsr: ~
guest@dsr:~$ ./welcome.sh
guest@dsr:~$ cat 2025-10-24-radare2.md
Última modificación: 24-10-2025

Radare 2

Author: Pablo San Emeterio Día : Día 1

Contexto general

Esta charla va de cómo usar radare2 (r2) para analizar binarios, hacer reversing y resolver retos de cracking. El rollo es aprender el flujo básico de trabajo: desde abrir un binario hasta descompilarlo y entender qué hace el código a nivel de ensamblador. Se cubren los comandos esenciales, cómo integrar decompiladores (Ghidra) y hasta cómo usar IA para ayudar con la descompilación. Es especialmente útil para CTFs y análisis de malware.

Conceptos clave

  • Comandos de información básica: i (info general), ii (imports), iS (secciones), iS= (secciones visual), iz (strings data), izz (todas las strings)
  • Análisis del binario: aaa analiza todo el binario (funciones, referencias, etc.), afl lista todas las funciones encontradas
  • Navegación: s main te mueve a la función main, básicamente es como hacer un "seek" a esa dirección
  • Desensamblado: pdf (print disassemble function) muestra el desensamblado de la función actual
  • Modo visual: VV entra en modo visual con grafos de flujo, muy útil para ver branches y seguir el flujo del programa
  • Descompilación con Ghidra: pdg usa el decompilador de Ghidra integrado en r2
  • Descompilación con IA:
    • decai -d descompila usando IA
    • decai -x extrae y analiza con IA
    • Configuración para ChatGPT: decai -e api=openai, decai -e model=gpt-4, decai -e lang=c, decai -e hlang=es, decai -e cmds=pdc,pdg,pdd

Desarrollo técnico

El flujo típico de trabajo en r2 sería: abres el binario con r2 ./binario, haces un análisis completo con aaa, luego afl para ver qué funciones hay. Te mueves a main con s main y empiezas a investigar con pdf o entras en modo visual VV para ver el grafo de control.

Para reversing más cómodo, usas pdg que tira del decompilador de Ghidra y te da pseudocódigo en C. Si el código es complejo o quieres ayuda extra, decai te puede echar un cable usando modelos de IA (local con Ollama o cloud con OpenAI) para explicar qué hace el código y hasta traducirlo a lenguaje natural.

Herramientas y comandos mencionados

Instalación de herramientas:

  • Ghidra: apt install ghidra
  • radare2: clonar desde GitHub y ejecutar ./sys/install.sh
  • r2ghidra: r2pm -U && r2pm -ci r2ghidra (decompilador Ghidra para r2)
  • r2dec: r2pm -ci r2dec (otro decompilador)
  • r2ai: r2pm -ci r2ai && r2pm -ci r2ai-server && r2pm -ci decai (soporte IA)
  • Ollama: curl -fsSL https://ollama.com/install.sh | sh y luego ollama run qwen2.5:latest

Comandos r2 clave:

  • aaa → análisis completo del binario
  • pdf → desensamblado de función actual
  • s main → ir a main
  • VV → modo visual con grafos
  • pdg → decompilador Ghidra
  • decai -d → descompilar con IA

Ejemplos prácticos de reversing

Ejemplo 1: Comparación simple con strcmp

El programa pide una contraseña y usa strcmp para compararla con "THisISMyCheckIt2025==". En ensamblador verías algo como:

call sym.imp.gets     ; lee input
lea rdi, [buffer]
lea rsi, str.THisISMyCheckIt2025__
call sym.imp.strcmp   ; compara
test eax, eax         ; si retorna 0 = iguales
jne fail              ; si no es 0, salta a fail

Bypass: Puedes parchear el jne por un je (invertir el salto), o directamente saltar el strcmp y forzar que eax sea 0 antes del test. También puedes simplemente sacar la string de memoria con izz y listo.

Ejemplo 2: Comparación char a char

Este es más retorcido. Compara cada posición del buffer contra un char específico:

  • buffer[0] == 'E'
  • buffer[1] == 's'
  • buffer[2] == 't'
  • etc.

La contraseña correcta sería: EstaVezNoHayFuncion2025==

En ensamblador verías un montón de comparaciones consecutivas:

cmp byte [rbp-0x12c], 0x45  ; buffer[0] == 'E'
jne fail
cmp byte [rbp-0x12b], 0x73  ; buffer[1] == 's'
jne fail
...

Bypass: Puedes parchear todos los jne para que nunca salten (convertirlos a nop), o directamente reconstruir la string mirando todos los valores que compara en orden. Con pdf y paciencia, sacas los chars uno a uno.

Conclusiones

Radare2 es bestial para reversing si te aprendes el workflow básico: analizar, navegar, desensamblador/decompilador, y modificar si hace falta. La integración con Ghidra y las herramientas de IA hacen que sea mucho más llevadero entender qué hace un binario sin tener que leer ASM puro durante horas.

Para retos tipo CTF, el combo aaa + afl + s main + pdg te resuelve el 80% de los challenges básicos. Para cosas más complejas, tener decai configurado con un modelo decente puede ahorrarte un montón de tiempo.

Para investigar más

  • Aprender a usar r2pipe para scripting y automatización
  • Profundizar en patching de binarios con r2 (comandos w)
  • Estudiar más sobre análisis de malware con r2
  • Explorar r2frida para análisis dinámico en Android/iOS
  • Comparar r2 vs Ghidra standalone vs IDA para ver qué herramienta va mejor según el caso

<< cd ..

>_