radare – patrocinado por el papa espacial
Saludos!
Ahi va mi primer post en este antro de degenerados!
Voy a spammearos^Wcontaros un poco sobre una de las cosas en las que estado liado ultimamente..
Hará cosa de dos años empecé a picar esta tool. En un principio para recuperar datos de un disco algo jodido.
Principalmente lo que buscaba era un editor hexadecimal por linea de comandos que me permitiera trabajar con offsets de 64 bits con una interficie scriptable (radare scripts, perl, python, vala, …) y procurando hacerlo lo más ortogonal posible…
Desde entonces muchas cosas han cambiado y el proyecto ha crecido considerablemente añadiendo una capa que wrapea las operaciones de IO (open/read..) permitiendo usar sockets, apis externas, ptrace (peek,poke), conexión con un haret para leer la memoria de un windows ce, etc.. de esta forma trato por igual un proceso que un fichero o un radare remoto y escribir plugins es mucho más facil.
En el framework he metido utilidades sueltas para ensamblar/desensamblar en arm/x86/java desde linea de comandos, data carvers, hasher (para calcular md, sha, crc.. entropia, hamming, ..) de ficheros, memoria, calcular estaticamente xrefs en codigo de powerpc, arm y x86/32, etc..
La capa de debugger esta portada a Linux arm/x86-32 y *BSD/x86-32, pero espero en no mucho tiempo tener listos los ports para linux-x86-64 y w32-32.
Algunas de las pijadillas que le he ido anyadiendo son analisi de codigo para java/arm/x86-32, bindiff a nivel
binario, por funciones y a nivel de bloques de codigo exportados por IDA o radare. Permite inyectar codigo al proceso hijo, manejar la memoria, los threads y filedescriptors.
En cuanto a breakpoints es posible modificar los registros DRx a mano o usarlos como breakpoints por hard (tb por soft sin limite), los watchpoints permiten expresiones condicionales con valores de memoria y registros.
Los comentarios, labels, dwarf y demas mandangas pueden ser editadas inline desde el modo disassembler y la idea es hacerlos transparentes al fichero, de esta forma es posible mapear en el debugger los comentarios añadidos por IDA o radare. La idea en un futuro es gestionar el random_va_space para calcular la diferencia con la direccion base y hacer que los breakpoints, labels y comments vayan de forma transparente sobre el mismo binario.
Más cosillas… Editando el RDB (radare database) podemos definir un chroot, chdir, pid… cuando vayamos a depurar un proceso. Esto es bastante util para analisi de malware, pudiendo aislar o controlar el proceso hijo.
Otras cosillas curiosas que le he añadido es la posibilidad de dumpear y restaurar las páginas de memoria de usuario y registros del proceso para poder hacer step-backs o snapshots.
La gestión de ejecución permite tracear código en páginas de usuario logueando a disco, tracear syscalls, hijos, skipear codigo de librerias, step-in, step-over, emular calls, rets y jmps.
Ahora mismo estoy liado con la parte de análisi de codigo para generación de grafos en tiempo real del flujo de ejecución de procesos o ficheros de disco con una api en Vala que toy picando, en cuando tenga algo más de tiempo juntaré esto con el modulo de bindiffing de bloques de codigo.
Estoy desarrollando dos frontends uno en C y otro en Vala usando Gtk, pero de momento sigue siendo necesario tener un teclado para usarlo. En proximas versiones quiero reducir estas limitaciones, facilitando la accesibilidad a ciegos, sordos y quien sabe más. Y finalmente añadir soporte nativo al mando de la wii y a la alfombrilla de la play para hacer del debugging algo más saludable xDD
Espero no haveros aburrido mucho en mi primer post O:) procuraré ser más breve 😉
Aqui sus dejo la url del proyecto y algun que otro screenshot por si le quereis echar un vistazo:
– Página del proyecto: radare.nopcode.org
Have phun!
–pancake