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 파일을 얻을 수 있었다.

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

+ Recent posts