본문 바로가기
Information Security/Reversing

[CodeEngn] Basic RCE - Level 1 풀이

by 이키마스 2022. 1. 27.

 

CodeEngn Basic RCE 1번 문제입니다.

 

HDD를 CD-ROM으로 인식하기 위한 GetDriveTypeA의 리턴 값을 구하라고 하네요.

 

일단 해당 문제를 다운로드 후 실행시켜보도록 하겠습니다.

 

처음 실행시키면 하드디스크를 시디 롬으로 만들어라라고 뜨고

확인을 누르면 이건 시디 롬이 아니야라고 뜨네요.

이래서 하드디스크를 시디 롬으로 만들라고 했던 거네요.

 

올리 디버거로 실행시켜 보도록 하겠습니다.

 

일단 분석해보면 MessageBox를 통해서 확인 버튼이 있고, 제목이 abex 1st crackme이고,

본문이 Make me think ~ 어쩌고 부분임을 알 수 있습니다.

참고로 프로그램은 스택 구조로 실행되기 때문에 masseBoxA 함수가 밑에 있습니다.

그것이 끝나고 GetDriveTypeA 함수를 호출하고 ESI 값을 증가시키고 GetDrivceTypeA 함수의 반환값인 EAX의 값을 1 감소시켜 고 난 후 비교를 하네요.

ESI의 값과 EAX 값이 같으면 ok 멘트가 출력되고, 그게 아니면 시디 롬이 아니라고 뜨네요.

 

비교할 때 레지스터의 값을 보면 EAX는 1 ESI는 2 인 것으로 알 수 있습니다.

ok 문구를 보기 위해서는 EAX나 ESI 값을 서로 일치 시키면 되겠죠.

ps. 사실 ok 문구를 보기 위한 방법은 다양합니다.

 

그런데 문제는 그게 아니라 GetDriveTypeA의 리턴 값이 CD-ROM이 되어야 하죠

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

GetDriveTypeA function

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

docs.microsoft.com

위의 url로 들어가시면 GetDriveTypeA의 리턴 값이 나옵니다.

 

 

반응형

댓글