283 words
1 minutes
UniVsThreats 26 Quals CTF - Stellar Frequencies - Steganography Writeup

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 Hz
exiftool "frequencies.wav"
File Type                       : WAV
Encoding                        : Microsoft PCM
Num Channels                    : 1
Sample Rate                     : 48000
Bits Per Sample                 : 16
Duration                        : 20.00 s

Once 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.31708

That was the key moment: the flag text was directly visible in spectrogram_full.png and could be read manually from the rendered image.

smug

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.py
saved spectrogram_full.png
UVT{5t4rsh1p_3ch03s_fr0m_th3_0ut3r_v01d}
UniVsThreats 26 Quals CTF - Stellar Frequencies - Steganography Writeup
https://blog.rei.my.id/posts/52/univsthreats-26-quals-ctf-stellar-frequencies-steganography-writeup/
Author
Reidho Satria
Published at
2026-02-27
License
CC BY-NC-SA 4.0