My Study/CrackMe

CrackMe : abexcm1 풀이

크랙미 abexcm1 문제입니다.


abexcm1.exe


abexcm1을 올리디버거로 올리고 제일 먼저 보이는 올리디버거 코드 해석 부분에 Make me think your HD is a CD-Rom란 글자와 어셈블리어 코드 영역에 MessageBoxA라는 것이 보일것이다. 만약 이부분이 지나간다면


이런 메세지 창을 보게 될것이다.



 말 그대로 MessageBoxA의 API를 지나왔기 때문에 이런 창이 뜨는 것이다. 그렇다면 브레이크 포인트(F2)가 걸린 GetDriverTypeA 라는 부분을 지나치면 어떻게 되겠는가?   

 답은 드라이버 장치가 들어있는지 확인하고 그에 해당하는 값을 반환할 것이다. 어떠한 값도 설정하지 않고 그냥 지나가보았다.


[ GetDriverTypeA를 지나가자 EAX 레지스터가 3으로 초기화 되었다.]


 그리고 ESI 레지스터와 EAX 레지스터를 ESI를 3 증가지키고 EAX를 2 감소 시킨 뒤에 EAX와 ESI를 비교를 한다.

[비교한 값]


 값을 비교한 뒤에 점프를 하는데 여기선 Error 부분으로 그냥 들어간다.


 그리고 뜨는 창은 위와 같다.



 이제 문제 풀이를 해보자.


 GetDriverTypeA를 들어갔을 때 EAX값이 3으로 초기화 됬으니 그 이유를 알아보기 위해 MSDN을 참고 해보았다.



 반환하는 값을 보면 고정된 드라이버, 예를 들어 HDD나 SSD 일 때 3을 반환 한다. GetDriverTypeA를 들어가 스텍부분을 살펴 보았더니



경로가 C:\로 되어있다.

글쓴이의 C:\는 SSD이다. 그러니 3이 반환이 되는 것이다.


MSDN에서는 CD-ROM일 경우 5를 반환하니 EAX값을 5로 초기화 시키고 실행 보았다.


 그랬더니 성공.


 이 풀이는 레지스터를 변경하여 풀이한 것임으로 제대로된 풀이가 아니다. 그럼 어떻게 해야할까? API 부분에서 경로를 변경해야할까? 그럼 엄청 귀찮지 않을까? 차라리 3을 반환하더라도 결과 값이 같게만 만들어 준다면 될거 같다.





 EAX값을 빼는 것을 NOP으로 변경시키거나, ESI 증가를 1만 증가하게 만들거나 등등 여러가지가 있는데 나는 EAX 감소를 NOP으로 바꿨다.






















'My Study > CrackMe' 카테고리의 다른 글

CrackMe(RegisterMe)  (0) 2015.05.21
CrackMe (abex's 3rd crackme)  (0) 2015.05.20
CrackMe (Project1)  (0) 2015.05.19
CrackMe(babylon keygenme)  (0) 2015.05.19
CrackMe2(cffo-2)  (0) 2015.05.18
CrackMe : abexcm1 풀이  (0) 2015.05.13

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.