Reverse L01
'Wargame > CodeEngn (Basic)' 카테고리의 다른 글
Reverse L06 (0) | 2012.11.17 |
---|---|
Reverse L05 (0) | 2012.11.17 |
Reverse L04 (0) | 2012.11.16 |
Reverse L03 (0) | 2012.11.16 |
Reverse L02 (0) | 2012.11.16 |
Reverse L01
문제는 위와 같습니다.
문제 파일을 받고 실행해 보겠습니다.
Hard disk를 CD-Rom으로 속이라고 합니다.
CD-Rom이 아니라고 뜹니다.
그리고 끝입니다.
다운받은 파일을 OllyDbg로 열어봅니다.
코드가 굉장히 짧습니다.
하나씩 따라가며 확인해 보겠습니다.
제일 먼저 MessageBoxA 함수를 call 하는 것을 확인할 수 있습니다.
Parameter는 comment를 보면 쉽게 알 수 있습니다.
이 문제에서 중요한 부분은 아니니 넘어갑니다.
바로 밑에 GetDriveTypeA 함수가 보입니다.
문제에서 GetDriveTypeA 함수를 언급했으므로 이 부분이 중요하다는 것을 알 수 있습니다.
GetDriveTypeA는 이름 그대로 drive의 type을 return 해 주는 함수입니다.
GetDriveType 함수 원형은 다음과 같습니다.
함수의 return 값은 다음과 같습니다.
Return code/value |
Description |
DRIVE_UNKNOWN (0) |
The drive type cannot be determined. |
DRIVE_NO_ROOT_DIR (1) |
The root path is invalid. |
DRIVE_REMOVABLE (2) |
The drive has removable media. |
DRIVE_FIXED (3) |
The drive has fixed media. |
DRIVE_REMOTE (4) |
The drive is a remote (network) drive. |
DRIVE_CDROM (5) |
The drive is a CD-ROM drive. |
DRIVE_RAMDISK (6) |
The drive is a RAM disk. |
GetDriveTypeA 함수 다음을 보도록 하겠습니다.
GetDriveTypeA 이후 EAX를 2 감소시킵니다.
그리고 ESI와 비교하고
JE를 통해 분기합니다.
EAX와 ESI가 같으면 성공 메시지로 분기하고
다르면 실패 메시지로 분기하는 것을 확인할 수 있습니다.
JE 위치에서 ESI는 2입니다.
EAX는 4가 되도록 하면 되겠습니다.
GetDriveTypeA가 끝난 이후 EAX를 4로 바꾸고 실행해봅니다.
CD-Rom이 맞다고 뜹니다.
Reverse L06 (0) | 2012.11.17 |
---|---|
Reverse L05 (0) | 2012.11.17 |
Reverse L04 (0) | 2012.11.16 |
Reverse L03 (0) | 2012.11.16 |
Reverse L02 (0) | 2012.11.16 |