Ана Антоненко, која развива вградени системи и во слободното време го развива оперативниот систем BOSS (BEAM-based Operating System with Security), ги објави резултатите од обратното инженерство на музичкиот синтисајзер Yamaha PSR-E433. За време на извршената работа, во синтисајзерот беше идентификуван заматен интерфејс на школка, што овозможи да се организира извршувањето на неговиот код на ниво на фирмвер. До интерфејсот на школка се пристапува со испраќање MIDI пакети кои содржат SysEx пораки, кои може да се пренесат кога синтисајзерот е поврзан преку USB. Информациите за чипот и фирмверот добиени за време на обратно инженерство, како и примери за кодови и дебагирање, се објавени на GitHub.
Интересот за обратно инженерство се појави пред неколку години, откако Ана реши да ја исчисти внатрешноста на синтисајзерот од прашина и во исто време да ја задоволи нејзината љубопитност поврзана со желбата да ја види внатрешноста на уредот. Таблата содржела чип YAMAHA SWL01U, за кој детални информации не може да се најдат на Интернет. Пред неколку месеци, Ана наиде на прирачник за сличен модел на синтисајзер, кој го содржеше пинот на овој чип. Ана повторно го расклопи уредот и започна со експерименти, користејќи ги пиновите достапни на таблата за интерфејсот за дебагирање JTAG и портата UART.

Користејќи го дебагерот OpenOCD, поврзувајќи се со JTAG и експерименти, беше откриено дека плочата користи чип со јадро на процесорот ARM7TDMI. Откако го проучувавме распоредот на меморијата во дебагерот, успеавме да ја растовариме содржината на фирмверот лоциран во ROM и Flash меморија. Сликите на фирмверот потоа беа анализирани со помош на пакетот за обратно инженерство Ghidra.
При прегледувањето на податоците од стрингот извлечени од фирмверот, забележани се множество линии („помош“, „информации“, „вер“, „одјавување“ итн.) кои личат на команди на школка. Испитувањето на покажувачите на овие линии откри код кој повикува функции за обработка на команди, потсетувајќи на интерфејс за најава и командна школка. Исто така, беше откриено дека за активирање на школката е обезбедена командата „најава“, на која треба да ја пренесете лозинката „#0000“. void shell_run_command(char* command_input) { if (shell_login_state == 0) { if (shell_compare_command(command_input, "login") == 0) { shell_ask_passwd(); // печати „passwd? " shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command(command_input, "#0000") == 0) { shell_login_ok(); // печати "login OK" shell_login_state = 2; } else { shell_print("Грешка во лозинка\r"); shell_login_state = 0; } } else { // всушност изврши ја командата } }
Понатамошното испитување на фирмверот покажа дека командите се обработуваат во групи, секогаш почнувајќи од истите 8 бајти податоци и завршувајќи со кодот 0xf7. Бидејќи надворешната интеракција со синтисајзерот се врши само преку MIDI, а спецификацијата MIDI обезбедува специјален тип на услуга на пораки SysEx, се претпоставуваше дека тоа може да се користи за пренос на команди. Дополнително зајакнување на претпоставката беше дека пораките и пакетите на SysEx анализирани од школката започнуваат со единствен код, 0xf0, проследен со ID на производителот 0x43 (Yamaha).
За да се тестира хипотезата, напишана е Python скрипта која ги преведува влезните податоци во пакети на протокол MIDI. И методот функционираше: login passwd? #0000 најавување Добро > помогнете помош за одјавување ? информации ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m ПОДАТОЦИ ЗА АДРЕСА m/b ПОДАТОЦИ ЗА АДРЕСА m/w ПОДАТОЦИ ЗА АДРЕСА m/l ПОДАТОЦИ ЗА АДРЕСА > информации DevelopName PSR-E433umberin #Delop3341N 3341 Направете податоци и време 16 МАЈ 2012 19:00:57 J/E Изберете англиски >
Промптот прикажан при испраќањето на командата „помош“ вклучи, меѓу другото, и команди за менување на содржината на меморијата. Користејќи ги овие команди, беше можно да се вчита произволен код во меморијата и да се пренесе контролата на неа, заменувајќи го покажувачот на оџакот што се користи за враќање по завршувањето на обработката на командите. Како експеримент, едноставна апликација напишана на асемблерски јазик беше поставена во неискористена мемориска област што ја емитува низата „HeloWrld“ на индикатор за LCD дисплеј со 8 знаци. Програмата беше форматирана како обична MIDI-датотека, која само требаше да се пренесе на уредот.

После ова, започна работата на проучување на карактеристиките на графичкиот излез на LCD дисплеј, што кулминираше со подготовка на код кој емитува произволна содржина на пиксели во областа на знаци, синхроно со репродукција на видеото Bad Apple на надворешен уред (видео со демонстрација ).


Извор: opennet.ru
