¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Encontrar dónde decide un programa con radare2

Después de esta lección: Puedo encontrar la instrucción donde un programa decide qué camino seguir.

Lección de 55 min4 comandosLaboratorio de ingeniería inversa: leer programas con gdb, radare2, strace y ltrace en una VM

Qué es radare2

radare2 es una herramienta de línea de comandos que desensambla un binario y da nombre a lo que encuentra: funciones, textos y saltos. Con ella localizas el punto exacto donde un programa decide si algo es válido o no.

Un programa que comprueba un código de descuento tiene un punto así: una comparación y un salto. Esta lección enseña a encontrarlo.

Al final de esta lección

Nota

Puedo encontrar la instrucción donde un programa decide qué camino seguir.

Palabras clave

PalabraQué significaEjemplo
radare2una herramienta para analizar y desensamblar binariosr2
Análisispedir a radare2 que busque funciones y textosaa
Funciónun tramo de código con nombre que se puede llamar
Bloque básicoun tramo de instrucciones sin saltos por el medio
Referencia cruzadaun lugar del código que usa un dato o llama a una función

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

radare2 analiza y pone nombres

Si escribes r2 archivo, entras en una consola propia de radare2, de la que sales con q. Los Runs usan -q y -c para que cada uno haga una cosa y termine.

aa pide el análisis. pdf @ main imprime la función main desensamblada. Recuerda la regla: solo programas del laboratorio. El primer Run crea tienda, un programa de ejemplo nuestro.

Crea el programa de ejemplo tienda

Comando
printf '#include <stdio.h>\n#include <string.h>\nint main(int argc, char **argv) {\n    if (argc == 2 && strcmp(argv[1], "REBAJAS26") == 0) { puts("Descuento aplicado"); return 0; }\n    puts("Codigo incorrecto");\n    return 1;\n}\n' | gcc -O0 -no-pie -x c -o /tmp/tienda -

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Filtra las líneas clave de main

Comando
r2 -q -e scr.color=0 -c aa -c 'pdf @ main' /tmp/tienda 2>/dev/null | grep -E "cmp|test|call|j[a-z]+ "

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un salto parte main en caminos

Lee las líneas en orden. El primer cmp mira cuántos argumentos hay. Después viene un call a strcmp, que compara dos textos.

strcmp deja un cero en eax si los textos son iguales. test eax, eax mira ese valor, y jne salta al mensaje de error si no es cero. El diagrama dibuja los caminos.

Pregunta quién usa el texto del código

Comando
r2 -q -e scr.color=0 -c aa -c 'axt str.REBAJAS26' /tmp/tienda 2>/dev/null

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cuenta los bloques básicos de main

Comando
r2 -q -e scr.color=0 -c aa -c 'afb @ main' /tmp/tienda 2>/dev/null | wc -l

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que el jne que sigue a strcmp es el salto del éxito. Es al revés. jne salta cuando el resultado no es cero, es decir, cuando los textos son distintos. Con el código correcto, el programa sigue recto.

Para ir más lejos

Ejecuta r2 -q -e scr.color=0 -c aa -c izz /tmp/tienda en el terminal. izz lista todos los textos del binario, no solo los de la parte de datos.

Compara la lista con la de strings. Después explica con tus palabras qué ventaja tiene que radare2 diga además qué función usa cada texto.

Sobre este laboratorio y su código: Laboratorio de ingeniería inversa: leer programas con gdb, radare2, strace y ltrace en una VM

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.