r2m2 هو مكون إضافي لـRadare2 يهدف إلى تسهيل عكس البنى الجديدة من خلال الاستفادة من ميزات Radere2 وMiasm2. هدفها هو أن تكون معمارية مستقلة قدر الإمكان.
إنه يربط بين مجتمعات رادار 2 و miasm2: رادار 2 هو الواجهة الرسومية لـ 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
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)
miasm2
وحدة CFFI Python (>= 1.6)
وحدة jinja2 بايثون (>= 1.6)
يمكن بناء r2m2 على النحو التالي:
r2m2$ make all install
[..]
mkdir -p [..]
يمكنك كتابة الأمر التالي للتأكد من أن كل شيء يسير على ما يرام:
r2m2$ rasm2 -L |grep r2m2
adAe 32 r2m2 LGPL3 miasm2 backend
إذا حصلت على الخطأ التالي، فإن إصدار وحدة CFFI Python ليس >= 1.6. تحتاج إلى ترقيته، على سبيل المثال باستخدام PIP في virtualenv.
AttributeError: 'FFI' object has no attribute 'set_source'