[🥉 Bronze 1] 위성이 보낸 오디오 속 flag를 힐베르트 변환으로 복조한다 — DreamHack 산타 할아버지도 힘들어요 풀이 — ZINO
2026-07-20·1분 읽기·
[🥉 Bronze 1] 위성이 보낸 오디오 속 flag를 힐베르트 변환으로 복조한다 — DreamHack 산타 할아버지도 힘들어요 풀이
제공되는 건 이상한 8비트 WAV 파일 두 개뿐이다. 스펙트로그램을 찍어봐도 단조로운 톤 하나만 보일 뿐 아무 정보도 없어 보인다. 문제 설명 속 "NOAA 15"라는 이름이 결정적인 힌트였다 — 기상위성이 실시간으로 지구 사진을 내려보내는 아날로그 방송 규격 APT(Automatic Picture Transmission)의 오디오였다. 2400Hz 서브캐리어를 힐베르트 변환으로 AM 복조하고 4160word/line 픽셀 클럭에 맞춰 리샘플링하면, 한반도와 일본 해안선이 그대로 찍힌 위성사진 위에 flag가 그려져 있다.
문제 파일은 One.wav, Two.wav 딱 두 개다. 재생해보면 초반 몇 초는 지지직거리는 노이즈, 그 뒤로는 몇 분 동안 이어지는 단조로운 톤 — 음악도 아니고 사람 말소리도 아니다. file로 봐도 그냥 8비트 PCM WAV라는 것 말고는 특별할 게 없다. 이 문제를 풀게 만드는 열쇠는 파일 안에 있지 않고, 문제 설명의 대화문 안에 숨어 있었다.
산타 할아버지도 힘들어요 문제 페이지 — "우리 루돌프 중에 우주에 있는 NOAA 15 라는 친구가 있어요"
문제 개요
항목
내용
문제명
산타 할아버지도 힘들어요
난이도
🥉 Bronze 1
분류
Misc
제공
8비트 mono WAV 2개(One.wav 6분, Two.wav 9분)
핵심 기법
NOAA APT(기상위성 아날로그 사진 전송) 오디오를 힐베르트 변환으로 AM 복조해 이미지로 복원
🧩 배경 — NOAA 15와 APT
문제의 동화 같은 대화 속에 답이 있다. "우주에 있는 NOAA 15"라는 대사는 실제로 존재하는 미국 기상청(NOAA) 소속 극궤도 기상위성 이름이다. 이 위성들은 지금도 지구를 90분에 한 바퀴씩 돌면서, APT(Automatic Picture Transmission) 라는 오래된 아날로그 규격으로 자신이 촬영한 지구 사진을 지상으로 실시간 방송한다. 냉전 시대부터 쓰인 규격이라 복잡한 디지털 복호화 없이, 저렴한 SDR 동글과 안테나만 있으면 아마추어도 직접 수신해서 위성사진을 뽑아낼 수 있다 — 실제로 아마추어 무선/SDR 커뮤니티에서 자주 하는 취미다.
One.wav 스펙트로그램 — 2496Hz 근처에 강한 일정 톤만 보이고 그림이나 텍스트 형태는 안 보인다
일반적인 "스펙트로그램에 이미지 숨기기" 스테가노 문제라면 시간-주파수 평면에 그림이나 글자 모양이 떠야 하는데, 여기선 ~2400Hz 부근에 거의 일정한 굵은 선 하나만 6분 내내 이어진다. 처음엔 이걸 단서로 착각해 시간 구간을 잘라 확대해보거나 진폭 포락선의 on/off 패턴이 모스부호가 아닐까 의심하며 시간을 썼지만, 패턴이 일정하지 않고 눈에 띄는 규칙도 없었다 — 주파수(가로축) 방향으로 그림을 찾는 접근 자체가 틀렸다는 뜻이었다. 문제 설명을 다시 읽고 나서야 이게 "주파수에 그려진 이미지"가 아니라 "진폭에 실린 이미지"라는 걸 깨달았다.
💣 핵심 — 힐베르트 변환으로 포락선을 뽑아 픽셀로 되돌리기
AM 신호에서 원래 실려 있던 신호(포락선)를 복원하는 표준적인 방법은 힐베르트 변환(Hilbert transform) 으로 해석적 신호(analytic signal)를 구한 뒤 절댓값을 취하는 것이다. scipy.signal.hilbert가 정확히 이 기능을 제공한다.
복조한 포락선은 여전히 원본 오디오의 샘플레이트(12480Hz 또는 11025Hz)로 촘촘하게 찍혀 있다. 이걸 이미지 한 픽셀 = 샘플 하나가 되도록, APT의 픽셀 클럭인 4160Hz로 리샘플링한다. 그 결과를 2080개씩 끊어 한 줄(row)로 삼으면 grayscale 이미지가 완성된다.
apt_decode.py 실행 — 힐베르트 복조+리샘플 후 724줄×2080폭 이미지 생성
🚀 결과 — 그리고 flag
생성된 이미지를 열어보면, 노이즈 섞인 흑백 사진 속에 한반도와 일본 열도의 해안선이 뚜렷하게 드러난다 — 진짜 기상위성이 촬영한 것과 같은 구도다. 그리고 그 위에, 하단부에 flag 텍스트가 두 겹(흰 글자·검은 글자)으로 합성되어 있다.
디코딩된 APT 이미지 — 한반도·일본 해안선 위성사진과 그 위에 겹쳐진 flag 텍스트
DH{Its_a_beautiful_day} — 스펙트로그램만 봐서는 절대 알아낼 수 없었던 문자열이, AM 복조라는 올바른 도구를 쓰는 순간 바로 눈에 보이는 그림으로 나타났다.
📝 결론
"오디오 문제 = 스펙트로그램"이라는 반사적 접근을 의심할 것. 스펙트로그램은 주파수축에 그려진 정보(모스부호 톤, SSTV, DTMF 등)를 찾을 때는 강력하지만, 이 신호는 애초에 정보가 진폭에 실려 있었다. 스펙트로그램에 아무것도 안 보인다고 "숨겨진 게 없다"로 단정하면 안 되고, 신호가 어떤 변조 방식을 쓰는지부터 확인해야 한다.
문제 설명의 서사는 장식이 아니라 힌트다. "NOAA 15"라는 고유명사 하나가 이 문제 전체의 접근 방식(AM 복조, 4160Hz 픽셀클럭, 2080폭 리셰이프)을 결정했다. 파일만 붙잡고 분석 도구를 이것저것 돌리기 전에, 문제가 무엇을 말하고 있는지부터 정확히 읽는 게 시간을 가장 많이 아껴주는 습관이다.
APT 자체는 암호화가 아니라 압축 없는 아날로그 방송이라는 점도 흥미롭다. 실제 기상위성 데이터가 지금도 아무런 인증·암호화 없이 평문으로 전 세계에 방송되고 있다는 사실은, "오래된 인프라일수록 지금 기준의 보안 가정이 전혀 적용되지 않는다"는 걸 잘 보여주는 사례이기도 하다.
Comments
댓글
댓글을 남기려면 로그인이 필요해요. (네이버 · 구글 계정)
댓글 불러오는 중…