공부/암호학 (Crypto)

[드림핵 | 암호학] SingleByteXor

eunjuu 2023. 11. 9. 19:30
728x90

👾 문제 설명

어느날, 살인사건이 일어났다.
살인 사건의 유일한 증거물은 쓰여있는 쪽지에는, 다음과 같이 적혀있었다.
54586b6458754f7b215c7c75424f21634f744275517d6d
크립이에게 주어진 단서는, 쪽지의 내용과 이것이 어떤 단일바이트와 XOR해서 만들어진 암호라는 단서 뿐.
과연 크립이는 범인을 찾을 수 있을 것인가…!

flag 타입은 DH{message}입니다

📎 https://dreamhack.io/wargame/challenges/559

 

SingleByteXor

어느날, 살인사건이 일어났다. 살인 사건의 유일한 증거물은 쓰여있는 쪽지에는, 다음과 같이 적혀있었다. 54586b6458754f7b215c7c75424f21634f744275517d6d 크립이에게 주어진 단서는, 쪽지의 내용과 이것이

dreamhack.io


 

문제 파일을 다운로드 받는다.

 

 

이런 다잉 메시지가 담겨있다. 주어진 다잉 메시지를 XOR로 디코딩하여 Flag 값을 얻어야 하는 문제다.

 

54586b6458754f7b215c7c75424f21634f744275517d6d

 

 

위 문자는 16진수로 이루어진 코드임을 확인할 수 있다. 

 

주어진 16진수 코드를 디코딩하기 위해서는 XOR 연산의 특성을 활용할 수 있습니다. 간단히 말하면, 암호화된 메시지와 동일한 단일 바이트 키로 XOR 연산을 하면 원본 메시지가 나옵니다. 따라서 이 경우 어떤 단일 바이트 (10진수로 0부터 255까지의 값)가 암호화 키로 사용되었는지 알아내어야 합니다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main() {
    char hex[25] = {0x54, 0x58, 0x6b, 0x64, 0x58, 0x75, 0x4f, 0x7b, 0x21, 0x5c, 0x7c, 0x75, 0x42, 0x4f, 0x21, 0x63, 0x4f, 0x74, 0x42, 0x75, 0x51, 0x7d, 0x6d };

    for (int i = 1; i < 255; i++) {
        for (int j = 0; j < 23; j++)
            printf("%c", hex[j] ^ i);
    }
}

 

C언어 반복문을 이용하여 코드 구성을 하여 플래그를 얻을 수 있습니다.

 

 

플래그 값 발견!

728x90

'공부 > 암호학 (Crypto)' 카테고리의 다른 글

[드림핵 | 암호학] Basic_Crypto1  (0) 2023.11.09