DEFCON 2017 - CrackMe - sorcery
역시나 비슷한 바이너리들이 매우 많다. (크랙미 분야 모든 문제가 동일함)
역시 아무 바이너리를 잡고 IDA로 열어보았다.
"sum is", "enter code: " 라는 문자열이 보이지 않고 난해하다.
이럴 경우 역시 동적분석이 최고다. (절대 정적분석 못해서 그런거 아님 ㅎㅎㅎ 동박꼼)
breakpoint를 잡아주지 않고 그냥 실행하면 입력받는 곳에서 입력을 기다리고 있게 된다.
이때 당황하지 말고 프로그램을 정지시킨 후 스택 확인을 통해 리턴 어드레스로 따라간다.
리턴 어드레스를 따라가 보면 어느 함수에서 read로 입력받고 있다.
하지만 여기에도 비교 루틴이 없기 때문에 이 함수가 어디서 실행되는지 "xref" 기능을 하여 어디서 실행되었는지 확인한다. (마찬가지로 스택으로 찾아봐도 무방)
xref로 따라온 곳을 "hex-ray" 기능을 이용하여 살펴보면 비교 하는 루틴이 보인다.
이제 이 부분을 hex dump에서 찾아 주면 된다.
소스 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import os for root,dirs, files in os.walk("C:\Users\ddddh\Desktop\Defcon\sorcery_dist"): for file_name in files: file = open("C:\\Users\\ddddh\\Desktop\\Defcon\\sorcery_dist\\"+file_name, "rb") data = file.read()[0x36a5:] input_ = "" for x in range(50): index = x*0x16 if data[index:index+2] == "\x80\xf9": input_ += data[index+2] else: break print file_name + " : " + input_ file.close() | cs |
아웃풋 :
'# write-up > - ctf' 카테고리의 다른 글
[Plaid CTF 2017] zamboni (0) | 2017.05.02 |
---|---|
[DEFCON 2017] witchcraft (0) | 2017.05.02 |
[DEFCON 2017] alchemy (0) | 2017.05.02 |
[Plaid CTF 2017] no_mo_flo (0) | 2017.04.27 |
[ALEX CTF] RE5: packed movement (0) | 2017.02.07 |