BoyevoyKlichGPT (Боевой Клич GPT)
BoyevoyKlichGPT (Боевой Клич GPT)
Platform: caplag | Category: Steganography | Type: Challenge | Difficulty: Easy | OS: Linux | Author: XESXOR | Date: 2026-02-22 | Status: Solved Techniques: audio_spectrogram_stego
Summary
BoyevoyKlichGPT — caplag
Description
"In the midst of the epic saga 'Heroes of the Codex', the generative warrior GPT, surrounded by the shadows of the pixel valleys of CodeRealm, let out a terrifying battle cry. They say this sound contains an echo of ancient power — the shadow of a necromancer, summoned from forgotten battles. Listen to the recording and reveal the hidden spell to claim the flag!"
File: batle_cry.wav — 3.8 MB, 16-bit PCM, mono, 44100 Hz, ~43 seconds
Hint Decoding
The flavour text is loaded with steganographic breadcrumbs:
| Phrase in description | Meaning |
|---|---|
| "shadow of a necromancer" | n3crOm4nc3r — "Necromancer" in leet-speak |
| "hidden spell" | Text hidden in the spectrogram (high-frequency band) |
| "battle cry" | WAV audio file — the carrier of the hidden data |
| "listen to the recording" | Misdirection — you need to look at it, not just listen |
Analysis
Step 1 — Initial recon
Standard first-pass checks on the WAV file:
bash read-only • copy allowedfile batle_cry.wav # batle_cry.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 44100 Hz exiftool batle_cry.wav # → no suspicious metadata strings batle_cry.wav # → no flag in raw strings binwalk batle_cry.wav # → no embedded files detected
Nothing suspicious in metadata or raw bytes. The flag is not stored as plaintext.
Step 2 — LSB steganography check
Checked for LSB (Least Significant Bit) steganography in the audio samples — no hidden data found.
Step 3 — Spectrogram analysis ✅
Generated a spectrogram of the audio using SoX:
bash read-only • copy allowedsox batle_cry.wav -n spectrogram -o spectrogram.png
Or equivalently with Python:
python read-only • copy allowed#!/usr/bin/env python3 import numpy as np import matplotlib.pyplot as plt from scipy.io import wavfile from scipy.signal import spectrogram sample_rate, data = wavfile.read("batle_cry.wav") f, t, Sxx = spectrogram(data, fs=sample_rate, nperseg=4096, noverlap=3072) plt.figure(figsize=(16, 6)) plt.pcolormesh(t, f / 1000, 10 * np.log10(Sxx + 1e-10), shading='gouraud', cmap='inferno') plt.ylabel("Frequency (kHz)") plt.xlabel("Time (s)") plt.colorbar(label="Power (dB)") plt.title("Spectrogram — batle_cry.wav") plt.ylim(0, 22) plt.tight_layout() plt.savefig("spectrogram.png", dpi=150) plt.show()
Result
The spectrogram immediately revealed the flag burned into the ~13–14 kHz frequency band, spanning the full duration of the recording. The text caplag{REDACTED} is clearly legible in the high-frequency region — completely inaudible to the human ear, but perfectly visible as a visual pattern in the frequency domain.
Key Technique
Audio Spectrogram Steganography — text or images are encoded as tonal patterns at specific frequencies and rendered into an audio file. When the audio is visualised as a spectrogram (time vs. frequency vs. amplitude), the hidden content becomes visible.
When to suspect this technique:
- Challenge involves a WAV/MP3/OGG file with a "listen carefully" theme
- Description hints at something visual hidden in sound ("shadow", "image", "spell")
binwalkandstringsfind nothing; LSB checks are clean- The audio sounds like noise, music, or a "battle cry" with no obvious message
Tools to use:
sox batle_cry.wav -n spectrogram -o out.png— fastest CLI approach- Sonic Visualiser (GUI) — excellent for interactive exploration
- Audacity → Analyse → Plot Spectrum
- Python
scipy.signal.spectrogram+matplotlib