반응형
이 문제는 분석보다는 기존에 나와있는 라이트업을 통해 angr의 활용방법을 정리하는 방법으로 진행한다.
angr의 설치와 사용방법은 간단하게 zooonique.tistory.com/26 여기에 정리를 해뒀다.
구글링해보면 더 좋은 글들이 많다!
바이너리를 실행시키면, 57자리의 input을 받고 제대로 입력을 하면,
"OMG, Thank you for your good works :)"이 출력된다.
더보기
import angr
import claripy
def main():
p = angr.Project('angrforge')
# 8비트 즉 1바이트의 심볼릭 비트벡터를 57개 만들어준다.
flag_chars = [claripy.BVS('flag_%d' % i, 8) for i in range(57)]
#개행 추가
flag = claripy.Concat(*flag_chars + [claripy.BVV(b'\n')])
# _init 지점에서 시작을 하도록 셋팅하고 unicorn옵션을 줌으로서 코드풀기 속도가 향상된다.
st = p.factory.full_init_state(
add_options=angr.options.unicorn,
stdin=flag,
)
#st.solver.add 문법 자체가 제약조건을 추가해는것 같다. 자료가 많이없음.
#57개의 플래그안에 null 이나 개행이 없도록 한다.
#벡터 하나하나 무엇이 들어갈지 모르는 상황에서 그 벡터안에 아래의 조건이 들어가지 못하게 사전에 막는다?
for k in flag_chars:
print(st.solver)
st.solver.add(k != 0)
st.solver.add(k != 10)
#시뮬레이션 메니저 구성한다.
sm = p.factory.simulation_manager(st)
sm.run()
out = b''
for pp in sm.deadended: #deadended 상태가 될때까지 진행한다.
out = pp.posix
if b'OMG' in out.dumps(1): #1은 표준출력
print(out.dumps(0)) # 0은 표준 입력
if __name__ == "__main__":
print(main())
# 출처 : 박승현
반응형
'Rev > Write-up' 카테고리의 다른 글
HTB - headache (0) | 2021.01.11 |
---|---|
HTB - BombsLanded (0) | 2021.01.07 |
Christmas CTF 2020 - Screw_Driver (0) | 2020.12.30 |
Christmas CTF 2020 - lock (0) | 2020.12.28 |
b01lers - chuggachugga (0) | 2020.03.18 |