Radare2로 CTF 바이너리 풀기
Radare2(r2)는 CTF 바이너리 익스플로잇 문제를 다루는 플레이어들에게 필수가 된 강력한 오픈소스 리버스 엔지니어링 프레임워크다. Ghidra나 IDA Pro가 세련된 GUI를 제공하는 반면, radare2의 커맨드라인 인터페이스와 스크립팅 능력은 빠른 분석에 믿을 수 없을 만큼 유연하다.
왜 Radare2인가?
첫째, 완전히 무료이고 오픈소스다. 둘째, 다양한 플랫폼과 아키텍처에서 동작한다. 셋째, 명령어 문법을 익히면 GUI 메뉴를 클릭하는 것보다 더 빠르게 바이너리를 분석할 수 있다. 학습 곡선이 가파르지만 그만한 가치가 있다.
설치
대부분의 시스템에서 설치는 간단하다:
# Ubuntu/Debian
sudo apt install radare2
# macOS
brew install radare2
# 소스에서 빌드
git clone https://github.com/radareorg/radare2
cd radare2
sys/install.sh
필수 명령어
Radare2의 명령어 구조는 패턴을 따른다. CTF 문제에 필요한 기초:
분석 명령어는 a로 시작:
aa- 전체 분석aaa- 더 많은 분석aaaa- 모든 것 분석 (시간 소요)
출력 명령어는 p로 시작:
pdf @ main- main 함수 디스어셈블리 출력px 100- 100바이트를 16진수로 출력ps @ address- 주소의 문자열 출력
탐색 명령어는 s로 시작:
s main- main 함수로 이동s 0x08048000- 특정 주소로 이동
정보 명령어는 i로 시작:
ii- 임포트 목록iz- 데이터 섹션의 문자열izz- 바이너리의 모든 문자열
일반적인 CTF 워크플로우
바이너리 문제를 다운로드하면 이렇게 접근한다:
r2 -A binary_name
-A 플래그는 자동으로 분석을 실행한다. 진입 후:
-
기본 정보 확인:
i로 파일 타입, 아키텍처, 보호 기능 확인. -
흥미로운 문자열 찾기:
izz를 실행하고 플래그, 힌트, 의심스러운 데이터를 찾아라. -
main 찾기:
s main입력 후pdf로 디스어셈블리 확인. 함수 호출, 비교, 점프를 주목하라. -
함수 호출 따라가기:
call sym.check_password같은 호출이 보이면s sym.check_password로 이동하고pdf로 디스어셈블한다. -
브레이크포인트 설정: 동적 분석이 필요하면
db address로 브레이크포인트를 설정한다.
비주얼 모드
Radare2의 비주얼 모드는 과소평가되어 있다. V를 눌러 비주얼 모드 진입 후:
p키로 다른 뷰 순환VV로 함수 흐름의 그래프 뷰 표시q로 커맨드라인으로 복귀
그래프 뷰(VV)는 CTF 문제의 복잡한 제어 흐름을 이해하는 데 특히 유용하다.
실전 예시
"비밀번호 검사기" 바이너리가 있다고 하자:
r2 -A password_checker
[0x00001060]> izz | grep -i flag
[0x00001060]> s main
[0x00001060]> pdf
비교 연산(cmp, test), 문자열 연산(strcmp, strncmp), 인코딩 함수를 찾아라. CTF 문제는 종종 플래그를 눈에 보이는 곳에 숨기거나 디스어셈블리에서 명확하게 드러나는 간단한 XOR 인코딩을 사용한다.
고급 기능
에뮬레이션: aezi로 명령어를 하나씩 에뮬레이트하고 분석한다.
패칭: w 명령어로 바이너리를 수정할 수 있다. 예를 들어 wx 9090은 현재 위치에 NOP(0x90)를 쓴다.
스크립팅: Radare2는 Python용 r2pipe를 지원해서 분석 작업을 자동화할 수 있다.
디버깅: r2 -d binary로 디버그 모드 실행, dc로 실행 계속, ds로 스텝, dr로 레지스터 확인.
CTF 팁
- 자동 분석을 위해 항상
-A옵션으로 실행 - 명령어 뒤에
?를 붙이면 도움말 표시 (예:p?는 모든 출력 명령어 표시) /명령어로 검색 —/flag나/password시도- 동적 분석을 잊지 마라 — 때로는 바이너리를 직접 실행해야 한다
ii(임포트) 로 안티 디버깅 트릭 확인 — ptrace 같은 것을 찾아라
학습 리소스
radare2 공식 책(온라인 무료 제공)이 포괄적이다. CTF 연습은 pwnable.kr이나 HackTheBox에서. 쉬운 리버스 엔지니어링 문제부터 시작해서 점진적으로 난이도를 높여가라.
마치며
Radare2는 처음에는 겁먹게 할 수 있지만, CTF 바이너리 문제에 없어서는 안 될 도구다. 몇 번의 대회를 경험하면 커맨드라인 인터페이스가 자연스러워지고, 초기 학습 투자를 능가하는 유연성을 얻게 된다. pwntools, GDB와 함께 사용하면 탄탄한 바이너리 익스플로잇 툴킷을 갖추게 된다.
기억하라: 모든 명령어에 도움말(?)이 있고, 항상 기초부터 시작해서 쌓아갈 수 있다. 해피 해킹!