r2m2 ist ein Radare2-Plugin, das darauf abzielt, die Umkehrung neuer Architekturen durch die Nutzung von Radare2- und Miasm2-Funktionen zu erleichtern. Ziel ist es, möglichst architekturunabhängig zu sein.
Es verbindet die Radare2- und Miasm2-Gemeinschaften: Radare2 ist die grafische Oberfläche von Miasm2 und Miasm2 vereinfacht die Implementierung neuer Architekturen.
Derzeit ist r2m2 in der Lage, mithilfe von miasm2 Blöcke zusammenzubauen, zu zerlegen und zu teilen sowie interne miasm2-Ausdrücke in Radare2 ESIL zu konvertieren.
Interessiert? Sehen Sie sich das Video an oder sehen Sie sich die Präsentations- und Designfolien an.
r2m2 bietet ein einzelnes Radare2-Plugin, das mit der Option -a
aktiviert werden kann, die in den meisten Radare2-Befehlen verwendet wird. Die Umgebungsvariable R2M2_ARCH
wird verwendet, um die zu verwendende Architektur auszuwählen.
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 ist die empfohlene Lösung für die Verwendung von r2m2. Alle Pull-Anfragen werden mit Travis getestet. Bei Erfolg wird ein Docker-Image auf Docker Hub erstellt und kann einfach wie folgt abgerufen werden:
r2m2$ docker pull guedou/r2m2
r2m2$ docker run --rm -it -e 'R2M2_ARCH=mips32l' guedou/r2m2 rasm2 -a r2m2 "addiu a0, a1, 2"
0200a424
Die Dockerfile
kümmert sich um alles und erstellt r2m2. Die folgenden Befehlszeilen zeigen, wie Sie das Docker-Image erstellen, einen temporären Container ausführen und r2m2 testen:
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
Hinweis: Automatische Builds werden unter Ubuntu, Arch Linux und Mac OS X durchgeführt. Andere Distributionen funktionieren möglicherweise aufgrund von Inkompatibilitäten der Bibliotheken nicht.
Folgende Software muss installiert sein:
Radare2 (>= 2.9.0)
Miasma2
CFFI-Python-Modul (>= 1.6)
jinja2 Python-Modul (>= 1.6)
r2m2 kann wie folgt gebaut werden:
r2m2$ make all install
[..]
mkdir -p [..]
Sie können den folgenden Befehl eingeben, um zu überprüfen, ob alles gut gelaufen ist:
r2m2$ rasm2 -L |grep r2m2
adAe 32 r2m2 LGPL3 miasm2 backend
Wenn Sie die folgende Fehlermeldung erhalten, ist die Version des CFFI-Python-Moduls nicht >= 1.6. Sie müssen es aktualisieren, beispielsweise mithilfe von PIP in einer virtuellen Umgebung.
AttributeError: 'FFI' object has no attribute 'set_source'