La ingeniería inversa tiene como fin obtener la mayor cantidad de información posible de una aplicación o software del cual no se tiene el más mínimo conocimiento técnico en cuanto a su diseño, estructura y funcionamiento. A menudo es utilizada por los expertos en seguridad para buscar algún tipo de vulnerabilidad en aplicaciones, como también para el análisis de códigos maliciosos.

Para realizar reversing sobre un ejecutable existen herramientas que nos pueden ayudar a comprender qué acciones podría tomar en un equipo luego de ser ejecutado; estas aplicaciones son conocidas como desensambladores o depuradores. Algunos de los software más populares de este tipo podrían ser IDA, Immunity Debugger y OllyDbg.

En esta ocasión, les mostraremos un framework de reversing muy poderoso llamado Radare2. La herramienta es gratuita y se encuentra disponible para plataformas Android, GNU/Linux, BSD, iOS, OSX, QNX, W32, W64, Solaris, Haiku y Firefox OS. Además de extraer información, nos permite realizar un análisis estático y dinámico de la aplicación que deseemos auditar.

¿Qué tipo de archivos podemos analizar con Radare2?

Además de poder analizar archivos .EXE, como normalmente hacen todos los desensambladores, este framework nos brinda una generosa cantidad de tipos de archivos que acepta para auditar: bios, CGC, dex, elf, elf64, filesystem, java, fatmach0, mach0, mach0-64, MZ, PE, PE+, TE, COFF, plan9, dyldcache, Commodore VICE emulator, Game Boy (Advance), Nintendo DS ROMs y Nintendo 3DS FIRMs.

Usando Radare2

Luego de haber descargado e instalado Radare2, ejecutamos la aplicación con el comando radare2 seguido del archivo a analizar. En la siguiente captura podemos observar tres comandos. El primero, aaa, analiza todas las funciones del ejecutable; el segundo, afl, lista todas las funciones que se encontraron y el tercero, iz, nos muestra las strings del archivo:

radare2_strings

Como mencionamos, es una herramienta para reversing, con la cual podemos obtener el código del ejecutable en lenguaje ensamblador. Esto es posible con el comando pd (print disassemble) o en caso de querer desensamblar alguna función en especial utilizaremos pdf @ seguido de la función. A continuación se puede apreciar un ejemplo de las dos opciones mencionadas:

radare2_funciones

Una de las funcionalidades más interesantes que contiene Radare2 es la de brindar al usuario una vista más agradable con respecto al flujo de instrucciones. Esto significa que la aplicación puede tomar las instrucciones en ensamblador, reconocer determinados bucles, sentencias y demás, y volcar el resultado en forma de gráfica. Con el comando v o v @ seguido de alguna función, podemos obtener el modo gráfico, tal como se puede apreciar en la siguiente captura de pantalla:

radare2_modo grafico

Otra de las particularidades a destacar de Radare2 es que no solo puedes interactuar con el framework por medio de una consola, sino que también puedes hacerlo vía web. Para ello debemos abrir una terminal e ingresar radare2 –c=H seguido del archivo que deseemos. La pantalla principal nos brindará información general del archivo y en la columna que se encuentra a la izquierda tenemos los diferentes módulos que podemos consultar, como por ejemplo el código desensamblador, las funciones o los encabezados.

De este modo, podremos realizar las mismas acciones y obtener los mismos resultados que tuvimos anteriormente, pero de una forma más agradable. En la siguiente captura se observa la interfaz web del framework:

radare2_interfaz web

Estas son algunas de las más importantes cualidades de este framework, de entre la gran cantidad de opciones que contiene; Radare2 no tiene nada que envidiarle a las demás, ya que puede extraer una enorme cantidad de información.

Sin duda, los gustos e intereses recaen en cada uno de los usuarios o analistas, dependiendo de las metodologías de trabajo que elijan y utilicen; pero claro está que Radare2 es una muy buena opción a la hora de realizar alguna auditoría, análisis o búsqueda de vulnerabilidad en archivos ejecutables.