Uso de Radare2 examinando un programa en C

Radare2 ó r2 es un framework completo para la ingeniería inversa y el análisis de binarios. Compuesto de un conjunto de pequeñas utilidades que se pueden usar juntas o independientemente de la línea de comandos. Es de código abierto y esta liberado bajo la licenciancia LGPL.

https://radare.org

http://github.com/radare/radare2

Búsqueda de contraseña

Esta es una práctica donde se utiliza la herramienta Radare2 para analizar el código de un ejecutable escrito en C. El programa realiza una autenticación sencilla, pide una contraseña y compara. La misión es descubrir cual es la contraseña que genere un resultado satisfactorio.

Al ejecutar el programa a el programa pide la contraseña a través de la terminal y al intentar ingresarla muestra un mensaje de que no es la correcta.

Como primer paso corremos el ejecutable desde Radare2:

$ r2 ./ejecutable

Esto abre la consola de r2, donde se ejecutan las instrucciones  de análisis para el programa que ejecutamos, lo primero que vemos es un mensaje de ayuda, seguido de la la dirección en memoria, esta dirección de memoria indica su posición actual en el archivo.

Después se ejecuta el comando aaa para  analizar el binario,  con este cual se desensambla el ejecutable para poder analizarlo detenidamente.

Ahora para poderlo analizar se utiliza  la orden pdf (print disassemble function)  y se obtiene la siguiente salida.

Aquí se puede analizar la estructura del programa, se observa que contiene la función principal de un programa en C sys.main

La orden pdf  permite desensamblar las funciones y la muestra, para este caso conviene analizar la función principal, esto se hace con la orden pdf@main.

Una vez dentro de la función main se tiene que buscar en qué parte se aloja la contraseña. A partir de la deducción de que estos valores por lo general se instancian al inicio del programa, la búsqueda se centra en la parte superior, se observan dos funciones de push al inicio, esto significa que a esas direcciones de memoria se están moviendo datos, se empezará la búsqueda por estas direcciones.
Para leer los valores que están en estas direcciones se usa la orden  pxw seguido de la dirección que empieza con @ y la dirección que se observa en la parte izquierda.

Se observa en la segunda y tercera caracteres diferentes a las demás filas, y observando detenidamente se alcanza a diferenciar una d1p al final de la segunda linea, al inicio de la segunda se diferencia l0h@c, el primer intento fue con d1pl0h@c, pero no funciono, a cada espacio de memoria le caben 8 caracteres, por esta razón la contraseña no se guardo completa en uno solo, observando un poco mejor se ve que al final de la tercera linea se ve k1n y al inicio de la cuarta g. Entonces se intenta con d1pl0h@ck1ng y …