← Back to Writeups
CUSTOMEasyMisc

SOS

XESXOR9/2/20263 min read
#misc#custom#easy#morse_decoding

SOS

Platform: TaipanByte | Category: Misc | Type: Challenge | Difficulty: Easy | OS: NA | Author: XESXOR | Date: 2026-02-14 | Status: Solved Techniques: morse_decoding

Summary

The task description contained only Morse code:

SOS — TaipanByte

Description

The task description contained only Morse code:

- -... { ... --- ... ..--.- -.-. --- -.. . ..--.- --- .-. ..--.- -- --- .-. ... . ..--.- -.-. --- -.. . ..--.. }

The task name "SOS" is a direct hint: SOS (... --- ...) is the most famous Morse code signal.

Files: none. The flag is encoded directly in the task description.

Analysis

The task is pure Morse code decoding. Key observations:

  1. Name "SOS" — direct hint to Morse code (SOS = ... --- ...)
  2. Description consists of dots (.) and dashes (-) separated by spaces — classic Morse format
  3. Characters { and } are left as literal delimiters — they frame the encoded flag content
  4. Flag format TB{...} — the first two characters - -... decode to T and B ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

Solution

Step-by-step decoding

MorseCharacterNote
-T
-...B
{{literal
... --- ...SOS
..--.-_underscore
-.-. --- -.. .CODE
..--.-_underscore
--- .-.OR
..--.-_underscore
-- --- .-. ... .MORSE
..--.-_underscore
-.-. --- -.. .CODE
..--..?question mark
}}literal

Result: TB{REDACTED}

Python script for decoding

‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

python
#!/usr/bin/env python3
"""Morse code decoder for TaipanByte SOS challenge."""

MORSE_CODE = {
    '.-': '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',
    '-----': '0', '.----': '1', '..---': '2', '...--': '3',
    '....-': '4', '.....': '5', '-....': '6', '--...': '7',
    '---..': '8', '----.': '9',
    '..--.-': '_',   # underscore
    '..--..': '?',   # question mark
    '.-.-.-': '.',   # period
    '--..--': ',',   # comma
}
‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

morse_input = "- -... { ... --- ... ..--.- -.-. --- -.. . ..--.- --- .-. ..--.- -- --- .-. ... . ..--.- -.-. --- -.. . ..--.. }"

result = []
for token in morse_input.split():
    if token in ('{', '}'):
        result.append(token)
    elif token in MORSE_CODE:
        result.append(MORSE_CODE[token])
    else:
        result.append(f'[?{token}]')

flag = ''.join(result)
print(f"Flag: {flag}")

Output:

Flag: TB{REDACTED}

Reference: Morse Code

Letters

A  .-      N  -.
B  -...    O  ---
C  -.-.    P  .--.
D  -..     Q  --.-
E  .       R  .-.
F  ..-.    S  ...
G  --.     T  -
H  ....    U  ..-
I  ..      V  ...-
J  .---    W  .--
K  -.-     X  -..-
L  .-..    Y  -.--
M  --      Z  --..

‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

Special characters

_  ..--.-    (underscore)
?  ..--..    (question mark)
.  .-.-.-   (period)
,  --..--   (comma)

Related Techniques

  • ASCII decoding — numeric character codes
  • Base64 decoding — Base64 format strings
  • Hex decoding — hexadecimal data
  • Semaphore alphabet — visual encoding with flags
  • Bacon cipher — binary encoding (A/B or two fonts)

Notes

  • Task in "beginners/misc" category — pure decoding without cryptography
  • { and } have no standard Morse code representation, so they are left as literals
  • Character ..--.- (underscore) — non-standard Morse code extension, but widely used in CTF
  • Question mark ..--.. — standard Morse character ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍