본문 바로가기

[+] Information/[-] RCE

cffo-4 크랙미 풀이.

간단하니 이해하기도 쉬우실거에요 ~ ^^

일단 크랙미를 실행하여 크랙미의 동작등을 봐야 하니 크랙미를 실행 합니다.


뭐가 안맞다고 뜨는군요 ㅋㅋ

이제는 프로그램이 무엇으로 짜여져있는지 봐야할 차례입니다.

밑에 사진은 PeScan 한 결과 입니다.



UPX로 패킹이 되어있네요.

수동 언패킹이나 자동 언패킹 툴로 언패킹 합니다.

그러면 밑에 결과처럼 나옵니다.



이제는 언패킹도 되었으니 디버거로 열어 분석을 해봅시다.

디버거로 열고 OEP로 이동한 후, 스트링을 검색해 봅니다
.

문자열들중에 축하 메시지가 있네요.

더블클릭하여 해당 부분으로 이동해 봅니다.

해당부분으로 이동후 메시지나 바로 위에 점프문에 BP를 잡으면 분석이 조금 어려워질수도 있습니다.

그러니 조금 여유를 두고 BP를 잡길 바랍니다.

저는 아래와 같이 잡았습니다.



위와 같이 잡아준후 실행을 하여 BP가 걸리도록 이름과 시리얼을 입력하여 줍니다.

BP가 걸리면 천천히 트레이싱을 하여 줍니다.

주요 부분을 복사해서 주석을 달아보도록 하겠습니다.


00457E06  |> \A3 40B84500 MOV DWORD PTR DS:[45B840],EAX
00457E0B  |.  8D55 E4     LEA EDX,[LOCAL.7]
00457E0E  |.  A1 40B84500 MOV EAX,DWORD PTR DS:[45B840]
00457E13  |.  E8 2CF9FAFF CALL CrackMe#.00407744                                 // 어떠한 계산식의 의해 이름에 맞는 패스워드 생성.
00457E18  |.  8B45 E4     MOV EAX,[LOCAL.7]                                          // 계산된 값을 [LOCAL.7] 에서  EAX로 복사.
00457E1B  |.  50          PUSH EAX                                                            // 스택에 EAX 값을 넣음.
00457E1C  |.  8D55 FC     LEA EDX,[LOCAL.1]
00457E1F  |.  8B83 DC0200>MOV EAX,DWORD PTR DS:[EBX+2DC]
00457E25  |.  E8 B6C0FCFF CALL CrackMe#.00423EE0
00457E2A  |.  8B55 FC     MOV EDX,[LOCAL.1]
00457E2D  |.  58          POP EAX                                   ;  0012FBCC
00457E2E  |.  E8 51BDFAFF CALL CrackMe#.00403B84                                // 사용자가 입력한 값과 프로그램 내에서 생성한 값과 비교
00457E33  |.  75 1A       JNZ SHORT CrackMe#.00457E4F                            // 00457E33에서 비교한 값에 따라 점프.

00457E33 Call 안에 있는 중요 코드를 복사하여 주석을 달아보도록 하겠습니다.

00403B89  |.  89D7        MOV EDI,EDX                                                      // 사용자가 입력한 EDX에 복사
00403B8B  |.  39D0        CMP EAX,EDX                                                    // 사용자가 입력한 값이 들어있는 EDX와 프로그램내에서 생성된 값이 들어있는 EAX를 비교.

저 중요코드를 거친후 Call문을 빠져나와 점프를 하거나 안하게 됩니다.

결국 우리가 원하는 이름을 입력했을때 나오는 계산되어 나오는 패스워드를 알아내어 인증을 해야겠네요.
'
전 MaJ3stY를 입력했을 때 1074란 숫자를 생성합니다.

아래의 사진은 인증샷이랄까요..

 

여기서 이 크랙미는 원래 끝이 난 것이 아닙니다.

키젠을 만들어야 하기 때문이죠 ^^

키젠은 스스로 만들어보시는게 좋을 듯 합니다.

어셈을 C로 구현하기 힘드시다면 해당 시리얼 생성루틴을 복사하여 그대로 컴파일 하셔도 됩니다 ^^;;

파일은 패킹된 원본 파일입니다.

언패킹부터 차근차근해보세요 ㅎ