CTF
angr 사용 기초 분석
Symbolic execution 개념을 사용하는 angr tool의 기본 설치와 기본 사용법을 설명한다
스터디 · 리버싱 기초 스터디&IDA를 활용한 워게임풀기
김준상
2025-12-31
2
angr은 symbolic execution이란 개념을 사용하여, 프로그램을 데이터가 아닌 수식으로 실행하는 기술입니다. 쉽게 설명하면 프로그램의 변수들을 x와 같은 미지수로 보고 수학적으로 분석하고 if문을 만날때마다 가능한 경로를 탐색하며 원하는 탐색조건을 수립합니다. 그리고 마지막에 해당 수식을 풀어주는 도구를 이용해 경로로 가는 실제 입력값을 탐색합니다.
angr의 설치 과정(Linux)
- venv 가상환경 설치
- venv 위에 angr 설치 (pip install angr)
그 후 python으로 import angr를 통해 라이브러리 호출 가능
예제 사용
import angr
import claripy
위는 라이브러리 호출
def solve():
p = angr.Project("./baby_rev",auto_load_libs=False)
state = p.factory.entry_state()
simgr = p.factory.simulation_manager(state)
simgr.explore(
find=lambda s: b"Correct!" in s.posix.dumps(1),
avoid=lambda s: b"Wrong!" in s.posix.dumps(1)
)
=> 바이너리 실행 및 정답 조건 선택(특정 문자열이 아닌 주소값도 넣을 수 있음)
if simgr.found:
found_state = simgr.found[0]
flag = found_state.posix.dumps(0)
print(f"Flag found: {flag.strip()}")
else:
print("Flag not found...")
if __name__ == "__main__":
solve()
=> 정답 분기 찾기
생각보다 엄청 간단하게 돌아가고, ctf에서 사용하면 정말 유용할 듯 싶습니다. 리버싱,포너블에 관심있는 분들은 한번씩 사용해보는걸 추천드립니다.