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
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에서 수행됩니다. 다른 배포판은 라이브러리 비호환성으로 인해 작동하지 않을 수 있습니다.
다음 소프트웨어를 설치해야 합니다.
Radare2 (>= 2.9.0)
miasm2
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'