Twitter Secret Messages: гомоглифы и спецпробелы
Твит в духе мотивационных цитат («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 SPACE | U+2004 |
| пробел | PUNCTUATION SPACE | U+2008 |
Механизм
Название задачи указывает на конкретный инструмент: Twitter Secret Messages от Holloway. В нём каждый символ несёт несколько бит в зависимости от того, сколько у него двойников: у обычной буквы один двойник (1 бит), у некоторых букв больше вариантов (2 бита), у пробела много юникодных версий (до 4 бит). Биты склеиваются, режутся по 6 и переводятся по своему алфавиту.
Главная ловушка: копирование из браузера «нормализует» текст, и спецпробелы превращаются в обычные. Брать нужно версию с экранированием\uXXXXи раскодировать её самому:s.encode().decode('unicode_escape').
Декодирование
Опознал инструмент — используй его декодер: вставить точный текст в holloway.nz/steg. Альтернатива: CyberChef (Unescape Unicode Characters), затем тот же декодер.
Что вынести
- Береги данные: копипаст и конвертации ломают невидимые символы.
- Название задачи — часто прямое имя инструмента.
- Для ИБ: так же устроены фишинговые домены с гомоглифами (
pаypalс кириллической «а»).