모두의 dream

Easy Keygen 본문

CTF·wargame/Reversing.kr

Easy Keygen

오리꽥이로 2022. 3. 20. 18:58
Contents 접기

Easy Keygen.exe

Name과 Serial 값을 입력받고, 값이 틀리면 Wrong 문자열이 출력된다.

 

대충 흐름을 보니 내가 입력한 Name 에 따라 Serial 값이 바뀌게 되고, 이 문제는 Serial 값이 5B134977135E7D13 일때 Name 값을 구하는게 목적이다.

 

입력한 값들을 순서대로 저장되어 있는 0x10, 0x20, 0x30과 XOR 연산을 진행한다.

그리고 401150의 argument 로 그 값이 전달된다. (401150 함수에서 serial key가 생성된다.)

 

그래서 401150 함수 내부를 분석해봤는데 도저히 어셈만으로는 분석이 불가능했다.

그래서 롸업을 찾아보다가 알아챘는데 0x10, 0x20, 0x30 과 xor 연산한 값이 아래처럼 아스키 코드값으로 저장이 되고 있었다. (hello 입력, h(0x68) ^ 0x10 = 0x78)

 

이렇게 되면 Serial 값 5B 13 49 77 13 5E 7D 13 각각을 0x10, 0x20, 0x30으로 xor 연산 해주면 되겠다는 결론이 나왔다.

 

#include<stdio.h>

int main()
{
    int arr[8] = {0x5B, 0x13, 0x49, 0x77, 0x13, 0x5E, 0x7D, 0x13};
    int arr2[3] = {0x10, 0x20, 0x30};
    int cnt = 0;

    for(int i=0; i<8; i++)
    {
        if(cnt == 3)
            cnt = 0;
        arr[i] ^= arr2[cnt];
        cnt++;
    }

    for(int i=0; i<8; i++)
        printf("%c", arr[i]);

    return 0;
}

 

IDA 로 확인해보니 sprintf 함수였다.

내가 입력한 값을 0x10, 0x20, 0x30 순서대로 xor을 해서 문자열 형태로 Buffer 라는 변수에 집어넣는 코드임을 확인했다.

 

'CTF·wargame > Reversing.kr' 카테고리의 다른 글

CSHOP  (0) 2022.03.21
Music Player  (0) 2022.03.21
Easy Unpack  (0) 2022.03.20
Easy Crack  (0) 2022.03.20
Comments