짜잔 27번째 문제다 가보자구!
13자리씩 이동하는 암호화 코드라고한다.
복호화는 암호화 반대이기에 13씩 이동했던 자리를 다시 되돌아오면 된다.
코드를 보자
#!/usr/bin/env python3
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
with open('encfile', 'r', encoding='utf-8') as f:
encrypted_text = f.read()
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
enc_pairs = [encrypted_text[i:i+2] for i in range(0, len(encrypted_text), 2)]
dec_list = list(range(len(enc_pairs)))
for i in range(len(enc_pairs)):
hex_b = enc_pairs[i]
index = hex_list.index(hex_b)
dec_list[i] = hex_list[(index - 128)]
dec_ = bytes([int(b, 16) for b in dec_list])
with open('decrypted_flag.png', 'wb') as f:
f.write(dec_)
gpt에게 코드 설명을 해달라했다.
복호화 코드를 새로 짜야할 것 같았다...
하지만 나는 응애인걸..
gpt에게 encfile 복호화 해달라했다
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
# 암호화된 파일 읽기
with open('encfile', 'r', encoding='utf-8') as f:
enc_data = f.read()
# 2글자씩 쪼개서 리스트로 변환
enc_list = [enc_data[i:i+2] for i in range(0, len(enc_data), 2)]
# 복호화 리스트 생성
dec_list = list(range(len(enc_list)))
for i in range(len(enc_list)):
hex_b = enc_list[i]
index = hex_list.index(hex_b)
dec_list[i] = hex_list[(index - 128) % len(hex_list)]
# 복호화된 데이터를 바이너리로 변환
dec_bytes = bytes([int(b, 16) for b in dec_list])
# 복호화된 파일을 저장
with open('decrypted_flag.png', 'wb') as f:
f.write(dec_bytes)
캬
지피티는 신인가?
일단 복호화 과정은 암호화랑 동일하다.
1. 암호화된 파일을 읽어와
2. 2글자씩 쪼개서 리스트로 변환 (요부분은 자세히 모르겠다) 바이너리 때문인 것 같은데..흐음
3. 복호화 리스트 생성 (암호화 리스트 생성 반대)
4. 128가는걸 반대로 128 - (되돌아감)
5. 복호화된 데이터를 바이너리로 변환 (바이너리 모드로 읽었으니까)
6. 복호환 된 파일 저장
그러면 바탕화면에 짜잔 사진 파일이 생성되고 눌러보면
'Dreamhack > Dreamhack Wargame (Challenge)' 카테고리의 다른 글
[29] IT 비전공자 [dreamhack] littlevsbig (misc)문제 풀기 (8) | 2024.10.08 |
---|---|
[28] IT 비전공자 [dreamhack] bof문제 풀기 (2) | 2024.10.07 |
[26] IT 비전공자 [dreamhack] baby-bof문제 풀기 (1) | 2024.10.06 |
[25] IT 비전공자 [dreamhack] simple-operation문제 풀기 (2) | 2024.10.04 |
[24] IT 비전공자 [dreamhack] php7cmp4re문제 풀기 (5) | 2024.10.03 |