Basic RCE L01 :: CodeEngn/BasicRCE
문제 힌트를 읽어보면 HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가라고 적혀있다.
이 문제 힌트를 먼저 해결한 후, exe 파일을 열어보려고 한다.
위의 힌트를 해결하기 위해 GetDriveType 함수를 찾아보았다.
GetDriveType 함수의 원형은
UINT WINAPI GetDriveType(
_In_opt_ LPCTSTR lpRootPathName
);
이며 이 함수는 인자로 전달받은 드라이브가 어떤 종류의 드라이브인지 판별하여 리턴해줍니다.
이제 리턴 값들에 대해 알아보면 힌트에 대한 답을 찾을 수 있을 것이다.
리턴 값 | 상수 | 설명 |
0 | DRIVE_UNKNOWN | 알 수 없음 |
1 | DRIVE_NO_ROOT_DIR | 최상위 경로가 없음 |
2 | DRIVE_REMOVABLE | 이동형 저장장치 |
3 | DRIVE_FIXED | 고정형 저장장치 |
4 | DRIVE_REMOTE | 네트워크 Drive |
5 | DRIVE_CDROM | DVD/CD-ROM 유형 |
6 | DRIVE_RAMDISK | Ram Disk |
위의 표를 보면 HDD를 CD-Rom으로 인식시키기 위해 GetDriveTypeA의 리턴 값이 5여야 한다는 것을 알 수 있다.
이렇게 리턴 값을 찾아주었고, 이제 exe파일을 실행시켜보았다.
비슷한 말이 뜨는 것을 확인했고, 이 파일을 ollydbg로 열어보았다.
프로그램이 굉장히 간단하게 이루어져, 한 눈에 알아볼 수 있었다.
여기서 전해지는 리턴 값을 알기 위해 GetDriveTypeA의 다음 줄인 0040101D에 bp를 걸어준 후 실행시켜보았다.
EAX 값에 3이 전달되는 것을 확인할 수 있다.
이 이외에 따로 무언가를 입력해 flag를 얻는 문제인 것 같지 않아 Auth에 이 리턴 값을 입력해주었다.
출처
[1]lab.cliel.com/entry/GetDriveType-Disk-Drive-%EC%9C%A0%ED%98%95-%ED%8C%90%EB%8B%A8