How Does That Sound?
How Does That Sound?
Platform: hackerlab | Category: Misc | Type: Challenge | Difficulty: Easy | OS: NA | Author: XESXOR | Date: 2025-04-17 | Status: Solved Techniques: morse_decoding, custom_symbol_mapping
Summary
Task: a text file contains only three speaker-volume emojis and a hint about hearing. Solution: treat the muted emoji as a token separator, map the other two symbols to Morse dot and dash, decode the uppercase plaintext, and use it unchanged inside the flag format.
How Does That Sound? — hackerlab
Description
Как слышно? Вам хорошо слышно? Просим прощения за такое неудобство :(
English summary: the challenge provides a single text file made only of speaker emojis. The goal is to recognize the encoding scheme and recover the flag text.
Analysis
The file contains only three distinct symbols:
🔊🔉🔇
That is a strong sign of a custom symbolic encoding. The muted speaker 🔇 is visually different from the other two and appears in positions that split the line into short chunks, so it makes sense to treat it as a separator.
After splitting on 🔇, the remaining groups are:
text read-only • copy allowed🔊🔉🔊🔊 / 🔊🔊🔊 / 🔉🔉🔊 / 🔊🔉🔊🔉 / 🔉🔊 / 🔊🔉 / 🔉🔉🔉🔉 / 🔉 / 🔉🔊 / 🔉🔊🔉 / 🔊🔊 / 🔉 / 🔉🔊🔉 / 🔉🔉 / 🔊🔊🔉 / 🔉🔉🔉🔉 / 🔊 / 🔉🔉🔊🔊🔉🔉
The title mentions hearing, so Morse code is a natural guess. Using:
🔉→.🔊→-🔇→ separator
we get:
text read-only • copy allowed-.-- / --- / ..- / -.-. / .- / -. / .... / . / .-. / .-. / -- / . / .-. / .. / --. / .... / - / ..--..
This decodes to:
text read-only • copy allowedREDACTED
The accepted flag was the raw uppercase plaintext inside CODEBY{...}. An important pitfall is that alternative normalization attempts such as lowercase text or inserting underscores were not accepted.
Solution
- Read the emoji line from
file.txt. - Split the string on
🔇to obtain Morse tokens. - Replace
🔉with.and🔊with-. - Decode each Morse token.
- Keep the recovered plaintext exactly as shown and wrap it as
CODEBY{REDACTED}.
python read-only • copy allowed#!/usr/bin/env python3 data = "🔊🔉🔊🔊🔇🔊🔊🔊🔇🔉🔉🔊🔇🔊🔉🔊🔉🔇🔉🔊🔇🔊🔉🔇🔉🔉🔉🔉🔇🔉🔇🔉🔊🔇🔉🔊🔉🔇🔊🔊🔇🔉🔇🔉🔊🔉🔇🔉🔉🔇🔊🔊🔉🔇🔉🔉🔉🔉🔇🔊🔇🔉🔉🔊🔊🔉🔉" morse_to_text = { ".-": "A", "-...": "B", "-.-.": "C", "-..": "D", ".": "E", "..-.": "F", "--.": "G", "....": "H", "..": "I", ".---": "J", "-.-": "K", ".-..": "L", "--": "M", "-.": "N", "---": "O", ".--.": "P", "--.-": "Q", ".-.": "R", "...": "S", "-": "T", "..-": "U", "...-": "V", ".--": "W", "-..-": "X", "-.--": "Y", "--..": "Z", "..--..": "?" } tokens = data.split("🔇") morse = [token.replace("🔉", ".").replace("🔊", "-") for token in tokens] plaintext = "".join(morse_to_text[token] for token in morse) print(plaintext) print(f"CODEBY{{{plaintext}}}")