2009년 11월 11일 수요일

Crack me #1

제목 : Crack me #1

목적 : 시리얼을 프로그램 내부에서 추출 하여 시리얼 생성기를 만든다.

파일명 : due-cm1.exe (첨부파일)

내부 로직 :

미리 정의 되어있던 시리얼 값

"0x7B,0x61,0x65,0x78,0x64

,0x6D,0x26,0x6B,0x7A,0x69

 ,0x6B,0x63,0x65,0x6D,0x26

 ,0x3C,0x26,0x66,0x6D,0x7F

 ,0x6A,0x61,0x6D,0x7B,0x26

 ,0x6A,0x71,0x26,0x6C,0x7D

 ,0x6D,0x64,0x61,0x7B,0x7C"

과 사용자가 입력한 값을 비교해서 정확히 일치 할 경우 Success 하는 프로그램

입력 값 변환 Logic :

사용자 입력값을 3번에 걸쳐서 변환 시킨다.

a(사용자 입력 값) xor 0x43

a xor 0x1E

a xor 0x55

 

시리얼 생성기 프로그램 소스 :

#include <vector>

#include <cstdio>

#include <string>

#include <sstream>

using namespace std;

 

int main()

{

    char a[35] = {0x7B,0x61,0x65,0x78,0x64

                 ,0x6D,0x26,0x6B,0x7A,0x69

                 ,0x6B,0x63,0x65,0x6D,0x26

                 ,0x3C,0x26,0x66,0x6D,0x7F

                 ,0x6A,0x61,0x6D,0x7B,0x26

                 ,0x6A,0x71,0x26,0x6C,0x7D

                 ,0x6D,0x64,0x61,0x7B,0x7C

                 };

    int b = 35;

    for(int i = 0 ; i < b; i++){

            a[i] = a[i]^0x43;

            a[i] = a[i]^0x1E;        

            a[i] = a[i]^0x55;

    }

    printf("%s",a);

    scanf("%d",&b);

}

사용 Tool : OllyDbg

난이도 : ★★☆☆☆

-------------------------------------------------------------------------------

Debug 화면 Capture (ㅠ,.ㅠ 에잇~ 이미지 잘못 올렸네요~ 다음꺼 올릴때는 잘올리겠습니다. ^^)

1. 임의 값을 입력해서 프로그램 내부 Logic 점검

2. 내부 Logic파악과 비교 대상이 되는 String 파악

3. 파악된 Logic과 String을 대상으로 Key generator 개발

4. Success

댓글 없음:

댓글 쓰기