본문 바로가기

리버싱

[CodeEngn]코드엔진 Basic RCE Level01

Basic RCE Level01을 보도록 한다.

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

파일을 우선 다운받아보고, 이를 ollydbg로 열어본다.

 

ollydbg 사용법은 아래를 봐주면 된다.(x32dbg, x64dbg와 유사한 방식이기 때문에 아래를 봐도 무방하다)

https://happylulurara.tistory.com/3?category=768326

 

일단 실행을 해보았다.

딱 봐도 'Nah... This is not a CD-ROM Drive!'라고 할 듯 하다.

F8을 통해 프로그램을 실행해보도록 한다.

'Make me think your HD is a CD-Rom.'으로,

HD를 CD-Rom으롤 만들어달라고 한다.

조금 더 진행해보니, 'Nah..this is not a CD-ROM Drive!'라고 한다.

밑을 확인해보니, 'OK, I really think that your HD is a CD-ROM!~'으로 만들어야 함을 유추할 수 있다.

이때, GetDriveTypeA의 리턴값을 바꾸는 문제임을 생각하고 문제를 풀어본다.

GetDriveTypeA를 실행하고 레지스터창을 보니,

리턴값을 담는 레지스터인 EAX의 값이 3임을 확인할 수 있다.

코드를 천천히 보도록 한다.

INC ESI //ESI: 00401001
DEC EAX//EAX: 2
JMP 00401021 //그냥 밑줄로 넘어감
INC ESI //ESI: 00401002
INC ESI //ESI: 00401003
DEC EAX //EAX: 1
CMP EAX, ESI //비교한다.
JE SHORT 0.0040103D //같으면 OK, I really think that your HD is a CD-ROM!~로 이동한다.

위를 해석해보면 이렇다.

근데 00401003이랑 1이 같을 리가 없다.

그래서 'Nah...이건 CD-ROM이 아니다'가 나오는 것이다.

 

문제는 GetDriveTypeA의 리턴값이 어떻게 되어야 하는지 묻고 있다.

즉, EAX가 00401003이 되어야 한다.

그러므로 GetDriveTypeA의 리턴값에 00401002를 더해주어야 한다.

원래 리턴값 EAX가 3이었기 때문에 00401002+3이어야 했음을 알아냈다.

(근데 Imagebase가 401000이기 때문에 지워도 상관 없다)

그래서 GetDrive함수에서 나왔을 때, EAX값을 이처럼 바꾸었다.

문제가 해결됐다.

 

반응형