Category: Steganography
Flag: UVT{5t4rsh1p_3ch03s_fr0m_th3_0ut3r_v01d}
Challenge Description
A layered audio transmission masks a space message within a thin, high‑frequency band, buried under a carrier. With the right tuning, the faint signal resolves into a drifting cipher beyond the audible, like a relay echoing from deep space. Ready to hunt the signal and decode what’s hiding between the bands?
Analysis
I started with cheap triage to confirm the file type and properties. The WAV was clean PCM audio (mono, 48 kHz, 16-bit, 20 seconds), which is exactly the kind of input where hidden high-frequency content can be visualized with a spectrogram.
file "frequencies.wav"frequencies.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 48000 Hzexiftool "frequencies.wav"File Type : WAV
Encoding : Microsoft PCM
Num Channels : 1
Sample Rate : 48000
Bits Per Sample : 16
Duration : 20.00 sOnce the format was confirmed, I generated a spectrogram image from the audio and saved it as spectrogram_full.png (plus a high-band version for checking).
saved spectrogram_full.png and spectrogram_high.png
SdB range -222.79184 -30.163403
High dB range -222.79184 -131.31708That was the key moment: the flag text was directly visible in spectrogram_full.png and could be read manually from the rendered image.

Solution
# solve.py
#!/usr/bin/env python3.12
import wave
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import spectrogram
with wave.open("frequencies.wav", "rb") as w:
fs = w.getframerate()
n = w.getnframes()
ch = w.getnchannels()
data = w.readframes(n)
arr = np.frombuffer(data, dtype="<i2").astype(np.float32)
if ch > 1:
arr = arr.reshape(-1, ch)[:, 0]
arr /= 32768.0
f, t, S = spectrogram(
arr,
fs=fs,
window="hann",
nperseg=4096,
noverlap=3584,
mode="magnitude",
)
SdB = 20 * np.log10(S + 1e-12)
plt.figure(figsize=(14, 6))
plt.pcolormesh(t, f, SdB, shading="gouraud", cmap="magma", vmin=-140, vmax=-40)
plt.ylim(0, 24000)
plt.xlabel("Time (s)")
plt.ylabel("Frequency (Hz)")
plt.title("frequencies.wav spectrogram")
plt.colorbar(label="dB")
plt.tight_layout()
plt.savefig("spectrogram_full.png", dpi=200)
print("saved spectrogram_full.png")python3.12 solve.pysaved spectrogram_full.png
UVT{5t4rsh1p_3ch03s_fr0m_th3_0ut3r_v01d}