[1] Project
angr로 분석할때 사용하는 object는 대부분 project object에 의존하기 때문에 만들어줘야한다.
[2] Loading
binary file을 va space 표현으로 바꿔야하는데 그걸 하는 녀석이 CLE이고, 로더이다.
해당 cle 객체(proj.laoder)로 va space에 대한 질의를 수행할 수 있다.
[3] The factory
angr에 많은 클래스가 존재하는데, 대부분의 클래스가 project가 초기화되어야한다.
그래서, 그냥 proejct.factory를 제공하고 그걸로 클래스 객체를 생성하든 하면된다.
3.1) Blocks
project.factory.bloc()으로 basic block을 얻을 수 있다.
그리고, agnr는 basic block단위로 분석을 수행한다.
3.2) States
project.factory.entry_state() (i.e, SimState) 를 통해 simulation된 프로그램 상태 객체를 얻을 수 있다.
Simstate는 프로그램의 다양한 메모리 정보들과 같은 라이브 데이터를 포함한다.
예를 들어, state.regs.rip를 하면 현재 메모리의 rip register값을 조회할 수 있다 .이때 해당 객체는 bitvector이다.
bitvector는 그냥 cpu data 정보를 담고 있는 bit 배열이다. 넓이는 .length로 확인할 수 있다.
명시적으로는 state.sovler.BVV(0x1234, 32)로 bitvector를 생성할 수 있다.
3.3) Simulation Managers
상태를 이용하여 실행과 시뮬레이션을 수행하는 주요 인터페이스이다.
A simulation manager can contain several stashes of states.
상태 여러개를 어디다가 보관해둔다는 의미인것으로 보인다.
simgr = proj.factory.simulation_manager(state)
simgr.step()
그리고 주의할 점은 위 코드를 수행하고도, state는 immutable이라 변하지 않는다.
[4] 분석
angr는 프로그램에서 정보를 추출할 수 잇는 내장 분석 도구들을 제공한다.
proj.analyses. 아래 CFG, VFG를 분석할 수 있는 도구를 제공하는 것을 확인할 수 있다.
참고 문서
'Security & Hacking' 카테고리의 다른 글
CodeQL (0) | 2025.02.11 |
---|---|
00_angr_find (0) | 2025.02.10 |
SSL Stripping (0) | 2025.02.10 |
decrypt_safe_linking 이해 (0) | 2025.01.11 |
SROP (0) | 2025.01.11 |