Easy Crack
파일을 다운받아 실행시켜 보면 입력창과 확인버튼이 있다.
아무 내용을 넣고 확인을 누르면 "Incorrect Password"라는 경고창이 뜬다.
해당 파일을 분석해서 Password가 뭔지 찾아내면 될 것 같다.
분석
※ OllyDbg프로그램에 대한 기본 단축키와 디스어셈블리 언어를 기본적으로 알고있다는 가정하에 진행합니다.
처음 디버거에 붙이면 401188주소에서 시작된다. 한줄 한줄씩 분석해서 내려가자.
401251주소에서 401000주소부분을 콜하는 것을 볼 수 있다. 해당 라인을 실행(단축키 : F8) 시키면 아까와 같이 입력창이 뜬다.
그러면 401000주소 부분에 입력창을 뜨게 하는 명령이 있다는 것을 추측할 수 있다.
해당 주소로 가보자.
401000주소부터 하나씩 분석해가며 내려가다보면 401010부분에 DialogBoxParamA 함수를 콜한다.
즉, 메시지박스를 띄우는 함수이다. 해당 라인을 실행해보면 역시 메시지박스를 띄운다.
여기서 우리는 다시한번 생각해야 된다. 본인 같은 경우는 아무 생각없이 분석해 가다보면 '내가 지금 왜 분석하고 있는거였지?'라는 멍청한 생각에 빠진다.
프로그래머 입장에서 먼저 생각을 해보자. 입력창에 어떠한 값을 입력하고 '확인'버튼을 누르면 분명 어느 부분에서 사용자가 입력한 값과, 프로그래머가 정한 값과 비교하는 비교구문이 있을 것이다. 우리는 그 부분을 찾아내서 프로그래머가 어떠한 Password를 설정해 놨는지 찾으면 되는 것이다.
401251부분에 함수부분을 찾아 들어가자. (단축키 : F7)
위처럼 계속해서 메시지 박스가 뜨는 부분을 파고 들어가다보면 다음과 같은 부분을 만나게 된다. (단축키 : Ctrl+F7)
딱보면 뭔가 ASCII코드로 어떠한 값들이 보이기 시작한다. 느낌이 좋다.
4010AA주소부분에 "getDlgItemTextA"함수를 실행하고 나면 우리가 입력한 값중 1글자를 가져와서 esp+4주소부분 부터 스택에 저장한다.
(입력값 : aaaa)
그리고 4010B0주소 부분의 명령어를 살펴보면 CMP BYTE PTR SS:[ESP+5], 61이라고 되어 있는데, esp+5부분에서 바이트 크기만큼 가져와서 61과 비교한다는 것이다.
즉, 사용자가 입력한 2번째 문자가 a(0x61)인지 확인하는 것이다.
4010B5부분에 점프구문에서는 사용자가 입력한 2번째 문자가 'a'가 아니게 되면 점프를 하게 된다. (얼떨결에 두번째 문자를 맞췄다 =-=;;)
점프문을 통과하고 나면 4010B9주소 부문에서 스택(esp+a)부분(우측하단 스택 참조)에서 DWORD만큼 주소를 ECX레지스터에 저장한다.
그리고나서 ECX를 스택에 PUSH하고 401150부분을 CALL하는 것을 볼 수있다. 401150함수를 찾아 들어가보자.
401150주소부터 하나씩 분석해보면 사용자가 입력한 문자의 3번째, 4번째 문자가 '5y'인지 확인하는 과정을 거친다.
3,4번째 문자에 '5y'를 넣고 함수를 빠져나오면 "TEST EAX,EAX"명령어가 기다리고 있다. 해당 명령어는 EAX의 값이 0인지 확인 하는 과정으로 참이면 Zero플래그가 1이 되고, 아니면 0이된다.
만약 EAX값이 0이 아니게 되면 Zero플래그가 0이되고, Zero플래그가 0이되면 JNZ명령어에 의해서 "Incorrext Pasword"메시지를 출력하는 곳으로 점프하게 된다.
3번째, 4번째 문자가 '5y'로 확인되면 다음명령어로 진행되게 된다.
위사진에 노란색 네모칸 부분은 사용자가 입력한 5번째 문자부터 비교를해서 "R3versing"인지 확인하는 부분이다. 이도 마찬가지로 하나라도 틀리게 되면 "Incorrect Password"를 출력하는 401135주소로 이동하게 된다.
마지막으로 사용자가 입력한 문자열의 첫번째 값이 0x45(E)인지 확인하는 과정을 거치게 된다.
지금까지 분석한 내용을 바탕으로 Password를 입력해보자.
쉽게 접근하는 방법
처음 시작할때 디버거로 열고 나서 Alt+E 단축키를 누르게 되면 스택 실행모듈 부분을 보여주게 된다.
Easy_CrackMe.exe가 실행되면서 같이 로드되는 dll파일 등을 나타나게 되는데, 우리는 아직 dll파일을 분석할 필요가 없으므로 Easy_CrackMe.exe파일 부분을 더블클릭해주면 한번에 해당 주소로 이동하게 된다.
명렁어 창 부분에 마우스 우클릭하여 'Search for' > 'All referenced text strings'를 클릭한다.
그러면 위 사진과 같이 ASCII코드로 작성된 문자열들을 보여주게 되는데, 우리가 처음 시도했을 때 보여졌던 "Incorrect Password"라는 문자열이 보인다. 그리고 우리가 원하는 "Congratulation !!"이라는 문자열도 보인다. 성공 했을때 문자열 부분을 더블클릭 하여 해당 주소로 이동하여 보자.
어떻게 하면 성공 메시지가 뜨는지 해당 주소부터 거꾸로 분석해 나가면 더욱더 빠르게 분석해 나갈 수 있을 것이다.
CMP비교 명령어와, JMP명령어를 유심해서 보자 :)