r2m2 — это плагин радара2, целью которого является упрощение изменения новых архитектур за счет использования функций радара2 и miasm2. Его цель — быть максимально независимым от архитектуры.
Он объединяет сообществаradare2 и miasm2:radare2 является графическим интерфейсом miasm2, а miasm2 упрощает реализацию новых архитектур.
В настоящее время r2m2 может собирать, разбирать, разделять блоки, используя miasm2, и преобразовывать внутренние выражения miasm2 в ESIL радара2.
Заинтересованы? Посмотрите видео или ознакомьтесь с презентацией и дизайном слайдов.
r2m2 предоставляет один плагин радара2, который можно включить с помощью опции -a
, используемой в большинстве команд радара2. Переменная среды R2M2_ARCH
используется для выбора архитектуры, которая будет использоваться.
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 — рекомендуемое решение для использования r2m2. Каждый запрос на включение проверяется с помощью Трэвиса. В случае успеха образ Docker создается в Docker Hub, и его можно легко получить следующим образом:
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
позаботится обо всем и соберет r2m2. Следующие командные строки показывают, как создать образ Docker, запустить временный контейнер и протестировать 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
Примечание. Автоматические сборки выполняются в Ubuntu, Arch Linux и Mac OS X. Другие дистрибутивы могут не работать из-за несовместимости библиотек.
Должно быть установлено следующее программное обеспечение:
радар2 (>= 2.9.0)
миазм2
Модуль Python CFFI (>= 1.6)
Модуль Python jinja2 (>= 1.6)
r2m2 можно построить следующим образом:
r2m2$ make all install
[..]
mkdir -p [..]
Вы можете ввести следующую команду, чтобы убедиться, что все прошло нормально:
r2m2$ rasm2 -L |grep r2m2
adAe 32 r2m2 LGPL3 miasm2 backend
Если вы получаете следующую ошибку, версия модуля Python CFFI не >= 1.6. Вам необходимо обновить его, например, используя PIP в виртуальной среде.
AttributeError: 'FFI' object has no attribute 'set_source'