본문 바로가기

0x00 /0x03 Challenge

- Reversing.kr Challenge (1) Easy Crack

# Reversing.kr 에 있는 워게임 문제 풀이입니다. Easy Crack 100점 짜리 문제이구요. 

  사람들이 가장 많이 푼 문제이기도 해요.ㅎ 앞으로 꾸준히 문제를 풀어보려구요.

  그럼 Easy Crack 문제 풀이 시작할게요.





1. 문제 의도 파악

- 처음 Easy Crack 파일을 실행시키면 아래와 같은 윈도우 창이 하나 뜹니다.



- 윈도우 창이 하나뜨고 그 안에 아무 값이나 넣고 확인 버튼을 누르니, 패스워드가 틀렸다고 나오네요.

- 이 문제는 패스워드를 찾는 문제인것같네요.







2. Ollydbg를 이용하여 디버깅

- 키 값을 찾기 위해서, 사용자가 입력한 값과 비교하는 부분을 찾아봐야겠네요.

- 우선, Search for - All referenced strings 기능을 이용해서 이 프로그램에서 사용되고 있는 문자열을 찾아봤습니다.



- 뭔가 문제를 풀기 위한 실마리가 보이시지 않나요?ㅎ 우선 키값을 맞췄을 때, 그리고 키값을 틀렸을 경우의 뜨는 문구가 보이네요. 

- 맞췄을 때의 주소로 이동해서 천천히 살펴보도록 합시다.







3. 디버깅 결과

- 위에서 찾은 "Congratulation !!"이란 문자열이 참조되는 0040111B 주소로 이동해서 천천히 앞에서 나온 조건 분기문을

  살펴본 결과, 키값 확인을 위한 총 3번의 문자비교가 있었습니다.


  # 1. 첫번째는 사용자가 입력한 문자열에서 두번째 문자와 'a'와 비교해서 같지 않다면, 바로 실패 문구인 

        "Incorrect Password" 문자를 출력하는 부분으로 이동합니다. 즉, 키값에서 두번째 문자는 'a'가 되어야

        한다는 점을 알 수 있습니다.


- ESP+5 의 값과 61('a')를 비교한후 같지 않으면 00401135 주소로 이동하게 됩니다. 00401135 주소는 앞에서 말했듯이

  실패 문구를 출력하고 끝나는 부분에 해당됩니다.

- 스택을 살펴보면 ESP+5 는 사용자가 입력한 문자열에서 두번째 문자임을 확인할 수 있습니다. 


   첫 번째 분기문에서 알게 된 사실 - 키값 두번째 문자는 'a' 이다.




  # 2. 두번째는 첫번째 분기바로 아래에 존재합니다. 어떤 함수를 호출하는데 인자 3개를 주는데, 

        ARG1 = 사용자가 입력한 키값에서 3번째문자부터 끝까지 해당    ex) Ba1524 입력시,  ARG1 = 1524

        ARG2 = 5y

        ARG3 = 2


       두번째 세번째 인자값은 하드코딩되어있었습니다. 이렇게 3개의 인자를 가지고 함수를 호출합니다.

       아주 정확헤 분석해보진 않았지만, 대충 훑어봤더니, 5y와 사용자가 입력한 값(세번째문자부터)을 비교하더군요.




   

       함수를 빠져나왔을때, TEST 명령어를 이용해서 EAX 값이 0이 되는지 아니면 그외의 값이 되는지를 확인해서

       00401135 주소로 이동합니다. 0이 되어야 실패 부분으로 가지 않습니다.

   

       즉, 키값 3번째 4번째 문자는 5와 y가 된다는 것을 알 수 있었습니다.


두 번째 분기문에서 알게 된 사실 - 키값 세번째 문자는 '5'    네번째 문자는'y'


지금까지 확인한 사실들로 키값을 추측하면 "?a5y????" (길이모름)



   # 3. 위의 2가지 조건을 만족시키면 마지막 비교부분이 나옵니다. 여기선 "R3versing"이라는 문자열이 눈에 띕니다.

         순서대로 디버깅을 하다보면, 사용자 입력값 5번째 문자부터 "R3versing"과 같은지 확인을 하고, 다르다면 역시

         실패로 부분으로 이동합니다. "R3versing" 이란 문자와 일치하게 되면, 가장 첫번째 문자가 'E' 인지 확인을 합니다.

         


- "R3versing"이라는 문자와 사용자가 입력한 문자열(5번째문자부터비교) 비교하는 부분



- 마지막으로 첫번째 문자가 'E'인지 확인하는 부분




         결국 위에서 확인 내용들을 바탕으로 키값을 만들어보면 


"Ea5yR3versing" 이란 키값이 완성됩니다.