문제는 위와 같습니다.
문제 파일을 받고 실행해 보겠습니다.
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이 맞다고 뜹니다.