Թաքնված հրամանի վահանակ Yamaha սինթեզատորում, որը թույլ է տալիս կոդի կատարումը MIDI-ի միջոցով

Աննա Անտոնենկոն, ով մշակում է ներկառուցված համակարգեր և իր ազատ ժամանակ զարգացնում է BOSS (BEAM-ի վրա հիմնված Օպերացիոն համակարգ անվտանգության ապահովմամբ) օպերացիոն համակարգը, հրապարակել է Yamaha PSR-E433 երաժշտական ​​սինթեզատորի հակադարձ ինժեներիայի արդյունքները։ Կատարված աշխատանքի ընթացքում սինթեզատորում հայտնաբերվել է խճճված ինտերֆեյս, որը հնարավորություն է տվել կազմակերպել դրա կոդի կատարումը որոնվածի մակարդակով: Shell ինտերֆեյսը հասանելի է SysEx հաղորդագրություններ պարունակող MIDI փաթեթներ ուղարկելու միջոցով, որոնք կարող են փոխանցվել, երբ սինթեզատորը միացված է USB-ի միջոցով: Հակադարձ ճարտարագիտության ընթացքում ստացված չիպի և որոնվածի մասին տեղեկությունները, ինչպես նաև կոդերի օրինակները և վրիպազերծման աղբարկղերը տեղադրվում են GitHub-ում:

Հակադարձ ճարտարագիտության նկատմամբ հետաքրքրությունը ծագեց մի քանի տարի առաջ, այն բանից հետո, երբ Աննան որոշեց մաքրել սինթեզատորի ներսը փոշուց և միևնույն ժամանակ բավարարել իր հետաքրքրասիրությունը՝ կապված սարքի ներսը տեսնելու ցանկության հետ: Տախտակը պարունակում էր YAMAHA SWL01U չիպ, որի մասին մանրամասն տեղեկություններ չկարողացան գտնել համացանցում։ Մի քանի ամիս առաջ Աննան հանդիպեց նմանատիպ սինթեզատորի մոդելի ձեռնարկին, որը պարունակում էր այս չիպի պինաուտը: Աննան կրկին ապամոնտաժեց սարքը և սկսեց փորձերը՝ օգտագործելով տախտակի վրա առկա կապերը JTAG կարգաբերման ինտերֆեյսի և UART պորտի համար:

Թաքնված հրամանի վահանակ Yamaha սինթեզատորում, որը թույլ է տալիս կոդի կատարումը MIDI-ի միջոցով

Օգտագործելով OpenOCD կարգաբերիչը, միանալով JTAG-ին և փորձերին, պարզվեց, որ տախտակն օգտագործում է ARM7TDMI պրոցեսորային միջուկով չիպ: Ուսումնասիրելով հիշողության դասավորությունը կարգաբերիչում, մենք կարողացանք բեռնաթափել ROM-ում և Flash հիշողության մեջ տեղակայված որոնվածի բովանդակությունը: Ապամոնտաժային ծրագրերի պատկերները վերլուծվել են Ghidra հակադարձ ինժեներական փաթեթի միջոցով:

Որոնվածից արդյունահանված լարային տվյալները դիտելիս նշվեց մի շարք տողեր («օգնություն», «info», «ver», «logout» և այլն), որոնք նման են shell հրամաններին: Այս տողերի ցուցիչները ուսումնասիրելով՝ բացահայտվեց կոդ, որը կոչում էր գործառույթներ՝ հրամաններ մշակելու համար՝ հիշեցնելով մուտքի ինտերֆեյս և հրամանի վահանակ: Պարզվել է նաև, որ shell-ն ակտիվացնելու համար տրամադրվում է «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(); // տպում է «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("Passwd Error\r"); shell_login_state = 0; } } else { // իրականում գործարկեք հրամանը } }

Որոնվածի հետագա ուսումնասիրությունը ցույց է տվել, որ հրամանները մշակվում են խմբաքանակով՝ միշտ սկսած նույն 8 բայթ տվյալներից և վերջացրած 0xf7 կոդով: Քանի որ արտաքին փոխազդեցությունը սինթեզատորի հետ իրականացվում է միայն MIDI-ի միջոցով, և MIDI-ի հստակեցումը ապահովում է SysEx հաղորդագրությունների հատուկ ծառայության տեսակ, ենթադրվում էր, որ դա կարող է օգտագործվել հրամաններ փոխանցելու համար: Հետագա ենթադրությունն այն էր, որ SysEx-ի հաղորդագրություններն ու փաթեթները, որոնք վերլուծվում էին shell-ի կողմից, սկսվում էին մեկ կոդով՝ 0xf0, որին հաջորդում էր արտադրողի ID 0x43 (Yamaha):

Հիպոթեզը ստուգելու համար գրվել է Python սկրիպտ, որը մուտքագրված տվյալները թարգմանում է MIDI պրոտոկոլային փաթեթների։ Եվ մեթոդն աշխատեց՝ login passwd? #0000 մուտք Լա՞վ > օգնե՞լ դուրս գալու օգնություն: info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m ՀԱՍՑԵ ՏՎՅԱԼՆԵՐԻ m/b ՀԱՍՑԵ ՏՎՅԱԼՆԵՐԻ m/w ՀԱՍՑԵ ՏՎՅԱԼՆԵՐԻ m/l ՀԱՍՑԵ ՏՎՅԱԼՆԵՐԸ > info DevelopName PSR-E433N Deve 3341 Դարձնել տվյալներ և ժամը ՄԱՅԻՍԻ 3341 16 2012:19:00 J/E Ընտրեք անգլերեն >

«Օգնություն» հրամանն ուղարկելիս ցուցադրվող հուշումը, ի թիվս այլ բաների, ներառում էր հիշողության բովանդակությունը փոխելու հրամաններ: Օգտագործելով այս հրամանները՝ հնարավոր եղավ բեռնել կամայական ծածկագիրը հիշողության մեջ և փոխանցել հսկողությունը դրան՝ փոխարինելով ցուցիչը փաթեթի վրա, որն օգտագործվում էր հրամանների մշակման ավարտից հետո վերադառնալու համար: Որպես փորձ, անսամբլի լեզվով գրված մի պարզ հավելված տեղադրվեց չօգտագործված հիշողության տարածքում, որը դուրս է բերում «HeloWrld» տողը 8 նիշանոց LCD էկրանի ցուցիչի վրա: Ծրագիրը ֆորմատավորվել է որպես սովորական MIDI ֆայլ, որը պարզապես անհրաժեշտ էր փոխանցել սարքին։

Թաքնված հրամանի վահանակ Yamaha սինթեզատորում, որը թույլ է տալիս կոդի կատարումը MIDI-ի միջոցով

Դրանից հետո սկսվեց աշխատանքը LCD էկրանի վրա գրաֆիկական ելքի առանձնահատկությունների ուսումնասիրության վրա, որն ավարտվեց կոդի պատրաստմամբ, որը կամայական պիքսելային բովանդակություն դուրս կբերի նիշերի տարածքում՝ համաժամանակ արտաքին սարքում Bad Apple-ի տեսանյութի նվագարկման հետ (տեսանյութ՝ ցուցադրմամբ )

Թաքնված հրամանի վահանակ Yamaha սինթեզատորում, որը թույլ է տալիս կոդի կատարումը MIDI-ի միջոցով
Խաղալ տեսանյութ


Source: opennet.ru
Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster