Разработчик запустил удалённое выполнение кода на уровне прошивки на синтезаторе Yamaha PSR-E433 через MIDI-сообщения

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Разработчик Анна Антоненко (Anna Antonenko) подробно рассказала в своём техническом блоге, как у неё в рамках процесса обратного инжиниринга получилось запустить удалённое выполнение кода на уровне прошивки на музыкальном синтезаторе Yamaha PSR-E433 через MIDI-сообщения.

Антоненко занимается разработкой встраиваемых систем и в свободное время развивает операционную систему BOSS (BEAM‑based Operating System with Security).

По информации OpenNET, Антоненко пояснила, что в ходе своих экспериментов над электроникой синтезатора она выявила обфусцированный shell‑интерфейс, позволивший организовать выполнение своего кода на уровне прошивки. Доступ к shell‑интерфейсу осуществляется посредством отправки MIDI‑пакетов с сообщениями SysEx, которые можно передать при подключении синтезатора через порт USB. Полученные в ходе обратного инжиниринга сведения о чипе и прошивках, а также примеры кода и отладочные дампы размещены автором проекта на GitHub.

Интерес к обратному инжинирингу возник у Антоненко несколько лет назад. Она решила почистить внутренности своего синтезатора Yamaha от пыли и заодно удовлетворить своё любопытство, связанное с желанием изучить начинку музыкального устройства.

Антоненко обнаружила на плате синтезатора чип YAMAHA SWL01U, про который в интернете не удалось найти подробную информацию. Два месяца назад Антоненко обнаружила в сети руководство по похожей модели синтезатора, в котором была приведена распиновка этого чипа. Антоненко вновь разобрала синтезатор и начала эксперименты, воспользовавшись имевшимися на плате выводами для отладочного интерфейса JTAG и порта UART.

При помощи отладчика OpenOCD, подключения к JTAG и проведения многочисленных экспериментов, Антоненко выяснила, что на плате синтезатора используется чип с процессорным ядром ARM7TDMI. Изучив раскладку памяти в отладчике, ей удалось выгрузить содержимое прошивок, размещённых в ПЗУ и Flash‑памяти. После этого образы прошивок были проанализированы в пакете для обратного инжиниринга Ghidra.

В процессе просмотра выделенных из прошивки строковых данных Антоненко заметила набор стандартных строк (help, info, ver, logout), напоминающих команды программной оболочки.

Изучение указателей на эти строки позволило Антоненко найти код, вызывающий функции для обработки команд, напоминающий интерфейс входа и командную оболочку. Так же Антоненко выявила, что для активации оболочки предусмотрена команда login, в которую необходимо передать пароль #0000.

При дальнейшем изучении прошивки Антоненко выяснила, что команды обрабатываются в пакетах, всегда начинающихся с одних и тех же 8 байт данных и заканчивающихся кодом 0xf7. Так как внешнее взаимодействие с синтезатором осуществляется только через MIDI, а в спецификации MIDI предусмотрен специальный служебный тип сообщений SysEx. Она предположила, что именно этот способ может использоваться для передачи команд. Догадку также подкрепляло то, что сообщения SysEx и пакеты, разбираемые оболочкой, начинались с одного кода 0xf0, за которым следовал идентификатор производителя 0×43 (Yamaha).

Для проверки гипотезы Антоненко написала Python‑скрипт, который транслировал вводимые данные в пакеты протокола MIDI. Этот метод сработал.

Оказалось, что в подсказке, показанной при отправке команды help, среди прочего присутствовали команды для изменения содержимого памяти. При помощи данных команд можно было загрузить произвольный код в память и передать на него управление, подменив указатель в стеке, используемый для возврата после завершения обработки команды. В качестве эксперимента в неиспользуемой области памяти было размещено написанное на ассемблере простейшее приложение, выводящее строку HeloWrld в 8-символьный индикатор ЖК‑дисплея. Программа была оформлена в виде обычного MIDI‑файла, который достаточно было передать на устройство.

После Антоненко провела работу по изучению особенностей вывода графики на ЖК‑дисплей, а также занялась подготовкой кода, выводящего произвольное пиксельное содержимое в символьную область синтезатора, синхронно с воспроизведением видео Bad Apple на внешнем устройстве.

Ссылки по этому проекту:

  • This project on GitHub

  • MIDI Specification

  • MIDI SysEx ID allocation table

  • USB-MIDI Specification

  • ARM7TDMI Technical Reference Manual

  • Architecture of Yamaha entry-level synths

Источник: https://habr.com/ru/news/871882/


Интересные статьи

Интересные статьи

Сегодня Spark — отраслевой стандарт среди инструментов обработки данных. Его часто используют в связке с Hadoop, однако Hadoop не очень подходит для работы в облаке. Альтернативой может быть Kuber...
ChatGPT от OpenAI, запущенный 30 ноября этого года, произвел настоящий фурор в IT-сообществе, поразив многих точностью ответов на специальные вопросы. Посмотрим, как можно использовать этого чат-бота,...
У нас возникла задача добавить препроцессинг для параметров активити бизнес-процесса Битрикс24. Когда разбирались в задаче не смогли найти ни одного примера и решили выложить свой - может быть кто-ниб...
Одна из самых важных (на мой взгляд) функций в Битрикс24 это бизнес-процессы. Теоретически они позволяют вам полностью избавиться от бумажных служебок и перенести их в эл...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.