angr에서 기본적으로 알아야 할 명령어
binary 선택
proj = angr.Project('binary path', option) #옵션은 생략가능
angr로 분석할 binary 선택
proj.factory.* 생성자들
proj.factory.blank_state()
빈 state 생성
ex) state = proj.factory.blank_state()
proj.factory.entry_state()
entrypoint에서의 state 생성 즉 main에서 부터 시작
proj.factory.full_init_state()
init에서 시작
proj.factory.call_state()
특정 함수에서 시작
위 생성자들은 addr인수로 정확한 위치지정(메모리 주소)이 가능,
프로그램이 인자값을 받는 경우 entry_state나 full_init_state를 통해 인자값을 제공해야함
proj.factory.simgr, proj.factory.simulation_manager
거의 대부분의 angr리버싱문제에서 등장하는 명령입니다. symbolic execution을 제어하고 state공간탐색을위한 알고리즘을 적용합니다.
ex) simgr = proj.factory.simgr(state)
simgr.explore()
역시나 대부분의 angr문제에서 많이 보이는 명령입니다. 보통 find와 avoid인수를 가지며, find 인수는 말 그대로 우리가 찾을 위치를 의미하며, avoid는 우리가 피해야 할 위치를 의미합니다. find 인수와 avoid인수 모두 메모리 주소 뿐만 아니라 문자열도 가능합니다.
이 정도만 알아 두시면 쉬운 angr 문제들은 모두 푸실 수 있습니다.
기타 문제 예시들은
https://github.com/angr/angr-doc/tree/master/examples에 많이 있습니다.
'리버싱 관련' 카테고리의 다른 글
themida unpack 할때 신기한점 (1) (0) | 2018.08.10 |
---|---|
angr사용법(2) (0) | 2018.05.15 |
codegate2018 final shall we dance? writeup (4) | 2018.04.08 |
facebook Video_XXXX.mp4 분석 (0) | 2017.12.20 |
Codegate 2017 angrybird 풀이 (0) | 2017.12.14 |
WRITTEN BY
- Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다