Description
A short WAV file encodes the flag in Morse. Decode the audio, replace spaces with underscores, and wrap it in picoCTF{...}.
Upload the WAV to an online Morse decoder (e.g., morsecode.world → Audio Decoder), or paste the decoded dot-dash output into our Morse Decoder tool.
The plaintext reads `WH47 H47H 90D W20U9H7`. Convert spaces to underscores and lowercase per the prompt.
echo "WH47 H47H 90D W20U9H7" | tr ' ' '_' | tr '[:upper:]' '[:lower:]' | sed 's/^/picoCTF{...}/'Solution
- Step 1Run the audio through a decoderThe file is only ~30 seconds long; most online Morse decoders output the letters immediately.
Learn more
Morse code represents letters and digits as sequences of short signals (dots) and long signals (dashes), separated by pauses. It was developed in the 1830s for telegraph communication and is still used in amateur radio. Each character has a unique dot-dash pattern: A is
.-, B is-..., and so on.In audio Morse, the dots and dashes are tones of different durations. Automated decoders work by analyzing the waveform: they measure the duration of each tone and silence, classify them as dots, dashes, or separators based on timing ratios, and map the resulting patterns to characters. Online tools like morsecode.world or morse.withgoogle.com can decode audio files without any local software. Once you have the dot-dash text, you can also use our Morse Code Decoder to convert it to plain text instantly.
For those who prefer command-line tools, fldigi is a popular open-source amateur radio application that includes a Morse decoder. More programmatically, Python libraries like
pyaudiocombined with signal processing can detect tone frequencies and timings from WAV files. - Step 2Apply the required formattingThe challenge asks for lowercase with underscores. Use tr/sed to format the decoded phrase into picoCTF{...}.
Learn more
The pipeline demonstrates several useful shell text-transformation tools in sequence.
tr ' ' '_'translates (replaces) every space with an underscore - thetr(translate) utility maps individual characters one-to-one, making it ideal for single-character substitutions.tr '[:upper:]' '[:lower:]'then lowercases the entire string using character classes, which handles the full alphabet without listing each letter.The final two
sedsubstitutions prepend the flag prefix and append the closing brace.sed 's/^/picoCTF{/'replaces the start-of-line anchor with the prefix text, andsed 's/$/}/'appends to the end of the line. Chaining these transformations is idiomatic Unix shell scripting.In CTF flag formatting, word separators commonly use underscores rather than spaces because spaces can cause issues in URLs and command-line arguments. Recognizing this convention helps when you decode a phrase and need to decide how to format it for submission.
Alternate Solution
If you already have the decoded dot-dash text (from morsecode.world or another audio decoder), paste it straight into the Morse Code Decoder on this site to convert dots and dashes to letters instantly. No audio processing needed for that last step.
Flag
picoCTF{...}
Simple signal-processing exercise, so there's no need for heavy tooling.