바이너리의 분석 방법
1.정적 분석
- static analysis
- 바이너리를 실행하지 않고 분석
- 디스어셈블러, 디컴파일러 이용
- 코드 위주로만 분석
2.동적 분석
- 바이너리를 실행하면서 분석
- 디버거, 행위 분석 도구 등 이용
- 네트워크, 파일 등의 접근 관찰 병행
주관적/모호한 부분이 있을 수 있음
바이너리
디스어셈블러
디컴파일러
정적분석의 장단점
장점
- 실행 환경 없이 분석 가능
ex) ARM 바이너리, OSX 바이너리
- 바이너리의 모든 부분을 전체적으로 빠르게 파악하기 좋음
바이너리의 모든 정보를 나열
단점
- 환경에 의존적인 정보를 분석할 수 없음
- 실행 도중 생성되는 정보의 확인이 어려움
- 레지스터 context를 보기 어려움
ex) CPU의 상태
디버깅
대표적인 동적분석 방법
- 바이너리를 실행하면서 분석
- 브레이크포인트(중요!!)
- single step
멈춘 시점에서 1개의 명령어만 실행하고 다시 멈춤
- next instruction
single step과 동일하나, call 명령이 종료할 때까지 1개의 명령으로 취급
GDB(GNU DeBugger)
리눅스 기반의 대표적인 디버거
- 인터페이스가 불편하고 단순
- pwndbg, GEF, PEDA 등 GDB 확장도구 이용
pwndbg
GDB 기반의 디버거
- 편리한 인터페이스
IDA(Interactive Disassembler)
윈도우즈 기반의 대표적인 디버거
(리눅스 기반도 존재)
디버거, 디스어셈블러
관계
- 모든 디버거는 디스어셈블러 기능 포함
- 모든 디스어셈블러가 디버깅이 가능하지는 않음
Ex) objdump
주요 도구들
실습
pwndbg 사용
IDA Pro 사용