Crypto/드림핵(dreamhack)

드림핵 SingleByteXor(Level1) Write up

Roronoa 2022. 9. 14. 02:24
반응형

SingleByteXor 문제

 

SingleByteXor

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

dreamhack.io

위의 링크에 들어가게 되면 문제를 풀 수있다.

 

문제 설명

[그림 1] 문제 설명

살인 사건의 증거물로 암호문이 주어졌다. 이 암호문은 어떤 단일 바이트와 XOR해서 만들어진 암호문이다. 원래의 평문을 찾아야 하는 문제이다.

 

암호문

54586b6458754f7b215c7c75424f21634f744275517d6d

 

문제 풀이

단일 바이트로 XOR되었기 때문에 원래의 평문을 찾기위해 브루트포스로 XOR해야겠다고 생각을 하였다.

1byte = 8bit = 256 이므로 암호문을 1부터 256까지 XOR을 하면 정답이 나올것이다.

코드

fd = open('./DyingMessage','r')

secret = fd.read()
enc = bytes.fromhex(secret)
str = ""
for i in range(1,256):
    for j in enc:
        str += chr(i^j)
    if(str[0:3]=="DH{"):
        print(str)
        print('xor한 값 =',i) 
    str = ""

먼저 암호문의 파일을 열은 뒤 bytes.fromhex 함수로 암호문을 바이트 객체로 변환하였다.

그리고 1부터 256까지 반복하여 “DH{”값이 나오는 문자열들을 출력하였다.

 

실행 결과

[그림 2] flag 답

답은 DH{비공개} 임을 알 수 있고 xor한 값도 16이라는 것을 알 수 있다.

 

DH{비공개}

답은 비공개입니다.

반응형