Skip to main content

angr로 심볼릭 실행 맛보기

리버스 엔지니어링에서 심볼릭 실행은 “입력 조건을 변수로 두고 경로를 추적”해 정답을 찾는 기술입니다. CTF crackme나 난독화된 분기에서 특히 강력합니다.

핵심 흐름

  • 바이너리 로드: angr.Project("./target")
  • 입력 모델링: claripy.BVS("stdin", 8*LEN)
  • 경로 탐색: simgr.explore(find=good, avoid=bad)
  • 해 추출: found.posix.dumps(0)

실전 팁

  • avoid를 적극 사용하면 상태 폭발을 크게 줄일 수 있음
  • 라이브러리 호출은 hook으로 단순화하면 속도 향상
  • 작은 길이부터 탐색해 패턴을 확인 후 확장

angr는 “브루트 포스가 안 되는 문제”를 수학으로 푸는 도구입니다. 복잡한 분기일수록 효과가 큽니다.