본문으로 건너뛰기

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 플래그는 자동으로 분석을 실행한다. 진입 후:

  1. 기본 정보 확인: i로 파일 타입, 아키텍처, 보호 기능 확인.

  2. 흥미로운 문자열 찾기: izz를 실행하고 플래그, 힌트, 의심스러운 데이터를 찾아라.

  3. main 찾기: s main 입력 후 pdf로 디스어셈블리 확인. 함수 호출, 비교, 점프를 주목하라.

  4. 함수 호출 따라가기: call sym.check_password 같은 호출이 보이면 s sym.check_password로 이동하고 pdf로 디스어셈블한다.

  5. 브레이크포인트 설정: 동적 분석이 필요하면 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와 함께 사용하면 탄탄한 바이너리 익스플로잇 툴킷을 갖추게 된다.

기억하라: 모든 명령어에 도움말(?)이 있고, 항상 기초부터 시작해서 쌓아갈 수 있다. 해피 해킹!