-
Basic 01Write-Up/CodeEngn 2019. 7. 4. 16:09
문제: HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴 값이 무엇이 되어야 하는가?
문제를 다운로드 받아서 exe 파일을 실행시키면 다음과 같은 메세지 박스가 출력된다.
확인 버튼을 누르면 다음과 같은 화면이 출력된다.
[풀이 1] IDA사용
exe파일을 IDA로 열면 다음과 같은 화면이 출력된다.
이를 통해 eax와 esi를 비교해서 같은면 "YEAH!"로 이동함을 알 수 있다 .
따라가다보면 esi 값이 3임을 알 수 있고, eax와 같아야 하므로 최종적으로 eax의 값은 3이어야한다.
그러나 위에 dec eax가 2번 존재하므로 return 값은 5이다.
[풀이2] OllyDbg 사용
Ollydbg로 파일을 열면 다음과 같은 화면이 뜬다 .
풀이 2-1) JE를 JMP로 변경해서 조건문에 상관없이 점프하기
F7을 이용해서 메시지 박스가 나올 때까지 내려가 보면 00401026에 JE SHORT 0040103D를 볼 수 있다.
이 부분을 보면 eax와 esi가 같으면 jmp를 실행하라고 되어있다. (je는 조건문과 같다.)
즉, 이 부분을 jmp로 변경해주면 조건문에 상관없이 그냥 점프할 수 있고 그러면 성공이다.
풀이 2-2) esi를 eax로 변경하기
점프의 조건이 eax와 esi가 같을 때 점프하는 것이니, esi를 eax로 변경하면 당연히 eax==eax의 식이 성립하게 되고, 점프할 수 있게된다.
[풀이 3] 그 외
문제를 보면 GetDriveTypeA의 return값에 대해 묻고있다.
이와 관련된 것을 찾아보면 다음과 같다.
https://docs.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getdrivetypea
CDRom으로 변경하라 했으니, 값을 5로 변경해주면 문제를 해결할 수 있다.