본문 바로가기
Write Up

CODEGATE 2017 angrybird write up

by wlgpdnjs 2018. 1. 29.

angr문제고 처음에 cmp eax, 0이랑 main에서 문자열 입력받는 함수 위에 call 세부분 nop로 패치해주면 실행할 때 오류 없이 잘 돌아간다.



패치할 때 n값이 fgets인자로 들어가니까 저부분을 통으로 nop로 패치해버리면 오류가 난다. sub_4006f6의 리턴값은 20h니까 mov n, 20h를 쓰든 mov eax, 20h를 쓰든 꼭 값을 남겨줘야 한다.



비교문이 되게 많은데 마지막에 you typed : 이 부분으로 가는게 목표라 find_address로 0x404fab를 넣어준 다음 angr 코드를 돌리면 키 값이 출력된다.




import angr
  
 proj = angr.Project("./patched_angrybird", load_options={'auto_load_libs':False})
 path_group = proj.factory.path_group(threads=4)
 path_group.explore(find=0x404fab,avoid=0x404f97)

print path_group.found[0].state.posix.dumps(0)

만약에 돌려서 list_out_of_range 에러가 나는건 아마 패치가 잘못됐거나 조건이 부족해서일테니 주소값을 잘 넣어주길!