처음엔 자를 대고 있길래 글자간 간격을 유추해 나머지 글자를 유추하는 문제인줄 알았다...
그래서 유추한 정답 H4CK_IN_TH3_MIDD33_4TT4CK를 냅다 제출했지만 안됐다
알고보니,
jpg 시그니처가 반복되는 구조였다.
간단한 파이썬 코드로 숨겨진 이미지를 모두 추출했다.
# 이미지 파일 열기 (바이너리 모드)
with open('./monitor.jpg', 'rb') as file:
file_bytes = bytearray(file.read())
# JPEG 시작 시그니처
start_signature = bytes([0xFF, 0xD8, 0xFF, 0xE1])
# 처음 시작 시그니처 위치 찾기
start_idx = 0
i = 0
while True:
# 현재 위치에서 시작 시그니처 찾기
next_idx = file_bytes.find(start_signature, start_idx+4)
print(f'start_idx:{start_idx}\n next_idx:{next_idx}')
if next_idx == -1:
break # 더 이상 시작 시그니처가 없으면 종료
if i > 0:
# 이전 시작 시그니처부터 현재 시작 시그니처 직전까지의 데이터 추출
image_data = file_bytes[start_idx:next_idx]
# 새 파일로 저장
with open(f'./new_monitor_{i-1}.jpg', 'wb') as new_file:
new_file.write(image_data)
print(f"파일 new_monitor_{i-1}.jpg가 성공적으로 저장되었습니다.")
# 다음 시작 인덱스 갱신
start_idx = next_idx
i += 1
# 마지막 이미지 데이터 처리
if start_idx != -1:
image_data = file_bytes[start_idx:]
with open(f'./new_monitor_{i-1}.jpg', 'wb') as new_file:
new_file.write(image_data)
print(f"파일 new_monitor_{i-1}.jpg가 성공적으로 저장되었습니다.")