X2r0Ar
CodeEngn Basic - 1 본문
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 | 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으로 인식이 됩니다.