Twitter Secret Messages: гомоглифы и спецпробелы

стеганография · задача 04   текстunicodeгомоглифыroot-me

Твит в духе мотивационных цитат («Choose a job you love…»), а ответ — место встречи. Снаружи обычный английский текст.

Платформа
Root-Me
Носитель
текст
Приём
гомоглифы и юникодные пробелы (схема Holloway)
Инструменты
Python (поиск не-ASCII), holloway.nz/steg, CyberChef
Статус
решено

Аномалия: «английский» текст не из ASCII

В английском тексте все символы должны быть ASCII (код < 128). Скрипт сразу показывает, где это не так:

import sys, unicodedata
s = open(sys.argv[1], encoding='utf-8').read()
for i, ch in enumerate(s):
    if ord(ch) > 127:
        print(i, repr(ch), f'U+{ord(ch):04X}', unicodedata.name(ch, '?'))
ВидноНа самом делеКод
oкириллическая «о»U+043E
aкириллическая «а»U+0430
cкириллическая «с»U+0441
пробелTHREE-PER-EM SPACEU+2004
пробелPUNCTUATION SPACEU+2008

Примеры двойников для иллюстрации; набор в задаче свой.

Механизм

Название задачи указывает на конкретный инструмент: Twitter Secret Messages от Holloway. В нём каждый символ несёт несколько бит в зависимости от того, сколько у него двойников: у обычной буквы один двойник (1 бит), у некоторых букв больше вариантов (2 бита), у пробела много юникодных версий (до 4 бит). Биты склеиваются, режутся по 6 и переводятся по своему алфавиту.

Главная ловушка: копирование из браузера «нормализует» текст, и спецпробелы превращаются в обычные. Брать нужно версию с экранированием \uXXXX и раскодировать её самому: s.encode().decode('unicode_escape').

Декодирование

Опознал инструмент — используй его декодер: вставить точный текст в holloway.nz/steg. Альтернатива: CyberChef (Unescape Unicode Characters), затем тот же декодер.

[ответ скрыт] Это задача с Root-Me, а правила платформы просят не выкладывать ответы. Метод выше полный: по нему ответ получается за пару минут.

Что вынести

  • Береги данные: копипаст и конвертации ломают невидимые символы.
  • Название задачи — часто прямое имя инструмента.
  • Для ИБ: так же устроены фишинговые домены с гомоглифами (pаypal с кириллической «а»).