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

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


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

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

밑에 사진은 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로 구현하기 힘드시다면 해당 시리얼 생성루틴을 복사하여 그대로 컴파일 하셔도 됩니다 ^^;;

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

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



 


 

'[+] Information > [-] RCE' 카테고리의 다른 글

ShowString - 프로그램 스트링 보여주는 프로그램  (14) 2009.08.27
재밌는 리버싱 문제~  (120) 2009.07.03
cffo-4 크랙미 풀이.  (10) 2009.04.14
simples 시즌2 리버싱 문제 level1 풀이.  (4) 2009.04.14
abex3 Crackme 풀이.  (0) 2009.04.14
  1. Favicon of https://ezclub.tistory.com BlogIcon 고고 2009.04.14 22:02 신고

    제가 요즘 리버싱이 뭔지 공부해보려고 합니다..
    ㅎㅎㅎ
    여기 자주오다보니 관심이 가더라구요.. ^^
    행복한 밤 되세요 반짝~

  2. 고회장 2009.04.14 22:41

    ㅎㅎ 한개씩 풀어가면서 따라해야겠네요..ㅡㅡ안그래도 요즘 날씨도 더워서 맨날 잠만 퍼질러 자니..
    ^^;; 20분가량 해매니. 성공 문구는 나오네요..

  3. Favicon of https://tistory.hackerc.com BlogIcon 해커 C 2009.08.05 00:40 신고

    내겐 너무 어려운 당신.....ㅠ

    한참 공부 해야 겠어요 ~~~~ .. 어느세월에 .. ㅜㅜ

  4. 에휴, 2010.01.05 22:02

    이렇게 하는게 맞는지 모르겠지만

    에러? 뜨는 부분을 모드 JMP 문 으로 햇더니

    아무 시리얼이나 입력해도 콩그레이츄 ? 뜨늗네

    이렇게 해도 되는건가요.

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2010.03.27 16:55 신고

      문제의도와는 조금 다르게 푸셨지만 그것도 하나의 푸는 방법입니다 ㅎㅎ

  5. 리버스엔지니어를꿈꾸는자 2011.04.12 20:56

    움....굳이 시리얼을 찾지 않고 아무것도 쓰지않고도 성공문구가 나오게하는게 더편할것같군요
    jmp와 nop만쓸줄안다면말이죠 ㅇㅅㅇ 좋은키젠 보고갑니다 ^^
    자주들를테니 키젠좋은거있으면 올려주세염 ㅎㅎ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2011.04.13 20:15 신고

      제가 의도한 풀이방법은 아니지만~... ㅎㅎ

      의도한 풀이 방법대로 풀어보시는게 더 공부가 되지 않을까요? ㅎ

+ Recent posts