본문 바로가기
Security_/Reversing

[풀이] abex' crackme #1

by 낭람_ 2021. 9. 15.
반응형

abex' crackme.zip
0.01MB

 

abex' crackme #1

 

분석하기 전에 실행을 해보자. 

 

 

"Make me think your HD is a CD-Rom." 문구가 출력된다.

 

 

확인을 누르면 "Nah.. This is not a CD-ROM Drive!" 문구가 나온다.

 

OllyDbg를 실행하여 분석을 진행해보자.

 

  * OllyDbg 기본 명령어

[Ctrl +F2] : Restart - 다시 처음부터 디버깅 시작 (현재 진행 중인 프로세스 종료 후 재시작)

[F7] : Step Into - 하나의 OP Code 실행 (CALL 명령을 만나면 함수 내부로 들어감)

[F8] : Step Over - 하나의 OP Code 실행 (CALL 명령을 만나면 함수 자체를 실행)

[Ctrl + F9] : Execute till Return - 함수 코드 내에서 RETN 명령어까지 실행 (함수 탈출)

 

 

MessageBoxA("Make me think your HD is a CD-ROM.", "abex\' 1st crackme")
GetDriveTypeA("C:\\")
...
MessageBoxA("Nah... This is not a CD-ROM Drive!", "Error")
MessageBoxA("OK, I really think that your HD is a CD-ROM! :p", "YEAH!")

 

Win32 API함수 호출 기준으로 분석을 한다면 위처럼 나온다.

 

제작자의 의도는 GetDriveTypeA 부분을 CD-ROM 타입으로 인식을 하게 하여

 

"Ok, I really think that your HD is a CD-ROM! :p"가 출력되게 하는 것 같다.

 

 

401018 부분을 실행하면 EAX가 3으로 설정되는 것을 확인할 수 있다.

 

GetDriveType함수의 Return 값을 찾아보자.

  0 : Drive Unknown

  1 : Drive No Root Dir

  2 : Drive Removable

  3 : Drive Fixed

  4 : Drive Remote

  5 : Drive CDRom

  6 : Drive Ramdisk

 

3은 Drive Fixed a hard disk drive 또는 flash drive 상태이다.

 

 

GetDriveTypeA 이후의 부분을 보면 ESI(401000), EAX(3) 인 상태에서 

 

INC ESI ; ESI + 1
DEC EAX ; EAX - 1
JMP 401021 ; 401021로 JMP
INC ESI ; ESI + 1
INC ESI ; ESI + 1
DEC EAX ; EAX - 1
CMP EAX, ESI : EAX, ESI를 비교

 

위처럼 되는데.. CMP 부분까지 간다면 ESI(401003), EAX(1) 이 된다.

 

..? ESI와 EAX의 값이 너무 달라 구글링을 해봤다..

 

다른 블로그나 리버싱 핵심원리 책을 보면 ESI가 401000이 아닌 0으로 설정되어있다..

 

 

아마도 실행할때 이 경고창 때문에 ESI 값이 다른 거 같다.

 

만약 GetDriveTypeA 이후에 ESI(0), EAX(5) 로 설정되어 있다면 CMP EAX, ESI에서 ESI(3), EAX(3)이 된다!

 

ESI는 0으로 직접설정해주고, EAX는 GetDriveTypeA에 들어가는 인자를 변경하여 5로 설정해주자..

 

인자부터 바꿔보자.. 현재 내 pc는 d:\가 CD-Rom이다.

 

(사실 CD-Rom이 없어서 이미지를 마운트 해뒀다.. ㅎ)

 

 

PUSH 402094

 

402094에서 C:\ 문자열을 가져오고 있다. 메모리를 확인해보자.

 

 

[c:\] 63 3A 5C 를 [d:\] 64 3A 5C로 변경해준다.

 

 

63 부분을 클릭 후 64라고 적으면 이런 창이 나온다.

 

ASCII가 d로 되어있는 것을 확인하고 OK를 누른다.

 

 

 

40101D까지 실행하면 EAX가 5로 설정되어 있는 것을 확인할 수 있다.

D:\가 CD-Rom이기 때문에 GetDriveTypeA함수의 Return값이 5(Drive CDRom)가 나오는 것이다.

 

 

ESI는 회색부분을 더블클릭하면 수정할 수 있다.

 

 

0으로 설정하고 OK를 누르자.

 

 

EAX(5), ESI(0) 설정이 끝났다.. ㅠ

 

INC ESI ; ESI + 1
DEC EAX ; EAX - 1
JMP 401021 ; 401021로 JMP
INC ESI ; ESI + 1
INC ESI ; ESI + 1
DEC EAX ; EAX - 1
CMP EAX, ESI : EAX, ESI를 비교
JE SHORT 0040103D ; CMP 결과 같으면 0040103D로 JMP

 

위의 부분에서 EAX(3), ESI(3)이 되면서 40103D로 JMP를 하게 된다.

 

 

풀이 끝..!

 

 

반응형

댓글