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'