'angr'에 해당하는 글 1건

angr사용법(1)

리버싱 관련 2018. 4. 23. 17:56

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, 아는척하기위한 블로그. 저는 귀엽습니다

,