-->

[CodeEngn] Basic RCE L01 풀이

반응형

2016년에 작성했던 풀이를 현재 블로그에 옮깁니다(하루에 2~3개씩 옮길 예정).

 

 

CodeEngn Basic RCE L01 문제 확인

HDD를 CD-Rom으로 인식시키기 위한 GetDriveTypeA의 리턴값을 묻고 있다. 드라이브 타입을 얻어오는 GetDriveTypeA 함수 호출 부분 위주로 분석해보면 될 것 같다.

 

 

 

CodeEngn Basic RCE L01 문제 풀이

실행파일을 실행시켜보니 'Make me think your HD is a CD-Rom'이라는 경고창이 뜬다. 

 

 

 

사실 이 문제는, GetDriveTypeA API의 반환값만 살펴봐도 풀리는 문제이다. CD-ROM으로 인식되야 하기 때문에 반환값은 '5'여야 한다.

 

 

 

하지만, 공부하는 입장이므로 좀더 살펴보자. 아래 분기를 보면, GetDriveTypeA로 나온 반환값은 eax에 저장될 것이고 분기가 나뉠때까지 eax는 총 2번 감소되고 eax와 비교되는 esi는 3번 증가되고 있다.

 

 

 

GetDriveType호출 후 eax는 3이고 esi는 401000인데 eax는 -2되고 esi는 +3 후 두 레지스터 값이 같아야 하는 것을 생각하면 eax는 401005가 되어야 함을 알 수 있다.

 

 

아래 캡쳐처럼 두 레지스터가 동일하게됐고 'Ok, I really think that your HD is a CD_ROM! :p'이라는 창을 볼 수 있게된다. 참고로 401005에서 401000은 imagebase이기 때문에 정답은 5가 맞다.

 

 

댓글

Designed by JB FACTORY