[CodeEngn] Basic RCE L01 풀이
- 리버싱/CodeEngn
- 2020. 2. 18. 16:38
반응형
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가 맞다.
'리버싱 > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L06 풀이 (0) | 2020.02.20 |
---|---|
[CodeEngn] Basic RCE L05 풀이 (UPX 패킹) (0) | 2020.02.19 |
[CodeEngn] Basic RCE L04 풀이 (IsDbuggerPresent) (0) | 2020.02.19 |
[CodeEngn] Basic RCE L03 풀이 (0) | 2020.02.18 |
[CodeEngn] Basic RCE L02 풀이 (0) | 2020.02.18 |