r2m2 es un complemento de radare2 que tiene como objetivo facilitar la inversión de nuevas arquitecturas aprovechando las características de radare2 y miasm2. Su objetivo es ser lo más independiente posible de la arquitectura.
Une las comunidades radare2 y miasm2: radare2 es la interfaz gráfica de miasm2 y miasm2 simplifica la implementación de nuevas arquitecturas.
Actualmente, r2m2 es capaz de ensamblar, desmontar, dividir bloques usando miasm2 y convertir expresiones internas de miasm2 a radare2 ESIL.
¿Interesado? Mira el vídeo o consulta las diapositivas de presentación y diseño.
r2m2 proporciona un único complemento radare2, que se puede habilitar usando la opción -a
, utilizada en la mayoría de los comandos de radare2. La variable de entorno R2M2_ARCH
se utiliza para seleccionar la arquitectura que se utilizará.
r2m2$ export R2M2_ARCH=mips32l; rasm2 -a r2m2 'addiu a0, a1, 2' |rasm2 -a r2m2 -d -
ADDIU A0, A1, 0x2
r2m2$ R2M2_ARCH=msp430 r2 -a r2m2 -qc 'woR; pd 5' -
0x00000000 07fa and.w R10, R7
0x00000002 47ad dadd.b R13, R7
0x00000004 f05e0778 add.b @R14+, 0x7807(PC)
0x00000008 f46d81ed addc.b @R13+, 0xED81(R4)
0x0000000c 3fdc bis.w @R12+, R15
r2m2$ R2M2_ARCH=mips32b rasm2 -a r2m2 'j 0x4; nop' -B > j_nop.bin
r2m2$ R2M2_ARCH=mips32b r2 -a r2m2 -qc 'pd 2' j_nop.bin
,=< 0x00000000 0c000001 JAL 0x4
`-> 0x00000004 00000000 NOP
Docker es la solución recomendada para utilizar r2m2. Cada solicitud de extracción se prueba con Travis. Tras el éxito, se crea una imagen de Docker en Docker Hub y se puede extraer fácilmente de la siguiente manera:
r2m2$ docker pull guedou/r2m2
r2m2$ docker run --rm -it -e 'R2M2_ARCH=mips32l' guedou/r2m2 rasm2 -a r2m2 "addiu a0, a1, 2"
0200a424
Dockerfile
se encarga de todo y construye r2m2. Las siguientes líneas de comando muestran cómo crear la imagen de Docker, ejecutar un contenedor temporal y probar r2m2:
r2m2$ docker build -t guedou/r2m2 .
r2m2$ docker run --rm -it -e 'R2M2_ARCH=mips32l' guedou/r2m2 bash
root@11da1889a490:/home/r2m2# rasm2 -L |grep r2m2
adAe 32 r2m2 LGPL3 miasm2 backend
root@11da1889a490:/home/r2m2# rasm2 -a r2m2 "addiu a0, a1, 2"
0200a424
r2m2$ docker run --rm -it -e 'R2M2_ARCH=x86_64' guedou/r2m2
-- One does not simply write documentation.
[0x00000000]> o /bin/ls
4
[0x0000487f]> e anal.arch=r2m2
[0x0000487f]> e asm.emu=true
[0x0000487f]> pd 10
;-- entry0:
0x0000487f 31ed xor ebp, ebp ; zf=0x1 ; nf=0x0
0x00004881 4989d1 mov r9, rdx ; r9=0x0
0x00004884 5e pop rsi ; rsp=0x8 ; rsi=0x0
0x00004885 4889e2 mov rdx, rsp ; rdx=0x8
0x00004888 4883e4f0 and rsp, 0xfffffffffffffff0 ; zf=0x1 ; nf=0x0
0x0000488c 50 push rax ; rsp=0x10
0x0000488d 54 push rsp ; rsp=0x18
0x0000488e 49c7c0301d41. mov r8, 0x411d30 ; r8=0x411d30 -> 0xffffff00
0x00004895 48c7c1c01c41. mov rcx, 0x411cc0 ; rcx=0x411cc0 -> 0xffffff00
0x0000489c 48c7c7c02840. mov rdi, 0x4028c0 ; rdi=0x4028c0 -> 0xffffff00
Nota: las compilaciones automáticas se realizan en Ubuntu, Arch Linux y Mac OS X. Es posible que otras distribuciones no funcionen debido a incompatibilidades de bibliotecas.
Se debe instalar el siguiente software:
radare2 (>= 2.9.0)
miasma2
Módulo CFFI Python (>= 1.6)
Módulo Python jinja2 (>= 1.6)
r2m2 se pueden construir de la siguiente manera:
r2m2$ make all install
[..]
mkdir -p [..]
Puedes escribir el siguiente comando para comprobar que todo salió bien:
r2m2$ rasm2 -L |grep r2m2
adAe 32 r2m2 LGPL3 miasm2 backend
Si recibe el siguiente error, la versión del módulo CFFI Python no es >= 1.6. Necesita actualizarlo, por ejemplo usando PIP en un entorno virtual.
AttributeError: 'FFI' object has no attribute 'set_source'