EASY7

[CodeEngn] Basic RCE L01 본문

Project/CodeEngn

[CodeEngn] Basic RCE L01

E.asiest 2019. 11. 5. 01:53

실습환경

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
Comments