Information Security Study
[crypto][SquareCTF 2023] Crypto Slide Quest 본문
문제 코드를 작성하다가 키를 까먹었다고 한다.
암호문이 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디코딩 사이트로 암호문을 디코딩하니 알 수 없는 문자열이 나왔다.
'CTF' 카테고리의 다른 글
[crypto][GlacierCTF 2023] Missing Bits (0) | 2023.11.29 |
---|---|
[crypto][UWSP Pointer Overflow CTF 2023]Unquestioned and Unrestrained (0) | 2023.11.29 |
[crypto][HITCON CTF 2023] Share (0) | 2023.09.23 |
[pwn][ASIS CTF 2023] hipwn (0) | 2023.09.23 |
[crypto][Pointer Overflow CTF 2023] Unquestioned and Unrestrained (0) | 2023.09.23 |