Steganomobile: набор на кнопочном телефоне
После извлечения данных телефона следователь получил последовательность байтов: 32 32 32 2D 33 33 2D 35 …. «Может быть, номер телефона?»
- Платформа
- Root-Me
- Носитель
- последовательность hex-байтов
- Приём
- multi-tap: повторы цифры = номер буквы на клавише
- Инструменты
xxd -r -p, таблица клавиш- Статус
- решено
Шаг 1. Байты → символы
Диапазон байтов говорит сам за себя: 0x30–0x39 — это цифры 0–9, 0x2D — дефис, 0x0A — перевод строки. Значит, это текст из цифр, разбитых на группы.
echo "34 34 2D 33 33 2D 35 35 35 2D 35 35 35 2D 36 36 36 0A" | xxd -r -p
44-33-555-555-666
Шаг 2. Почему это не номер
Группы из одинаковых цифр разной длины (44, 555) не похожи на номер телефона. Зато похожи на то, как набирали SMS до T9: чтобы получить c, клавишу 2 жмёшь три раза. Число повторов = номер буквы на клавише, дефис разделяет буквы.
1
2abc
3def
4ghi
5jkl
6mno
7pqrs
8tuv
9wxyz
*
0␣
#
44 → h 33 → e 555 → l 555 → l 666 → o ⇒ hello
Скрипт, чтобы не считать руками:
keys = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz','0':' '}
s = bytes.fromhex(open('data.txt').read()).decode().strip()
print(''.join(keys[g[0]][len(g) - 1] for g in s.split('-')))
[ответ скрыт] Это задача с Root-Me, а правила платформы просят не выкладывать ответы. Метод выше полный: по нему ответ получается за пару минут.
Что вынести
- Числа в диапазоне 32–126 всегда стоит пробовать как ASCII. Здесь это первый слой, дальше было уже само кодирование.
- Контекст задачи («мобильный телефон», «следователь») подсказывает кодировку не хуже инструментов.
- Не путать multi-tap (повторы нажатий) и T9 (одно нажатие на букву плюс словарь).