CTF 문제 중 2013 CSAW Reversing 2 200point 문제를 풀어봤습니다.
문제 출제 설명에 We got a little lazy so we just tweaked an old one a bit 라고 13년도나 14년도나 문제는 많이 다르지 않은 것 같습니다.
오랜만에 한 리버싱이라 느낌을 찾는다는 생각으로 해보았습니다.
문제파일인 csaw2013reversing2.exe 을 직접 실행시키면 에러가 발생하거나 아무것도 출력되지 않고 창이 종료됩니다.
ollydbg Searchfor - All referenced text Strings를 보면 Flag 관련 문자열이 보입니다.
해당주소로 따라갑니다.
바로 메인함수가 나오고 BP(F2)를 걸어준 후 실행(F9)해봅니다.
알 수 없는 문자들의 팝업이 나오고 버튼을 누르면 프로그램이 종료됩니다.
다시 실행시켜서(Ctrl + F2) 코드를 봅니다.
EAX와 EBX를 비교하는 분기문이 있고 인터럽트를 발생시키는 명령어인 INT3도 있습니다.
아래쪽에는 Flag를 XOR연산하는 코드도 보입니다.
EAX를 0으로 같게 해서 다시 실행해 봅니다.
INT3 또한 NOP으로 어셈블 해줍니다.
이번엔 빈 대화상자가 나옵니다.
ESI 에 저장된 값을 불러오고 있는데 그 주소(030505C8)로 찾아가 보면(Ctrl + G) 시작값이 '00'인 flag 값을 찾을 수 있다.
MessageBoxA에서 ESI에 저장된 값이 '00'으로 시작했기 때문에 문자열로 인식하지 못하고 빈 박스가 출력된 것이다.
flag : number2isalittlebitharder:p