angr로 심볼릭 실행 맛보기
리버스 엔지니어링에서 심볼릭 실행은 “입력 조건을 변수로 두고 경로를 추적”해 정답을 찾는 기술입니다. CTF crackme나 난독화된 분기에서 특히 강력합니다.
핵심 흐름
- 바이너리 로드:
angr.Project("./target") - 입력 모델링:
claripy.BVS("stdin", 8*LEN) - 경로 탐색:
simgr.explore(find=good, avoid=bad) - 해 추출:
found.posix.dumps(0)
실전 팁
avoid를 적극 사용하면 상태 폭발을 크게 줄일 수 있음- 라이브러리 호출은
hook으로 단순화하면 속도 향상 - 작은 길이부터 탐색해 패턴을 확인 후 확장
angr는 “브루트 포스가 안 되는 문제”를 수학으로 푸는 도구입니다. 복잡한 분기일수록 효과가 큽니다.