2017 codegate angrybird
맨 처음에 바로 exit를 시켜준다 뭐지..
cfg를 보면 엄청 긴데 하나 하나 쭉 보면 연산을 통해 계속해서 분기하는 것을 알 수 있다.
맨 마지막 블록을 보면 내가 입력한 걸 출력해 준다. 앵거로 푸는 문제인가 보다. 그냥 exit 다음부터 실행시키도록 하고 앵거를 돌리면 될 것 같다.
또한 리턴 값을 바꿔줘야 하는 곳이 존재하고
문자열을 "hello"로 맞춰줘야 하는 곳이 존재한다.
근데 우리는 어차피 bit-vector를 이용할 것이므로 fgets 뒤에 부분은 다 재끼고 fgets 다음부터 시작하자. 즉, hello만 맞춰주면 된다.
import angr
p = angr.Project('angrybird', load_options={'auto_load_libs':False})
start = 0x4007DA
win = 0x404FAB
state = p.factory.blank_state(addr=start)
state.memory.store(0x606038, "hello")
simgr = p.factory.simgr(state)
simgr.explore(find=win)
found = simgr.found[0]
flag = found.state.posix.dumps(1)
print(flag)
쉘!
'system > writeup' 카테고리의 다른 글
2014 hack.lu oreo (0) | 2019.01.10 |
---|---|
pwnable.tw orw (0) | 2019.01.09 |
2014 plaidCTF kappa (0) | 2019.01.08 |
2017 codegate messenger (0) | 2019.01.07 |
2017 codegate hunting (0) | 2019.01.06 |