Бкрытая командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π² синтСзаторС Yamaha, позволившая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· MIDI

Анна АнтонСнко, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π°ΡΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ встраиваСмых систСм ΠΈ Π² свободноС врСмя Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму BOSS (BEAM-based Operating System with Security), ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³Π° ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ синтСзатора Yamaha PSR-E433. Π’ Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² синтСзаторС Π±Ρ‹Π» выявлСн обфусцированный shell-интСрфСйс, позволивший ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ своСго ΠΊΠΎΠ΄Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ. Доступ ΠΊ shell-интСрфСйсу осущСствляСтся посрСдством ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ MIDI-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с сообщСниями SysEx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ синтСзатора Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ€Ρ‚ USB. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π² Ρ…ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³Π° свСдСния ΠΎ Ρ‡ΠΈΠΏΠ΅ ΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°ΠΌΠΏΡ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π½Π° GitHub.

Π˜Π½Ρ‚Π΅Ρ€Π΅Ρ ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³Ρƒ Π²ΠΎΠ·Π½ΠΈΠΊ нСсколько Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Анна Ρ€Π΅ΡˆΠΈΠ»Π° ΠΏΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ внутрСнности синтСзатора ΠΎΡ‚ ΠΏΡ‹Π»ΠΈ ΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ своё Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²ΠΎ, связанноС с ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Ρ‡ΠΈΠ½ΠΊΡƒ устройства. На ΠΏΠ»Π°Ρ‚Π΅ присутствовал Ρ‡ΠΈΠΏ YAMAHA SWL01U, ΠΏΡ€ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. ΠŸΠ°Ρ€Ρƒ мСсяцСв Π½Π°Π·Π°Π΄ Анна Π½Π°Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»Π°ΡΡŒ Π½Π° руководство ΠΏΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ синтСзатора, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° распиновка этого Ρ‡ΠΈΠΏΠ°. Анна вновь Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»Π° устройство ΠΈ Π½Π°Ρ‡Π°Π»Π° экспСримСнты, воспользовавшись имСвшимися Π½Π° ΠΏΠ»Π°Ρ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄Π°ΠΌΠΈ для ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ интСрфСйса JTAG ΠΈ ΠΏΠΎΡ€Ρ‚Π° UART.

Бкрытая командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π² синтСзаторС Yamaha, позволившая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· MIDI

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° OpenOCD, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ JTAG ΠΈ экспСримСнтов Π±Ρ‹Π»ΠΎ выяснСно, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΠ»Π°Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡ΠΈΠΏ с процСссорным ядром ARM7TDMI. Π˜Π·ΡƒΡ‡ΠΈΠ² раскладку памяти Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅, ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ содСрТимоС ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Π² ΠŸΠ—Π£ ΠΈ Flash-памяти. ПослС этого ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³Π° Ghidra.

Π’ процСссС просмотра Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ строковых Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π» Π·Π°ΠΌΠ΅Ρ‡Π΅Π½ Π½Π°Π±ΠΎΡ€ строк (“help, “info”, “ver”, “logout” ΠΈ Ρ‚.ΠΏ.), Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° эти строки ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ΄, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ интСрфСйс Π²Ρ…ΠΎΠ΄Π° ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ. Π’Π°ΠΊ ΠΆΠ΅ Π±Ρ‹Π»ΠΎ выявлСно, Ρ‡Ρ‚ΠΎ для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ прСдусмотрСна ΠΊΠΎΠΌΠ°Π½Π΄Π° “login”, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ “#0000”. void shell_run_command(char* command_input) { if (shell_login_state == 0) { if (shell_compare_command(command_input, “login”) == 0) { shell_ask_passwd(); // prints “passwd? ” shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command(command_input, “#0000”) == 0) { shell_login_ok(); // prints “login OK” shell_login_state = 2; } else { shell_print(“Passwd Error\r”); shell_login_state = 0; } } else { // actually run the command } }

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, всСгда Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…ΡΡ с ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ 8 Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠΎΠ΄ΠΎΠΌ 0xf7. Π’Π°ΠΊ ΠΊΠ°ΠΊ внСшнСС взаимодСйствиС с синтСзатором осущСствляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· MIDI, Π° Π² спСцификации MIDI прСдусмотрСн ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ слуТСбный Ρ‚ΠΈΠΏ сообщСний SysEx, Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. Π”ΠΎΠ³Π°Π΄ΠΊΡƒ Ρ‚Π°ΠΊΠΆΠ΅ подкрСпляло Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сообщСния SysEx ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ, Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈΡΡŒ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° 0xf0, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдовал ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ производитСля 0x43 (Yamaha).

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρ‹ Π±Ρ‹Π» написан Python-скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ транслировал Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° MIDI. И ΠΌΠ΅Ρ‚ΠΎΠ΄ сработал: login passwd? #0000 login OK > help logout help ? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m ADDRESS DATA m/b ADDRESS DATA m/w ADDRESS DATA m/l ADDRESS DATA > info DevelopName PSR-E433 DevelopNumber #3341 Main DevelopNumber #3341 Make data & time MAY 16 2012 19:00:57 J/E Select English >

Π’ подсказкС, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ “help”, срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ присутствовали ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для измСнСния содСрТимого памяти. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² стСкС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’ качСствС экспСримСнта Π² Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ области памяти Π±Ρ‹Π»ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ написанноС Π½Π° ассСмблСрС ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, выводящСС строку “HeloWrld” Π² 8-ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π–Πš-дисплСя. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ MIDI-Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ достаточно Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π° устройство.

Бкрытая командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π² синтСзаторС Yamaha, позволившая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· MIDI

ПослС этого Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ особСнностСй Π²Ρ‹Π²ΠΎΠ΄Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π–Πš-дисплСй, ΠΊΡƒΠ»ΡŒΠΌΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стала ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ΄Π°, выводящСго ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ пиксСльноС содСрТимоС Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, синхронно с воспроизвСдСниСм Π²ΠΈΠ΄Π΅ΠΎ Bad Apple Π½Π° внСшнСм устройствС (Π²ΠΈΠ΄Π΅ΠΎ с дСмонстрациСй).

Бкрытая командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π² синтСзаторС Yamaha, позволившая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· MIDI


Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru