Information Security Study

[crypto][SquareCTF 2023] Crypto Slide Quest 본문

CTF

[crypto][SquareCTF 2023] Crypto Slide Quest

gayeon_ 2023. 11. 28. 23:28

문제 코드를 작성하다가 키를 까먹었다고 한다.

암호문이 base64: LEs2fVVxNDMfNHEtcx80cB8nczQfJhVkDHI/Ew==로 제공되었다.

 

 

 

 

#include "flag.h"

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    _Static_assert(sizeof(key) == 7, "Invalid key size!");

    char* output = malloc(sizeof(flag));
    strncpy(output, flag, sizeof(flag));

    int flag_len = strlen(flag);
    int key_len = strlen(key);

    for(int i = 0; i < flag_len - key_len + 1; i++) {
        for(int j = 0; j < key_len; j++) {
            output[i + j] ^= key[j];
        }
    }


    printf("%s", output);
    free(output);
    return 0;
}

crypto slide quest.c 코드이다.



_Static_assert(sizeof(key) == 7, "Invalid key size!");

: key 배열의 크기가 7인지 확인하는 정적(assert) 어설션 추가. 만약 key의 크기가 7이 아니면 컴파일 오류

char* output = malloc(sizeof(flag));

: flag와 같은 크기의 동적 할당 메모리 할당. 여기서 output은 암호화 된 결과를 저장할 변수

strncpy(output, flag, sizeof(flag));

: flag의 내용을 output에 복사

int flag_len = strlen(flag);, int key_len = strlen(key);

: flag와 key의 길이를 구함

for(int i = 0; i < flag_len - key_len + 1; i++) { for(int j = 0; j < key_len; j++) { output[i + j] ^= key[j]; } }

: output에 저장된 데이터를 key를 사용하여 간단한 XOR 연산을 수행하여 암호화 또는 복호화.


flag 문자열을 key를 사용하여 간단한 XOR 연산을 수행하여 암복호화하고 결과를 출력하는 프로그램이다.

 

 

base64디코딩 사이트로 암호문을 디코딩하니 알 수 없는 문자열이 나왔다.