Introducción a radare

El 26 de abril los compis de labrechadigital dieron en su centro una charla sobre radare https://labrecha.digital/Event:2017/04/26_crackmes_con_radare2 muy interesante a la que desgraciadamente no puede acudir :( Había oído hablar de esta maravillosa herramienta, pero no fue hasta saber lo de la charla que me pico el gusanillo de investigar como funciona, y después de hacerlo creo necesario, explicar aunque sea minimamente(es una herramienta muy completa), el funcionamiento de esta herramienta con algunas sencillos ejemplos, para que todo el mundo pueda perder el “miedo” inicial a usar este tipo de herramientas mas “técnicas” como vimos en la caso de ensamblador.

¿Que es radare?
Radare es un completísimo framework, que nos proporciona las herramientas necesarias para poder realizar “ingeniería inversa” y analizar todo tipo de binarios.

Instalando
Radare tiene soporte para: Android, GNU/Linux, [Net|Free|Open]BSD, iOS, OSX, QNX, w32, w64, Solaris, Haiku, FirefoxOS.

La mejor manera de tener radare actualizado es usar el repositorio de github

git clone https://github.com/radare/radare2.git

Y utilizar los scripts diseñados para su instalación, hay dos scripts uno para instalación en el sistema bajo usuario root(sys/install.sh) y otro en el /home como usuario normal(sys/user.sh)

 /sys/install.sh 

/sys/user.sh

Si tenemos fallos a la hora de ejecutar los scripts es porque no tenemos instaladas las siguientes dependencias(gcc,make,patch) en nuestra distribución.

Usando radare Para ejecutar radere tan solo tenemos que usar el comando radare2 o r2 y indicarle los parámetros, para empezar nosotros vamos a cargar un sencillo hola mundo, que previamente hemos compilado en c.

r2 holamundo

Ahora que tenemos el programa cargado nos aparecerá un prompt tal que así:

Modo visual

Radare, dispone de un modo visual, por si no estamos muy familiarizados con los comandos para ello una vez cargado del programa y estando en el prompt tan solo tenemos que pulsar la tecla V y enter nos aparecerá una pantalla como la siguiente: donde nos podremos mover con las flechas de dirección, y las columnas con la tecla tab.

Este modo visual es por defecto solo de lectura pero podemos cambiarlo presionando la tecla i también podemos acceder al ensamblador pulsando la tecla A si lo hacemos veríamos nuestro programa del siguiente modo:

Ejemplo La mejor manera de ilustrar las diferencias entre radare y un desamblador como gdb, es ilustrarlo con un ejemplo, para ello vamos a hacer uso del sencillo crackme de https://elbinario.net/2017/03/03/trasteando-con-ensamblador-final/ y vamos a analizarlo con radare

Compilamos de nuevo nuestro ejemplo de crackme y lo ejecutamos normalmente, desconociendo el password

Ejecutamos radare y usamos aa para activar el análisis de todo

Pulsamos fs para listar todas las flags disponibles

Tecleamos fs strings para indicar que lo que estamos buscando son strings
Tecleamos *f para mostrar los strings encontrados

El primer string es ¡nuestra clave !

Como podéis ver con radare, es mucho mas rápido encontrar strings, sin tener que estar leyendo las zonas de memoria como hicimos con gdb.

Metodo ninja

El primer crack ha sido muy sencillo, por eso igual que en ensamblador aquí también vamos a usar el “metodo ninja”.

Para empezar ejecutamos radare con nuestra crackme con la opcion -w para permitir la escritura.

radare2 -w crackme

Activamos el análisis de todo con aa como en el ejemplo anterior.
Ahora vamos a indicarle que queremos desensamblar la función main simplemente tecleando main y imprimiendo el resultado con pdf @ main

Ahora podemos ver el contenido de la funcion main desensamblada de la siguiente forma:

Como podemos ver radare es mucho mas limpio a la hora de mostrar como se ejecutan los saltos en ensamblador y incluso nos los marca para que podamos visualizarlos.

Nos fijamos en el siguiente trozo de código:

Si seguisteis nuestro tutorial de ensamblador podréis ver rápidamente que se trata de la instrucción de salta condicional que indica que se salte a una zona de memoria u otra si se cumple la condición(password) y como en el tutorial de ensamblador el hack esta en modificar ese salto condicional(je) por un salto incondicional(jmp) saltando a la direccion de memoria donde nos muestra el mensaje correcto.

Para ello ejecutamos la siguiente instrucción

wa jmp  0x0040067a @0x0040066c

wa es el comando para escribir código ensamblador

Como podeis ver el cambio ya se ha realizado, tan solo nos queda salir de radare, ejecutar nuestro crackme y comprobar que podemos meter cualquier string en el password.

Este articulo no pretende ser ningún tutorial ni manual de radare, ya que radare es una completísima herramienta que desconozco totalmente, solo llevo un par de días trasteando con ella y solo quería mostrar una pequeñísima parte de lo que conozco por si sirve de modo de iniciación muy básica para que os podáis interesar por ella.

Si queréis conocer al detalle este programa, leer la documentación oficial que es muy completa o acudir a los talleres de la labrechadigital sobre este tema y otros para conocerlos mas en detalle.

Hapyy Hacking ;)

puppetmaster Written by:

3 Comments

  1. portaro
    mayo 30
    Reply

    Gracias por compartirlo aqui .

  2. Chema Alonso
    Chema Alonso
    junio 1
    Reply

    +1000

  3. helenio2112
    junio 6
    Reply

    Hermoso artículo

    gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax