Di synthesizer Yamaha de şêla fermana veşartî ya ku destûr dide darvekirina kodê bi riya MIDI-yê

Anna Antonenko, ku pergalên pêvekirî pêş dixe û di dema xwe ya vala de pergala xebitandinê ya BOSS (BeAM-based Operating System with Security) pêş dixe, encamên endezyariya berevajî ya sentezera muzîkê Yamaha PSR-E433 weşand. Di dema xebata ku hatî kirin de, di sentezkerê de navbeynek şêlê ya şepirze hate nas kirin, ku ev gengaz kir ku pêkanîna koda xwe di asta firmware de organîze bike. Têkiliya şêlê bi şandina pakêtên MIDI yên ku peyamên SysEx vedihewîne, tê veguheztin, ku dema ku sentezker bi USB-yê ve girêdayî ye were veguheztin. Agahiyên di derbarê çîp û firmware de ku di dema endezyariya berevajî de hatine bidestxistin, û her weha mînakên kodê û avêtina xeletiyê, li ser GitHub têne şandin.

Eleqeya ji endezyariya berevajî re çend sal berê rabû, piştî ku Anna biryar da ku hundurê sentezkerê ji axê paqij bike û di heman demê de meraqa xwe ya girêdayî xwesteka dîtina hundurê cîhazê têr bike. Di panelê de çîpek YAMAHA SWL01U hebû, ku derheqê wê de agahdariya berfireh li ser Înternetê nehat dîtin. Çend meh berê, Anna ji bo modelek synthesizer-a heman rengî destekek peyda kir, ku tê de pinouta vê çîpê tê de heye. Anna dîsa amûrê ji hev veqetand û dest bi ceribandinan kir, bi karanîna pîneyên ku li ser panelê hene ji bo navgîniya debugkirina JTAG û porta UART.

Di synthesizer Yamaha de şêla fermana veşartî ya ku destûr dide darvekirina kodê bi riya MIDI-yê

Bi karanîna debugera OpenOCD, girêdana bi JTAG û ceribandinan, hate dîtin ku panel çîpek bi navgîniya pêvajoyek ARM7TDMI bikar tîne. Piştî lêkolîna sêwirana bîranînê ya di debuggerê de, me karî naveroka firmware ya ku di bîra ROM û Flash de ye dakêşin. Dûv re wêneyên firmware bi karanîna pakêta endezyariya berevajî Ghidra hatin analîz kirin.

Di dema dîtina daneya rêzê ya ku ji firmware hatî derxistin de, komek rêzik ("alîkarî", "agahdarî", "ver", "derketin", hwd.) hatin dîtin ku dişibin fermanên şêlê. Vekolîna nîşangirên van rêzan kodek eşkere kir ku jê re fonksiyonan digotin ku fermanan bişopînin, ku navberek têketinê û şêlê fermanê tîne bîra xwe. Her weha hate eşkere kirin ku ji bo çalakkirina şêlê, fermana "têketinê" tê peyda kirin, ku hûn hewce ne ku şîfreya "#0000" derbas bikin. betal shell_run_command(char* command_input) { if (shell_login_state == 0) { if (shell_compare_command(command_input, "login") == 0) { shell_ask_passwd(); // "passwd" çap dike? " shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command(command_input, "#0000") == 0) { shell_login_ok(); // "login OK" çap dike shell_login_state = 2; } else { shell_print("Çewtiya Passwd\r"); shell_login_state = 0; } } else { // bi rastî fermanê bimeşîne } }

Zêdetir lêkolîna firmware destnîşan kir ku emir di koman de têne hilberandin, her gav bi heman 8 byte daneyan dest pê dikin û bi koda 0xf7 bi dawî dibin. Ji ber ku danûstendina derveyî bi synthesizer re tenê bi MIDI ve tête kirin, û taybetmendiya MIDI celebek karûbarê taybetî ya peyamên SysEx peyda dike, hate texmîn kirin ku ev dikare ji bo veguheztina fermanan were bikar anîn. Zêdetir bihêzkirina texmînê ev bû ku peyam û pakêtên SysEx ku ji hêla şêlê ve hatî pars kirin bi kodek yekane, 0xf0 dest pê kir, li dûv ID-ya çêker 0x43 (Yamaha).

Ji bo ceribandina hîpotezê, skrîptek Python hate nivîsandin ku daneyên têketinê vediguhezîne pakêtên protokola MIDI. Û rêbaz xebitî: têketinê passwd? #0000 têketin Baş e > arîkarî arîkariya derketinê? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m NAVNÎŞAN DATA m/b NAVNÎŞAN DATA m/w NAVNÎŞAN DATA m/l DATA NAVNÎŞAN M/l DANÊN NAVNÎŞAN > agahî DevelopName PSR-E433Name PSR-E3341 Deve 3341 Daneyên çêbikin & dem 16 MAY 2012 19:00:57 J/E Îngilîzî hilbijêre >

Di dema şandina fermana "alîkarî" de, di nav tiştên din de, fermanên ji bo guhertina naveroka bîranînê jî heye. Bi karanîna van fermanan, gengaz bû ku koda keyfî li bîranînê were barkirin û kontrolê jê re were veguheztin, li şûna nîşana li ser stûnê ku piştî qedandina pêvajoya fermanê vedigere, vedigere. Wekî ceribandinek, serîlêdanek hêsan a ku bi zimanê meclîsê hatî nivîsandin, li cîhek bîranînê ya ku nayê bikar anîn hate danîn ku rêzika "HeloWrld" ji nîşanek ekranek LCD ya 8-karakterî derdixe. Bername wekî pelek MIDI ya birêkûpêk hate format kirin, ku tenê hewce bû ku ji cîhaz re were veguheztin.

Di synthesizer Yamaha de şêla fermana veşartî ya ku destûr dide darvekirina kodê bi riya MIDI-yê

Piştî vê yekê, xebat li ser lêkolîna taybetmendiyên derana grafîkê li ser ekranek LCD dest pê kir, ku bi amadekirina kodek ku naveroka pixelê ya keyfî di qada karakterê de derdixe, hevdem digel lîstina vîdyoya Bad Apple li ser amûrek derveyî (vîdyoya bi xwenîşandan) dest pê kir ).

Di synthesizer Yamaha de şêla fermana veşartî ya ku destûr dide darvekirina kodê bi riya MIDI-yê
Vîdyoyê lîstin


Source: opennet.ru
Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster