WARGAME/cryptography

[dreamhack] SingleByteXor

lucykorea414 2023. 11. 8. 22:53
728x90

 

 

문제를 다운 받아보면 저 문자열 "54586b6458754f7b215c7c75424f21634f744275517d6d" 이 들어있는 파일만 존재합니다.

어쨌든 이 문자열은 암호화된 문자열인데, 문제 제목에서 볼 수 있듯이 Single byte XOR을 썼다는 것을 유추할 수 있습니다.

 

Single byte XOR은 하나의 바이트(아스키코드로 생각하면 0~255)로 전체 문자열을 XOR 한 것으로 이해했습니다.

 

XOR의 성질 중 하나는 a ^ b = c 일때 c ^ b = a 라는 특성이 있기 때문에 문자열을 알 필요 없이 single byte만 bruteforce로 알아내서 xor을 하면 문자열을 찾아낼 수 있습니다!

따라서 이를 찾는 파이썬 코드는 다음과 같습니다.

def xor_byte(data, byte):
    return data ^ byte

def main():
    hex_string = "54586b6458754f7b215c7c75424f21634f744275517d6d"
    hex_list = [int(hex_string[i:i+2], 16) for i in range(0, len(hex_string), 2)]  # 16진수 문자열을 정수로 변환

    for xor_value in range(256):  # 0부터 255까지의 XOR 연산을 수행
        result_data = [xor_byte(h, xor_value) for h in hex_list]
        
        result_string = ''.join([format(x, '02X') for x in result_data])  # 16진수로 표시

        # 전체 result data를 아스키 코드로 변환하여 출력
        ascii_result = ''.join([chr(x) for x in result_data])

        print(f"XOR 0x{xor_value:02X} Result: {result_string}, ASCII: {ascii_result}")

if __name__ == "__main__":
    main()

 

이를 해보면 결과가 엄청 많이 나오는데, 이 중에서 아스키 결과가 DH{}의 형식으로 되어 있는게 올바른 플래그이겠죠?!

 

 

굳 ^_^

728x90

'WARGAME > cryptography' 카테고리의 다른 글

[CryptoHack] XOR Starter  (1) 2024.01.02
[CryptoHack] Bytes and Big Integers  (1) 2024.01.02
[dreamhack] ICM2022  (0) 2023.11.08
[dreamhack] Basic_Crypto1  (0) 2023.11.08
[h4cking game] Hello, Postman  (0) 2023.06.17