이 문제는 z3아님 angr를 쓰라고 만들어놓은거같다.
바이너리를 열어보면 exit()함수가 맞이해준다.
우선 바이너리를 수정해서 헥스레이를 사용할 수 있게 하자
exit 함수위에 cmp eax, 1로 수정해주고
밑에 call 3개를 nop 처리한다.
이렇게 수정하면 fgets 두번 째 인자가 제대로 안되서 또 다시 수정해준다.
수정 전
수정 후
이런식으로 nop처리한다.
바이너리를 수정했으면 ida에서 이렇게 보인다.
이제 fgets도 작동을 하니 angr를 통해 플래그를 얻어보자
1 2 3 4 5 6 | import angr proj = angr.Project("./test", load_options={'auto_load_libs':False}) path_group = proj.factory.path_group(threads=4) path_group.explore(find=0x404fda, avoid=0x404f97) print path_group.found[0].state.posix.dumps(0) | cs |
'CTF > Write-up' 카테고리의 다른 글
BSidesSF-pinlock (0) | 2017.02.20 |
---|---|
BSidesSF Reversing (0) | 2017.02.14 |
AlexCTF Reverse Engineering (0) | 2017.02.06 |
BITSCTF Riskv and Reward (0) | 2017.02.05 |
insomnihack CTF bender_safe (0) | 2017.01.22 |