Basic RCE Level01을 보도록 한다.
HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가라고 묻고 있다.
파일을 우선 다운받아보고, 이를 ollydbg로 열어본다.
ollydbg 사용법은 아래를 봐주면 된다.(x32dbg, x64dbg와 유사한 방식이기 때문에 아래를 봐도 무방하다)
https://happylulurara.tistory.com/3?category=768326
일단 실행을 해보았다.
딱 봐도 'Nah... This is not a CD-ROM Drive!'라고 할 듯 하다.
F8을 통해 프로그램을 실행해보도록 한다.
'Make me think your HD is a CD-Rom.'으로,
HD를 CD-Rom으롤 만들어달라고 한다.
조금 더 진행해보니, 'Nah..this is not a CD-ROM Drive!'라고 한다.
밑을 확인해보니, 'OK, I really think that your HD is a CD-ROM!~'으로 만들어야 함을 유추할 수 있다.
이때, GetDriveTypeA의 리턴값을 바꾸는 문제임을 생각하고 문제를 풀어본다.
GetDriveTypeA를 실행하고 레지스터창을 보니,
리턴값을 담는 레지스터인 EAX의 값이 3임을 확인할 수 있다.
코드를 천천히 보도록 한다.
INC ESI //ESI: 00401001 DEC EAX//EAX: 2 JMP 00401021 //그냥 밑줄로 넘어감 INC ESI //ESI: 00401002 INC ESI //ESI: 00401003 DEC EAX //EAX: 1 CMP EAX, ESI //비교한다. JE SHORT 0.0040103D //같으면 OK, I really think that your HD is a CD-ROM!~로 이동한다. |
위를 해석해보면 이렇다.
근데 00401003이랑 1이 같을 리가 없다.
그래서 'Nah...이건 CD-ROM이 아니다'가 나오는 것이다.
문제는 GetDriveTypeA의 리턴값이 어떻게 되어야 하는지 묻고 있다.
즉, EAX가 00401003이 되어야 한다.
그러므로 GetDriveTypeA의 리턴값에 00401002를 더해주어야 한다.
원래 리턴값 EAX가 3이었기 때문에 00401002+3이어야 했음을 알아냈다.
(근데 Imagebase가 401000이기 때문에 지워도 상관 없다)
그래서 GetDrive함수에서 나왔을 때, EAX값을 이처럼 바꾸었다.
문제가 해결됐다.
'리버싱' 카테고리의 다른 글
[CodeEngn]코드엔진 basic RCE L04 (0) | 2020.07.21 |
---|---|
[CodeEngn]코드엔진 basic RCE L 03 (0) | 2020.07.20 |
[CodeEngn]코드엔진 basic RCE Level 02 (0) | 2020.07.19 |
PE파일 분석-메모장 (0) | 2020.04.16 |
[Reversing]ollydbg로 시작주소와 main함수 확인하기 (0) | 2020.04.02 |