EASY7
[CodeEngn] Basic RCE L01 본문
실습환경
VMware Workstation
OS : Window XP
OllyDbg(shadow)
문제
HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가
파일에 대한 이해
-EXE 실행파일
-ImageBase : 0x400000
-Entry Point : 0x1000
-클릭 시 연속적인 메세지 박스가 뜬다.
-GetDriveTypeA 함수의 리턴값을 변경해주면 CD-Rom이 있다고 착각하게 할 수 있을 것이다.
문제 풀이
1.GetDriveTypeA는 CD ROM의 유무를 알려주는 함수로 추정된다.
리턴값은 EAX레지스터에 저장되며 3이다.
2. 리턴값은 EAX에 저장되며, 그 후 값이 변경된다.
ESI는 세 번 1씩 증가하고 EAX는 두번 1씩 감소한다.
3. 중요한 로직 부분은 이 부분이다.
EAX와 ESI를 비교해서 같으면 성공이다.
레지스터를 확인해보면
EAX=1, ESI=2이다.
그러므로 EAX(리턴값)을 +1해주면 된다.
4. GetDriveTypeA함수 실행 후, ESX레지스터의 값을 더블클릭하여 값을 4로 변경하면 성공 메세지가 뜬다.
**다른 블로그에서는 답을 +2한 5라고 하지만,, 나는 답이 4로 나온다...ㅠㅠ;;
이유는 ESI 레지스터에 있다.
1. INC ESI
2. INC ESI
3. INC ESI
세번의 ESI를 증가시킬 때, 첫번째 INC 실행 후에 ESI에는 0이 삽입된다...
다른 블로그에서는 GetDriveTypeA함수 실행 후 리턴값이 0이라고 한다..(참고 블로그 : https://rhaksmoking.tistory.com/83)
리턴값이 다른데.. 내가 어찌할 수 없는 부분이다...ㅠㅠ
새로 배운 어셈블리어
** a와 b를 비교해 같으며 함수로 jump (값이 같으면 z 플래그는 1이 됨)
CMP a b
JE 함수
'Project > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L06 (0) | 2019.11.15 |
---|---|
[CodeEngn] Basic RCE L05 (0) | 2019.11.10 |
[CodeEngn] Basic RCE L04 (0) | 2019.11.10 |
[CodeEngn] Basic RCE L03 (0) | 2019.11.05 |
[CodeEngn] Basic RCE L02 (0) | 2019.11.05 |