1. 문제
쪽지는 16진수로 표현된 문자열이다.
단일 바이트(0x00 ~ 0xFF)와 XOR 연산이 되어서 만들어진 암호라고 한다.
2. exploit
음... 16진수인것 같으니 0x00 ~ 0 xFF까지 모두 XOR(같으면 0 , 다르면 1) 연산을 해보자
XOR 연산을 다시 하는 이유는 2진수로 예시를 들어보자
0100 1010 의 각자리를 1로 XOR 연산을 진행하면 1011 0101이다.
여기서 1은 KEY 값으로 암호화를 할 때 사용하는 값이다.
하지만 다시 0100 1011의 각자리를 1로 XOR 연산을 진행하면 0100 1010이라는 원래의 평문값이 나오게 된다.
즉, 대칭키 암호화 방식으로 암호화/복호화에 사용되는 KEY값이 같은 것이다.
따라서 해당 문제에서도 XOR 된 값으로 다시 XOR 연산을 하면 복호화할 수 있을 것이다.
해당 코드는 DyingMessage 파일을 열어서 암호호된 메시지를 읽어온다.
이후 2개씩 끊어서 hex_list에 저장한다.
단일 바이트 0x00 ~ 0 xFF까지의 모든 경우의 수는 256가지이다.
따라서 hex_list 값을 한 개씩 꺼내서 XOR 연산을 한다.
이후 문자열을 출력하는 방식을 계속 반복한다.
모든 경우의 수를 출력하면 ff까지의 XOR 연산 결과가 출력된다.
CTRL + F를 눌러서 검색기능을 사용한다.
이후 DH{ 를 검색해 보면 DH 값이 나온다.
참고 문헌
'Wargame > wargame 암호학' 카테고리의 다른 글
[Dreamhack] likeb64 (0) | 2024.05.11 |
---|---|
[Dreamhack] DARIMCHAL_001 (0) | 2024.04.30 |
[Dreamhack] robot_only (0) | 2024.04.30 |
[Dreamhack] basic crypto (0) | 2024.04.29 |
[Dreamhack] ROT128 (0) | 2024.04.29 |