[CodeEngn] Basic RCE L01
IDA를 통해 파일을 열어보기 전에 1.exe를 실행해 보았다.
아무런 작업을 하지 않은 상태에서 확인을 눌러 보았다.
IDA를 통해 실행한 뒤에 GetDriveTypeA의 값을 입력받는 곳에서 수정을 통해 값을 CD-ROM에 해당하는 것으로 입력하면 될 것 같다.
IDA 실행 화면이다.
GetDriveTypeA 함수를 실행한 뒤에 eax와 esi를 비교해서 둘이 같은지를 살펴본다.
둘이 같다면 Ioc_40103D로 이동해서 CD-ROM으로 인식한다.
GetDriveTypeA 함수를 찾아보았다.
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdrivetypea
GetDriveTypeA function (fileapi.h) - Win32 apps
Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.
docs.microsoft.com
return value를 찾아보니 5를 입력하면 CD-ROM으로 인식할 수 있을 것 같다.
GetDriveTypeA 함수의 리턴값은 EAX에 저장된다.
현재 EAX의 값은 3이기 때문에 DRIVE-FIXED로 인식된다.
해당 값을 더블클릭하여 5(CDROM의 return 값)로 수정한 뒤에 다시 실행하면 성공한다.
EAX 값은 초기값에서 dec를 2번 실행해 2 감소하고, ESI 값은 초기값(0)에서 3번 증가하여 3이 된다.
따라서 초기값이 5(CDROM)이면 cmp에서 두 수의 차이가 0이므로 ZF가 1이 되어 성공 문구가 출력된다.