Anna Antonenkok, sistema txertatuak garatzen dituen eta bere aisialdian BOSS (BEAM-based Operating System with Security) sistema eragilea garatzen duenak, Yamaha PSR-E433 musika sintetizadorearen alderantzizko ingeniaritzaren emaitzak argitaratu zituen. Egindako lanetan, sintetizadorean shell interfaze lauso bat identifikatu zen, eta horri esker bere kodearen exekuzioa firmware mailan antolatzea posible zen. Shell interfazera SysEx mezuak dituzten MIDI paketeak bidaliz sartzen dira, sintetizadorea USB bidez konektatzen denean transmititu daitezkeenak. Alderantzizko ingeniaritzan lortutako txip eta firmwareari buruzko informazioa, baita kode-adibideak eta arazketa-zabortegiak ere, GitHub-en argitaratzen dira.
Alderantzizko ingeniaritzarako interesa duela urte batzuk sortu zen, Annak sintetizagailuaren barruak hautsetatik garbitzea eta, aldi berean, gailuaren barrualdea ikusteko nahiarekin lotutako jakin-mina asetzea erabaki ostean. Plakak YAMAHA SWL01U txip bat zuen, eta horri buruzko informazio zehatza ezin zen Interneten aurkitu. Duela hilabete pare bat, Annak antzeko sintetizadore-eredu baten eskuliburu bat topatu zuen, txip honen pinout-a zuena. Annak berriro desmuntatu zuen gailua eta esperimentuak hasi zituen, JTAG arazketa-interfazea eta UART atakarako taulan eskuragarri zeuden pinak erabiliz.

OpenOCD araztailea erabiliz, JTAG eta esperimentuetara konektatuz, aurkitu zen plakak ARM7TDMI prozesadorearen nukleoa duen txip bat erabiltzen duela. Araztegian memoria-diseinua aztertuta, ROM eta Flash memorian kokatutako firmwarearen edukia deskargatu ahal izan dugu. Horren ondoren, firmware-irudiak Ghidra alderantzizko ingeniaritza paketean aztertu ziren.
Firmwaretik ateratako kate-datuak ikustean, lerro multzo bat ("laguntza", "info", "ver", "logout", etab.) shell komandoen antza zutela ohartu ziren. Lerro hauetako erakusleak aztertuta komandoak prozesatzeko funtzioak deitzen zituen kodea agerian geratu zen, saioa hasteko interfazea eta komando shell bat gogorarazten duena. Era berean, shell-a aktibatzeko, "login" komandoa ematen dela agerian geratu zen, eta horri "#0000" pasahitza pasa behar diozu. void shell_run_command (char* komandoa_sarrera) { if (shell_saio-saioa_egoera == 0) { if (shell_compare_command (komandoa_sarrera, "saioa") == 0) { shell_ask_passwd (); // "passwd? " shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command (komandoa_sarrera, "#0000") == 0) { shell_login_ok (); // "saioa ondo" inprimatzen du shell_login_state = 2; } else { shell_print ("Passwd errorea\r"); shell_login_state = 0; } } bestela { // benetan exekutatu komandoa } }
Firmwarearen azterketa gehiago ikusi zen komandoak loteka prozesatzen direla, beti 8 byte datu berdinekin hasi eta 0xf7 kodearekin amaituz. Sintetizadorearekin kanpoko interakzioa MIDI bidez bakarrik egiten denez, eta MIDI zehaztapenak SysEx mezuen zerbitzu mota berezi bat eskaintzen duenez, hau komandoak transmititzeko erabil zitekeela suposatu zen. Asmakizuna are gehiago indartu zen shell-ak analizatutako SysEx mezuak eta paketeak kode bakar batekin hasten zirela, 0xf0, eta ondoren 0x43 (Yamaha) fabrikatzailearen IDarekin.
Hipotesia probatzeko, sarrerako datuak MIDI protokolo paketeetara itzultzen zituen Python script bat idatzi zen. Eta metodoak funtzionatu zuen: login passwd? #0000 saioa hasi Ados > laguntza saioa amaitzean laguntza? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m HELBIDE DATU m/b HELBIDE DATU m/w HELBIDE DATU m/l HELBIDE DATU m/l HELBIDE DATU > info DevelopName PSR-E433 DevelopNumber #3341 Main DevelopNumber # 3341 Egin datuak eta ordua 16ko MAIATZAK 2012 19:00:57 J/E Hautatu ingelesa >
"Laguntza" komandoa bidaltzean agertzen den gonbita, besteak beste, memoriaren edukia aldatzeko komandoak biltzen zituen. Komando hauek erabiliz, posible zen kode arbitrarioa memorian kargatu eta hari kontrola transferitzea, komandoak prozesatu ondoren itzultzeko erabiltzen den pilako erakuslea ordezkatuz. Esperimentu gisa, mihiztadura-lengoaian idatzitako aplikazio sinple bat jarri zen erabili gabeko memoria-eremu batean, "HeloWrld" katea 8 karaktereko LCD pantailako adierazle batera ateratzen duena. Programa MIDI fitxategi arrunt gisa formateatu zen, gailura transferitu behar zena.

Honen ostean, LCD pantaila batean grafikoen irteeraren ezaugarriak aztertzeko lanak hasi ziren, eta amaieran pixelen eduki arbitrarioa karaktere eremura ateratzen duen kodea prestatzen hasi zen, Bad Apple bideoa kanpoko gailu batean erreproduzitzeko sinkronoki (bideoa erakustaldiarekin). ).


Iturria: opennet.ru
