[CrackMe#1] Abex' crackme1 풀이

728x90

 

[풀이 방법 1] - 야매

- 같은 메세지 박스에서 메시지를 불러오는 명령행 확인.

- 복사해서,

- 붙여넣기,

- 진짜 엄청난 꼼수였지만 성공.

 

 

[풀이 방법 2] - 정석

- 엔트리 포인트를 확인하고 F8을 눌러 GetDriveTypeA 전까지 실행시켜보자.

- 코드가 실행되면서 우측 레지스터 값이 바뀌는 걸 알 수 있다.

- call <jmp.&KERNEL32.GetDriveTypeA> 를 실행시켰더니 EAX가 3으로 설정된다. 

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

해당 함수의 return 값은 위와 같다. 3은 flash drive거나 hard disk drive라는 뜻이다. 우리가 띄우고자 하는 메시지 박스는 드라이브가 CD-ROM일 때 실행되므로 리턴값을 5로 바꿔주면 된다.

EAX 3 ESI 401000
//F8 - INC ESI
EAX 3 ESI 401001
//F8 - DEC EAX
EAX 2 ESI 401001
//F8 - JMP 401021
EAX 2 ESI 401001 
//F8 - INC ESI
EAX 2 ESI 401002
//F8 - INC ESI
EAX 2 ESI 401003
//F8 - DEX EAX
EAX 1 ESI 401003

이 다음의 401024에서 CMP EAX, ESI 명령을 수행하는데, 

EAX, ESI 두 값이 동일하면 401026에서 40103D로 이동하는 것으로 추측된다. 

 

ESI 값은 수정하지 않는 상태에서, GetDriveType 함수의 CD-ROM 리턴 값 5를 EAX에 대입한다면...

EAX 5 ESI 401000
//F8 - INC ESI
EAX 5 ESI 401001 
//F8 - DEC EAX
EAX 4 ESI 401001
//F8 - JMP 401021
EAX 4 ESI 401001 
//F8 - INC ESI
EAX 4 ESI 401002
//F8 - INC ESI
EAX 4 ESI 401003
//F8 - DEX EAX
EAX 3 ESI 401003

CMP EAX, ESI에서 EAX(3) ESI(401003)이 된다.

이를 통해 ESI 값을 0으로 수정할 경우 EAX(3), ESI(3)으로 결과값이 같아진다는 것을 알 수 있다.

EAX 5 ESI 0
//F8 - INC ESI
EAX 5 ESI 1
//F8 - DEC EAX
EAX 4 ESI 1
//F8 - JMP 401021
EAX 4 ESI 1 
//F8 - INC ESI
EAX 4 ESI 2
//F8 - INC ESI
EAX 4 ESI 3
//F8 - DEX EAX
EAX 3 ESI 3

 

이제 레지스터의 ESI 값과 GetDriveTypeA에 들어가는 인자를 변경해 리턴 값을 5로 만들어보자.

- 수정하고자 하는 부분을 선택하고 Binary edit(Ctrl+E)하면 수정 가능하다.

- 레지스터에서도 수정하고자 하는 부분을 더블클릭하면 수정 가능하다.

- 성공적으로 원하는 메시지 박스를 띄워냈다.

 

728x90