메뉴 닫기

angr 스크립트 예제.

/*

– 마지막 수정 : 18.11.24

가끔 pip install -U angr 을 통해 angr을 업데이트 하곤 하는데, 요새 업데이트가 너무 없다 싶어서 왜그런지 찾아봤더니, 이게 angr가 8.xx 대로 넘어가면서 python3 만 지원하게 되었고, API에 변화가 좀 생겼다. 그래서 이 글을 수정하기로 했다.

>> https://github.com/angr/angr-doc/blob/master/MIGRATION.md <<

이 글은 다른사람들을 위한 면도 있지만, 나를 위해 쓴 면도 좀 있는지라 불친절 할 수 있으니 주의.

설치과정은 pip3 로 적당히 하면 문제 없이 설치 가능하기 떄문에 생략.

하이라이팅 플러그인 사용이 뭣 같아서 그냥 스샷 + 파일로 적당히 대체함.

*/

1. Reversing.kr Easy_ELF

 

1.py

2. Reversing.kr Easy_ELF (stdout을 find에 조건으로 걸기)

2.py

3. pwnable.kr col (입력이 들어가는 메모리를 직접 조작하는 케이스, 조건 걸기)

3.py

4. pwnable.kr col (argv를 조작해야 하는 경우)

3번이랑 같은 바이너리 입니다만, 다른 방법으로 푸는겁니다.

4.py

5. Ch4n3 World Find my password (position-independent executable, 여러개의 해)

5.py

position-independent executable은 IDA에서 보이는 주소에 + 0x400000. angr에서 그렇게 로드 합니다.

6. Ch4n3 World Find my password (position-independent executable, 여러개의 해, 솔버에 메모리 지정, 조건 걸기)

6.py

7. Codegate 2017 Qual angrybird (hook 사용하기)

 이 문제 같은경우 바이너리 패치 없이는 정상적으로 실행이 불가능하도록 되어 있는데, 적당히 분석한다음, angr의 hook을 통해 필요없는 코드를 파악하고 필요한 값을 지정해주면, 바로 샤샥 풀 수 있습니다.

7.py

p.s hook을 할때, length를 0으로 주면, 해당 인스트럭션이 실행되기 바로 직전에 값을 조사 할 수 있습니다. 그런데 그럴경우 보통 r2나 gdb 스크립트를 이용하는게 효율적이지 않냐고 질문하신다면,,, 답은 yes 인데 조큼 특수한 경우에만 사용됩니다. 전에 이걸 한번 써먹은적이 있었는데 까먹,,,, (죄송합니다. ㅎㅎ;)

8. DEFCON 2016 Qual baby-re (LAZY_SOLVES, 메모리 지정(포인터))

 다른 사람들 코드를 보면 LAZY_SOLVES 옵션을 자주 추가하던데, 대체 그게 뭔지 궁금하다고 질문을 받은 적이 있습니다.

 별건 없고요, z3사용을 최소화 하고 패쓰 탐색 위주로 하는 옵션입니다.

 이렇게 하면, 불필요한 z3사용을 줄여서 속도를 올릴 수도 있지만, 패쓰가 너무 많아지면 메모리 문제가 생길 수도 있고, 어떤경우에는 안 쓰느니만 못해서 상황봐서 신중하게 사용하여야 하는 옵션입니다.

 

 8.py

 

나머지는 언젠가 또… (아마 12월 중순에…?)

쓰다보니 필요할때 빠르게 땡겨(?) 쓰려고 간단한 코드 위주로 작성한 부분도 좀 있고,

angr에서 제공하는 많은 기능중에 concolic execution 관련한 기능만 다룬 좀 지엽적인 글이 되버려서 언젠간 좀 예제를 추가할겁니다. (특히 Tracer나 그런것들)

 

angr 공부하시려는 분들은 이 글보다는 angr, angr-doc 레포에 올라가 있는 md파일들을 보시는걸 추천드립니다. (그만큼 제가 글을 대충 썻거든요~)

 

 

 2,029 total views,  1 views today

댓글 남기기

이메일은 공개되지 않습니다.