CodeEngn Basic 문제 풀이 시작!!
1번 문제의 내용이다.
파일을 다운받은 후 실행시켜 보면 아래와 같은 화면이 나옵니다.
CD-Rom이 아니라고 하는 군요.
OllyDBg 풀이:
Ollydbg로 본 어셈블리코드입니다. 아래 String 값들을 보니 00401026 에 있는 JE 조건분기점에서 아래쪽으로 점프를 해야 하드로 인식한 거군요. 여기서 JE 명령어란 Jump if Equal이란 뜻으로 Zero flag의 값이 0일 경우 점프하게 됩니다.
이 zero flag를 0으로 세팅하려면 바로 윗줄인 CMP EAX, ESI 에서 0이 나와야 하며 이는 두 값이 같다는 뜻입니다.
비교하는 두 값의 변화를 쫓아서 올라가다보면 GetDriveTypeA를 호출하였습니다. 반환값은 EAX에 들어갔을 것이고, 코드를 계속해서 분석해 내려가면
INC ESI //ESI++
DEC EAX //EAX--
JMP SHORT Reverse_.00401021 //점프하는 곳 위치가 바로 아래입니다.
INC ESI //ESI++
INC ESI //ESI++
DEC EAX //EAX--
결국 ESI의 값은 3이 되며 EAX의 값이 3이 되기 위해서는 반환값이 5여야함을 알 수 있습니다.