r2m2
1.0.0
r2m2 是一个radare2 插件,旨在通过利用radare2 和miasm2 功能来简化逆向新架构的过程。它的目标是尽可能独立于架构。
它连接了radare2和miasm2社区:radare2是miasm2的图形界面,miasm2简化了新架构的实现。
目前,r2m2 能够使用 miasm2 组装、反汇编、拆分块,并将内部 miasm2 表达式转换为radare2 ESIL。
感兴趣的?观看视频,或查看演示文稿和设计幻灯片。
r2m2 提供了一个radare2 插件,可以使用大多数radare2 命令中使用的-a
选项来启用。 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 的解决方案。每个拉取请求都通过 Travis 进行测试。成功后,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
CFFI Python 模块 (>= 1.6)
jinja2 Python 模块 (>= 1.6)
r2m2 可以按如下方式构建:
r2m2$ make all install
[..]
mkdir -p [..]
您可以键入以下命令来检查一切是否正常:
r2m2$ rasm2 -L |grep r2m2
adAe 32 r2m2 LGPL3 miasm2 backend
如果出现以下错误,则说明 CFFI Python 模块版本不 >= 1.6。您需要升级它,例如在 virtualenv 中使用 PIP。
AttributeError: 'FFI' object has no attribute 'set_source'