категории | RSS

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

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

Анна Антоненко работает в команда Flipper Devices, занимается разработкой встраиваемых систем и в свободное время развивает операционную систему 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



Источник новости: habr.com

DimonVideo
2025-01-06T20:50:11Z

Здесь находятся
всего 0. За сутки здесь было 0 человек
Яндекс.Метрика