2016. 1. 14. 16:52

이번에 풀 문제는 Crackit2.exe이다.

먼저 기본적으로 실행을 해본다.

 

입력 값을 요구하는 것으로 보아 키 값을 찾아야 하는 문제로 추측된다.

 

대충 아무거나 입력해봤더니 "ACCESS DENIED"가 떴다.

위 문자열은 키 값을 '판단' 한 후 뜨는 문자열이므로 ollydbg에서 위 문자열을 띄우는 루틴을 찾는 다면

키 값을 비교하는 루틴도 찾을 수 있을 것으로 판단된다. 

 



crackit2.exe를 ollydbg에서 실행한다.

 



ollydbg상에서 오른쪽 클릭 -> Search for -> all referenced text strings 를 클릭한다. 예상대로 문자열 목록을 보면

"ACCESS DENIED"가 존재한다. 또한 "ACCESS GRANTED"가 있는 것으로 보아 키값 비교 성공시 ACESS GRANTED가 뜰것으로 예상된다.

 

 referenced string 창에서 ACCESS DENIED를 더블클릭하면 위 사진처럼 "ACCESS DENIED"의 위치가 나온다.

comment 부분을 살펴보면 위쪽에 ACESS GRANTED가 있음을 알 수 있다.

ACCESS GRANTED 메세지가 push되고 함수가 호출되어야 키값이 맞다는 뜻인데, 004027A9를 보면 ACESS GRANTED 문자열이 있는 부분을 건너뛰고 ACCESS DENIED가 있는 쪽으로 JUMP하는 명령이 있다. 이 부분의 조건이 키값을 바르게 입력했는지 여부를 나타낸다. 4027A9 분기점은 EAX 값이 결정하고 이 값은 4027A2의 CALL EDI에서 결정된다. 

 



CALL EDI 부분에 브레이크포인트를 걸고 확인해보니 vbaStrCmp 함수를 호출함을 알 수 있다. 비교하는 문자열은 "yes"인데, 스택을 확인해보니 또다른 비교 문자열이 비어있다. 402781의 "yes" 문자열이 스택에 넣어지지 못했음을 의미한다. 

 



 하여 402781 주소의 "yes"가 어디서 건너뛰어졌는지를 찾아보면 402793으로 점프 되는 곳이 있음이 보인다. 이를 따라가본다.



40230c 주소에서 JUMP가 이루어졌음을 알 수 있다. 어떤 조건으로 점프되었는지를 살펴보면 상단에 vbaLenBstr 함수가 있는데, 이는 문자열의 길이를 나타내는 함수이다. 그리고 그 밑에 CMP 명령으로 7과 비교하는 부분이 있다. 즉, 입력하는 문자열의 길이가 7이 되어야 함을 알 수 있다.

 



길이가 7이 되어야 함을 알아냈으므로, 밑으로 내리다 보면 핵심 루틴이 보인다. 바로 문자열을 한캐릭터씩 비교하는 부분이다. 유니코드로 친절하게 69,99,104,108,110이 제공되어있다. 허나 이는 5자리 뿐이다. 자세히 보면 comment에는 보이지 않지만 104와 108 사이, 108과 110 사이에도 비교하는 값들이 있음을 알 수 있다. 이 값들은 디버깅을 통해 파악하도록 한다. 앞 세글자인 69,99,104는 아스키 코드 상에서 E,c,h이다.

 



 위 처럼 브레이크 포인트를 건다. 파라미터로 00401CD0를 넣음을 알 수 있다. 헥스 덤프 창에서 ctrl+g 버튼을 눌러 해당 주소로 가본다.

4010CD0에는 값 33이 들어있음을 알 수 있다.

 

같은 방식으로 6번째 문자는 0이 들어있음을 알 수 있다.

 

그리하여 위 아스키 값들을 문자로 변환하면 키값은 Ech3l0n이다

 

 



clear

'WriteUp' 카테고리의 다른 글

Crackit2.exe Writeup  (0) 2016.02.01
Crackit2.exe Writeup  (0) 2016.01.15
[예시] Easy Keygen (100pt)  (0) 2016.01.11
Posted by 키흐