r2m2 は、radare2 と miasm2 の機能を活用して、新しいアーキテクチャの反転を容易にすることを目的とした、radare2 プラグインです。その目標は、可能な限りアーキテクチャに依存しないようにすることです。
これは、radare2 と miasm2 コミュニティの橋渡しをします。radare2 は miasm2 のグラフィカル インターフェイスであり、miasm2 は新しいアーキテクチャの実装を簡素化します。
現在、r2m2 は miasm2 を使用してブロックのアセンブル、逆アセンブル、分割を行い、内部 miasm2 式を Radare2 ESIL に変換できます。
興味がある?ビデオを見るか、プレゼンテーションとデザインのスライドを確認してください。
r2m2 は、ほとんどの Radare2 コマンドで使用される-a
オプションを使用して有効にすることができる単一の Radare2 プラグインを提供します。 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
r2m2 を使用するには Docker が推奨されるソリューションです。各プル リクエストは 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'