X2r0Ar

CodeEngn Basic - 1 본문

Write-Up./CodeEngn

CodeEngn Basic - 1

D2v 2017. 2. 2. 20:21

CodeEngn Basic - 1


풀이 환경 : WinXP SP3 32bit, OllyDbg 1.0


Challenges : Basic 01


Author : abex


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

English :
What value must GetDriveTypeA return in order to make the computer recognize the HDD as a CD-Rom


◆ 동적분석



<Reverse_L01.exe 실행 화면 - 1>


"내가 너의 하드디스크를 CD-Rom으로 생각하게 만들어"라는 메세지 박스가 열립니다.


확인을 눌러보겠습니다.



<Reverse_L01.exe 실행 화면 - 2>


"이것은 CD-ROM 드라이브가 아니야!"라고 메세지 박스가 열립니다.


확인을 눌러보면 프로그램이 종료됩니다.


한번 OllyDbg에서 열어보겠습니다.


◆ 정적분석



<OllyDbg 화면 - 1>


해당 화면과 같은 모습을 볼 수 있습니다.(OllyDbg 셋팅에 따라 다를수도 있음)


먼저 MessageBoxA API를 파랑색 박스로 묶어주었습니다.


다음으로 GetDriveTypeA API를 빨강색 박스로 묶어주었습니다.


마지막으로 연산하는 부분을 분홍색 박스로 묶어주었습니다.


GetDriveTypeA API까지 실행 시켜 보겠습니다.



<OllyDbg 화면 - 2>


GetDriveTypeA API 까지 실행시키고 레지스터 창을 확인해보면


EAX가 3으로 셋팅 되어 있는것을 볼 수 있습니다.



<OllyDbg 화면 - 3>


이제 연산을 해보겠습니다.


0040101D  |.  46            INC     ESI
0040101E  |.  48            DEC     EAX
0040101F  |.  EB 00         JMP     SHORT 00401021
00401021  |>  46            INC     ESI
00401022  |.  46            INC     ESI
00401023  |.  48            DEC     EAX
00401024  |.  3BC6          CMP     EAX, ESI
00401026  |.  74 15         JE      SHORT 0040103D 

 ESI 레지스터 1증가

 EAX 레지스터 1감소

 00401021로 점프

 ESI 레지스터 1증가

 ESI 레지스터 1증가

 EAX 레지스터 1감소

 EAX 레지스터와 ESI 레지스터 비교

 비교된 값이 같으면 0040103D로 점프

 초기값 : EAX=3 ESI=FFFFFFFF

 EAX=3 ESI=00000000

 EAX=2 ESI=00000000

 EAX=2 ESI=00000001

 EAX=2 ESI=00000002

 EAX=1 ESI=00000002



이와 같은 연산이 진행 후


0040103D로 점프하게 됩니다.


분기문을 보면 EAX와 ESI 값이 같아야 하는데 EAX값이 1이 작습니다.


그러므로 GetDriveTypeA API에서 반환값이 1이 더 커야 CD-ROM으로 인식이 됩니다.




Comments