Запутанный шифр (Confused Cipher)
Запутанный шифр (Confused Cipher)
Platform: CUSTOM | Category: Crypto | Type: Challenge | Difficulty: Easy | OS: N/A | **Author: XESXOR Techniques: fruit_delimiter_pattern, morse_code_decoding
Summary
Walkthrough of the CUSTOM Crypto Запутанный шифр (Confused Cipher). Task: Decode a string with Cyrillic fruit names and Morse-like symbols. Solution: Recognize fruit names as delimiters and decode the Morse code between them to reveal the flag.
Description
Вроде что-то знакомое...Или нет? (Something familiar... Or not?)
A text file with a strange string containing fruit names in Russian and dot/dash symbols was provided.
Analysis
Original text:
яблоко-.-. банан--- апельсин-.. виноград. ананас-... яблоко-.-- банан{ апельсин-.. виноград.---- ананас-.. яблоко..--.- банан-.-- апельсин----- виноград..- ананас..--.- яблоко.-. банан...-- апельсин-.-. виноград----- ананас--. яблоко-. банан.---- апельсин--.. виноград...-- ананас..--.- яблоко-- банан----- апельсин.-. виноград... ананас...-- яблоко..--.- банан-.-. апельсин----- виноград-.. ананас...-- яблоко..--.. банан}
Observations
-
Cyclic fruit pattern: Fruit names repeat in strict order:
- яблоко → банан → апельсин → виноград → ананас → яблоко → ...
-
Morse-like symbols: After each fruit name there are
.and-symbols — this is Morse code! -
Special characters:
{and}are inserted as-is (part of the flag format).
Structure
Fruits serve as delimiters between Morse codes. This is obfuscation — a distraction to hide the obvious Morse.
Solution
python read-only • copy allowed#!/usr/bin/env python3 import re 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', '..--.-': '_', '..--..': '?' } text = "яблоко-.-. банан--- апельсин-.. виноград. ананас-... яблоко-.-- банан{ апельсин-.. виноград.---- ананас-.. яблоко..--.- банан-.-- апельсин----- виноград..- ананас..--.- яблоко.-. банан...-- апельсин-.-. виноград----- ананас--. яблоко-. банан.---- апельсин--.. виноград...-- ананас..--.- яблоко-- банан----- апельсин.-. виноград... ананас...-- яблоко..--.- банан-.-. апельсин----- виноград-.. ананас...-- яблоко..--.. банан}" # Remove fruit names (Cyrillic), keep only Morse and brackets parts = re.split(r'[а-яё]+', text) parts = [p.strip() for p in parts if p.strip()] flag = "" for p in parts: if p in '{}'': flag += p else: flag += morse_code.get(p, p) print(flag)
Step-by-step decoding
| Fruit | Morse | Symbol |
|---|---|---|
| яблоко | -.-. | C |
| банан | --- | O |
| апельсин | -.. | D |
| виноград | . | E |
| ананас | -... | B |
| яблоко | -.-- | Y |
| банан | { | { |
| апельсин | -.. | D |
| виноград | .---- | 1 |
| ананас | -.. | D |
| яблоко | ..--.- | _ |
| банан | -.-- | Y |
| апельсин | ----- | 0 |
| виноград | ..- | U |
| ананас | ..--.- | _ |
| яблоко | .-. | R |
| банан | ...-- | 3 |
| апельсин | -.-. | C |
| виноград | ----- | 0 |
| ананас | --. | G |
| яблоко | -. | N |
| банан | .---- | 1 |
| апельсин | --.. | Z |
| виноград | ...-- | 3 |
| ананас | ..--.- | _ |
| яблоко | -- | M |
| банан | ----- | 0 |
| апельсин | .-. | R |
| виноград | ... | S |
| ананас | ...-- | 3 |
| яблоко | ..--.- | _ |
| банан | -.-. | C |
| апельсин | ----- | 0 |
| виноград | -.. | D |
| ананас | ...-- | 3 |
| яблоко | ..--.. | ? |
| банан | } | } |
| |
Morse Code Reference
Letters
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: --..
Digits
0: ----- 1: .---- 2: ..--- 3: ...-- 4: ....-
5: ..... 6: -.... 7: --... 8: ---.. 9: ----.
Special characters
_: ..--.- (underscore)
?: ..--.. (question mark)
Key Takeaways / Lessons
- Mastering fruit_delimiter_pattern, morse_code_decoding was key to this challenge.
- Always check for common misconfigurations and verify assumptions.
Crafted by XESXOR Research • 2025-12-25 • CUSTOM • Запутанный шифр (Confused Cipher) • Difficulty: Easy