ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Basic 01
    Write-Up/CodeEngn 2019. 7. 4. 16:09

    문제: HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴 값이 무엇이 되어야 하는가?

     


    문제를 다운로드 받아서 exe 파일을 실행시키면 다음과 같은 메세지 박스가 출력된다. 

     

     

    확인 버튼을 누르면 다음과 같은 화면이 출력된다. 

     

     

     

    [풀이 1] IDA사용

     

    exe파일을 IDA로 열면 다음과 같은 화면이 출력된다. 

    이를 통해 eax와 esi를 비교해서 같은면 "YEAH!"로 이동함을 알 수 있다 .

    따라가다보면 esi 값이 3임을 알 수 있고, eax와 같아야 하므로 최종적으로 eax의 값은 3이어야한다. 

    그러나 위에 dec eax가 2번 존재하므로 return 값은 5이다. 

     

     

    [풀이2] OllyDbg 사용

    Ollydbg로 파일을 열면 다음과 같은 화면이 뜬다 .

     

    풀이 2-1) JE를 JMP로 변경해서 조건문에 상관없이 점프하기 

    F7을 이용해서 메시지 박스가 나올 때까지 내려가 보면 00401026에 JE SHORT 0040103D를 볼 수 있다.

    이 부분을 보면 eax와 esi가 같으면 jmp를 실행하라고 되어있다. (je는 조건문과 같다.)

    즉, 이 부분을 jmp로 변경해주면 조건문에 상관없이 그냥 점프할 수 있고 그러면 성공이다. 

     

    풀이 2-2) esi를 eax로 변경하기

    점프의 조건이 eax와 esi가 같을 때 점프하는 것이니, esi를 eax로 변경하면 당연히 eax==eax의 식이 성립하게 되고, 점프할 수 있게된다. 

     

     

     

     

    [풀이 3] 그 외 

    문제를 보면 GetDriveTypeA의 return값에 대해 묻고있다. 

    이와 관련된 것을 찾아보면 다음과 같다. 

    https://docs.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getdrivetypea

     

    GetDriveTypeA function (fileapi.h)

    Determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.

    docs.microsoft.com

     

    CDRom으로 변경하라 했으니, 값을 5로 변경해주면 문제를 해결할 수 있다. 

     

    'Write-Up > CodeEngn' 카테고리의 다른 글

    Basic 06  (0) 2019.07.04
    Basic 05  (0) 2019.07.04
    Basic 04  (0) 2019.07.04
    Basic 03  (0) 2019.07.04
    Basic 02  (0) 2019.07.04
Designed by Tistory.