Skip to content

Krupnikas/octave

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Octave - Музыкальная передача данных

Это проект, на который меня вдохновила уязвимость в «Яндекс.Станции».

Я написал про него на Хабре:

Реверс инжиниринг протокола активации Яндекс.Станции

Как уязвимость в Яндекс.Станции вдохновила меня на проект: Музыкальная передача данных

И на vc.ru:

Уязвимость в «Яндекс.Станции» вдохновила меня сделать сервис для музыкальной передачи данных

В репозитории можно найти файлы на Python в папке research и продолжить эксперименты. Также тут хранятся фалы для web-демки доступной по адресу octave.skrup.ru - при желании можно выбрать другие ноты для передачи данных и, так сказать, поменять жанр. Затем развернуть на своем сервере.

Кратко перескажу статьи здесь.

С чего все началось?

Друзья подарили мне «Яндекс.Станцию». Для её активации нужно было поднести телефон и проиграть звук из приложения «Яндекс».

Preview

Я создал точку доступа Wi-Fi с паролем «012345678» и записал получившийся сигнал. Затем посмотрел на спектрограмму и понял, как устроен сигнал и где лежит пароль от WiFi.

Данные для Станции кодируются символами по 4 бита. По сути кодируется hex строка, где каждому значению 0 — F соответствует своя частота от 1 кГц до 4,6 кГц с шагом в 240 Гц. Пароль не шифруется и передаётся в открытом виде.

Я размышлял, зачем нужно было делать активацию так, а не через Bluetooth, как, например, у китайских пылесосов-роботов, и пришёл к выводу, что в этом случае эффектность важна больше, чем безопасность или скорость.

Действительно! Ведь протокол связи — всегда компромисс между дальностью, скоростью и надёжностью. А что, если все эти характеристики отойдут на второй план, а определяющим станет фактор впечатления для пользователя? Я решил сделать протокол, в котором для модуляции будут использоваться частоты нот.

Как сделал

Мне понравилась простая, как молоток, идея разработчиков «Яндекса» — выбрать 16 частот: по одной для каждого hex-символа. А ещё у меня остались наработки от реверс-инжиниринга, поэтому я решил развить эту идею, а не придумывать всё с нуля.

Глубоко в технику вдаваться не будем: подробнее о разработке я написал в другой статье на «Хабре». А сейчас расскажу в двух словах.

Я избавился от щелчков в сигнале «Яндекс.Станции» и выбрал новые частоты для передачи: 16 нот, начиная с До первой октавы. Вот так: Ноты

Если использовать более высокие ноты, то становится менее комфортно ушам. А более низкие ноты хуже передаются из-за особенностей динамиков и микрофонов.

Получилась своего рода музыкально-частотная модуляция. Назовём её «круп-модуляция» :)

Как звучит?

Чтобы можно было попробовать прямо в браузере, я переписал передатчик с круп-модуляцией с Python на JavaScript и сделал простенький интерфейс.

Пользуясь случаем, хочу передать привет:

Кириллические символы и даже эмодзи тоже работают. Но посылки с ними получаются длиннее и менее мелодичными из-за особенностей кодировки.

Можете попробовать любые фразы тут

Как принимается?

Это, конечно, весело — слушать рандомные звуки на основе текста, но передачей данных можно будет назвать, только если сигнал будет приниматься.

Я сделал прототип приёмника в качестве proof of concept. Вот как он работает:

Видите, передача данных идёт как по нотам! Конечно, ни о каком продакшне сейчас речи не идёт. Тут нет синхронизации, помехоустойчивого кодирования и контроля целостности. Вы можете доработать сами - все исходники тут.

Как думаете, какие варианты практического применения и коммерциализации могут быть у музыкальной передачи данных?

Подводя итог

Это был интересный проект на пару вечеров с достаточно эффектным результатом. Такую передачу данных можно использовать, например, как «звуковой QR-code» — расшарить аккаунт с телефона на сайт и прочее.

About

Musical data transmission

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published