WarGame/CodeEngn

[CodeEngn] 코드엔진 - Basic RCE 1 -

 

문제

"HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가."


풀이

01.7z의 압축을 해제햐면 01.exe의 PE File하나를 얻을 수 있다. 해당프로그램은 "HD를 CD-Rom으로 인식시켜 주세요." 라는 의미심장한 말과 함께 종료된다.

디버거로 한번 까보자

이화면을 보게되니 다시금 RCE문제를 풀고있구나가 느껴진다. 그래...우선 사용되는 문자열인 "Make me think your HD is a CD-Rom"이 .data에 raw로 존재하기를 바라며 찾아가보자.

굿 어렵지 않게 문자을 찾을 수 있었다. 우선 MessageBoxA의 파라미터로 들어가는 Title "abex's 1st crackme"를 찾아가자(0x00401002)

어렵지 않게 메인코드로 들어올 수 있었다. 0x00401026 필드에 je명령어 (같을경우 -> ZF가 1일때) 가 있다. 우선 강제로 움직여보자

ZF를 강제로 1로만들어서 성공했을 때로 가보았다. 결과는 좋지못하다.

으흠; 특별한것은 보이지 않고, MessageBoxA의 파라미터만 바뀐다.

문제를 다시 읽어보자. 문제가 요구하는것은 GetDriveTypeA의 값이 무엇이 되냐는 것이다. 잠깐 API를 보고오자.

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdrivetypea

 

GetDriveTypeA function (fileapi.h) - Win32 apps

Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.

docs.microsoft.com

그렇다. DRVIE_CDROM의 값은 int 5이다. 정답또한 5가 될 것이다.


첫문제부터 난항을 겪었다. 역시 오랜만에 어셈블리어를 보니 기본적인 명령어 사용법도 제대로 기억이 안난다. 빨리 실력을 끌어올려야한다.