문제
This file doesn't look like much... just a bunch of 1s and 0s. But maybe it's not just random noise. Can you recover anything meaningful from this?
Download the file here.
링크
https://learn.cylabacademy.org/library/698?page=1&category=4 (문제 파일)
풀이 과정
1. digits.bin을 메모장으로 열어보니 이 파일은 사실 0과 1로만 이루어진 텍스트 파일인걸 확인했다. (71,200글자)
2. 핵심 관찰: 71200 ÷ 8 = 8900 정확히 나눠진다는 건 각 8비트 묶음이 바이트 하나를 의미한다는 뜻인 것 같다
3. 변환: 8비트씩 끊어서 정수로 바꾸니 첫 두 바이트가 255, 216 (0xFF 0xD8) — JPEG 파일의 매직 넘버였다.
4. 복구: 전체 비트스트림을 바이트로 변환해 .jpg로 저장하니 800×500 크기의 정상적인 JPEG 이미지가 나왔고, 그 안에 플래그 텍스트가 있었다.
아래는 복구 코드
# 1. 비트 문자열 읽기
data = open('etc/digits.bin').read().strip()
# 2. 8개씩 끊어서 바이트로 변환
byte_arr = bytearray()
for i in range(0, len(data), 8):
byte_str = data[i:i+8] # 8글자씩 슬라이싱
byte_arr.append(int(byte_str, 2)) # 2진수 문자열 -> 정수
# 3. 파일로 저장
with open('recovered.jpg', 'wb') as f:
f.write(byte_arr)
결과

답
picoCTF{h1dd3n_1n_th3_b1n4ry_8e65b559}