ii4gsp
CodeEngn - Basic RCE L01 본문
HDD를 CD-Rom으로 인식시키기 위해 GetDriveTypeA의 리턴값을 알아야 하는것 같다.
GetDriveTypeA의 리턴값을 몰라도 문제는 풀수있다.
GetDriveTypeA함수의 리턴값을 알아보자
위의 표는 return값에 따른 drive의 type이다.
HDD의 리턴값은 3이고 CD-Rom의 리턴값은 5이다.
첨부파일에 있는 프로그램을 실행시켜보면
오류가 발생하고 꺼지게 된다.
방법1
GetDriveTypeA함수의 리턴값을 알기 위해 GetDriveTypeA함수를 호출한 다음에 Break(F2)를 걸어 주었다.
레지스터의 값을 확인해보면 현재 EAX 값이 3이므로 HDD의 return value는 3이라는 것을 알 수 있다.
break를 풀어주고 F8로 한줄씩 실행해보면 ESI레지스터는 INC명령을 3번함으로 ESI = 3이되고, EAX 레지스터는 3에서 DEC명령을 두번해주니 EAX = 1이 된다.
EAX = 1, ESI = 3
JE는 비교하는 값이 같을때 점프를하는 명령인데 점프하는 주소를 보니 0040103D이다.
0040103D의 주소는 성공문자를 출력하는 부분이다.
CMP명령에서 비교하는값이 같아지면 0040103D의 주소로 점프를하여 성공문자를 출력할것이다.
CMP EAX, ESI에서 EAX부분을 ESI로 바꾸거나 ESI를 EAX로 바꿔주면 된다.
성공
방법2
프로그램 실행시 첫번째로 나오던 문구가 보이고 더밑을 보면
CMP EAX, ESI를 통해 두 값을 비교하고 그 값이 같다면
0040103D의 주소로 점프한다는 명령어다.
0040103D의 주소를 보니 성공한다는 문자열이 출력된다.
EAX와 ESI의 값을 모르니
JE SHORT Reverse_.0040103D의
JE명령어는 비교 결과가 같을 때 점프하므로
비교 결과가 다를 때 점프하는 JNE명령어로 바꾸어준다.
명령어를 바꾸고 실행시켜보면
성공
'리버싱 > CodeEngn Basic RCE' 카테고리의 다른 글
CodeEngn - Basic RCE L06 (0) | 2020.02.02 |
---|---|
CodeEngn - Basic RCE L05 (0) | 2020.02.02 |
CodeEngn - Basic RCE L04 (0) | 2020.01.09 |
CodeEngn - Basic RCE L03 (0) | 2020.01.09 |
CodeEngn - Basic RCE L02 (0) | 2020.01.09 |