또 뭐하지
[Dreamhack] ROT128 본문
728x90
풀이
제공된 파일에는 암호화된 encfile과 암호화 코드인 rot128.py 파일이 포함되어있다.
rot128 코드를 살펴보면 시저암호와 유사한 원리로 각 바이트를 16진수 값으로 표현하고, 해당 값을 128만큼 밀어서 새로운 값을 만들어내는 것을 알 수 있다.
hex_list : 0부터 255까지의 각 숫자에 대한 16진수 표현을 담은 리스트
plain_list : plain_s에서 읽은 파일 내용을 각 바이트별로 16진수로 변환하여 저장
암호화 방식 : plain_list의16진수 값의 인덱스를 hex_list에서 찾아내고, 이를 +128만큼 이동
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
file_path = "D:/dreamhack/ROT128/encfile"
with open(file_path, 'r', encoding='utf-8') as f:
cipher_s = f.read()
cipher_list = [cipher_s[i:i+2] for i in range(0,len(cipher_s),2)]
dec_list = list(range(len(cipher_list)))
for i in range(len(cipher_list)):
hex_b = cipher_list[i]
index = hex_list.index(hex_b)
dec_list[i] = hex_list[(index-128)%len(hex_list)]
plain_list=''.join(dec_list)
byte_data = bytes.fromhex(plain_list)
file_path2 = "D:/dreamhack/ROT128/flag.png"
with open(file_path2, 'wb') as f:
f.write(byte_data)
문제 코드를 바탕으로 복호화하는 파이썬 코드를 작성하였다. 기존에 +128을 해서 암호화한 부분으로 -128로 복호화할 수 있도록 했다. 그리고 복호화된 hex 값을 다시 byte로 변환하여 암호화를 진행했던 flag.png 파일을 얻을 수 있었다.
'Write-up > Crypto' 카테고리의 다른 글
[Dreamhack] likeb64 (0) | 2024.04.03 |
---|---|
[Dreamhack] babycrypto3 (0) | 2024.03.29 |
[Dreamhack] darimchal-001 (0) | 2024.03.29 |
[Dreamhack] SingleByteXor (0) | 2024.03.29 |
[Dreamhack] Basic-Crypto1 (0) | 2024.03.29 |