Security & Hacking

angr 핵심 개념

zeroone-kr 2025. 2. 10. 20:48

 

[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를 분석할 수 있는 도구를 제공하는 것을 확인할 수 있다.



참고 문서

https://docs.angr.io/en/latest/core-concepts/toplevel.html



'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