Dolt kommandoskal i Yamaha-synthesizer som möjliggjorde kodexekvering via MIDI

Anna Antonenko, som utvecklar inbyggda system och pÄ sin fritid utvecklar operativsystemet BOSS (BEAM-based Operating System with Security), publicerade resultaten av reverse engineering av Yamaha PSR-E433 musiksynthesizer. Under det utförda arbetet identifierades ett obfuskerat skalgrÀnssnitt i synthesizern, vilket gjorde det möjligt att organisera exekveringen av dess kod pÄ firmwarenivÄ. SkalgrÀnssnittet nÄs genom att skicka MIDI-paket som innehÄller SysEx-meddelanden, som kan överföras nÀr synthesizern Àr ansluten via USB. Information om chip och firmware som erhÄllits under reverse engineering, samt kodexempel och felsökningsdumpar, lÀggs ut pÄ GitHub.

Intresset för reverse engineering uppstod för flera Är sedan, efter att Anna bestÀmde sig för att rengöra insidan av synthesizern frÄn damm och samtidigt tillfredsstÀlla sin nyfikenhet relaterad till önskan att se insidan av enheten. Kortet innehöll ett YAMAHA SWL01U-chip, om vilket detaljerad information inte kunde hittas pÄ Internet. För ett par mÄnader sedan kom Anna över en manual för en liknande syntmodell, som innehöll pinouten till detta chip. Anna tog isÀr enheten igen och började experimentera med hjÀlp av stiften som finns pÄ kortet för JTAG-felsökningsgrÀnssnittet och UART-porten.

Dolt kommandoskal i Yamaha-synthesizer som möjliggjorde kodexekvering via MIDI

Genom att anvÀnda OpenOCD-debuggern, ansluta till JTAG och experiment, fann man att kortet anvÀnder ett chip med en ARM7TDMI-processorkÀrna. Efter att ha studerat minneslayouten i debuggern kunde vi ladda ner innehÄllet i den fasta programvaran som finns i ROM och Flash-minne. Firmware-bilderna analyserades sedan med Ghidra reverse engineering-paketet.

NÀr man tittade pÄ strÀngdata som extraherades frÄn firmware, mÀrktes en uppsÀttning rader ("hjÀlp", "info", "ver", "logga ut", etc.) som liknar skalkommandon. Genom att undersöka pekarna till dessa rader avslöjades kod som anropade funktioner för att bearbeta kommandon, som pÄminner om ett inloggningsgrÀnssnitt och ett kommandoskal. Det avslöjades ocksÄ att för att aktivera skalet tillhandahÄlls kommandot "login", till vilket du mÄste skicka lösenordet "#0000". void shell_run_command(char* command_input) { if (shell_login_state == 0) { if (shell_compare_command(command_input, "login") == 0) { shell_ask_passwd(); // skriver ut "passwd? " shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command(command_input, "#0000") == 0) { shell_login_ok(); // skriver ut "login OK" shell_login_state = 2; } else { shell_print("Passwd Error\r"); shell_login_state = 0; } } else {// kör faktiskt kommandot } }

Ytterligare granskning av den fasta programvaran visade att kommandon bearbetas i omgÄngar, alltid med samma 8 byte data och slutar med koden 0xf7. Eftersom extern interaktion med synthesizern endast utförs via MIDI, och MIDI-specifikationen tillhandahÄller en speciell servicetyp av SysEx-meddelanden, antogs det att detta kunde anvÀndas för att överföra kommandon. Ytterligare förstÀrkning av gissningen var att SysEx-meddelanden och paket som analyserades av skalet började med en enda kod, 0xf0, följt av tillverkarens ID 0x43 (Yamaha).

För att testa hypotesen skrevs ett Python-skript som översatte indata till MIDI-protokollpaket. Och metoden fungerade: login passwd? #0000 logga in OK > hjÀlp logga ut hjÀlp? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m ADRESSDATA m/b ADRESSDATA m/v ADRESSDATA m/l ADRESSDATA > info FramkallaNamn PSR-E433 UtvecklingsNumber #3341 HuvudutvecklarNumber # 3341 Gör data & tid 16 MAJ 2012 19:00:57 J/E VÀlj engelska >

Uppmaningen som visades nÀr kommandot "hjÀlp" skickades innehöll bland annat kommandon för att Àndra innehÄllet i minnet. Genom att anvÀnda dessa kommandon var det möjligt att ladda godtycklig kod i minnet och överföra kontrollen till det, och ersÀtta pekaren pÄ stacken som anvÀndes för att ÄtervÀnda efter avslutad kommandobearbetning. Som ett experiment placerades en enkel applikation skriven i assemblersprÄk i ett oanvÀnt minnesomrÄde som matar ut strÀngen "HeloWrld" till en 8-teckens LCD-displayindikator. Programmet formaterades som en vanlig MIDI-fil, som bara behövde överföras till enheten.

Dolt kommandoskal i Yamaha-synthesizer som möjliggjorde kodexekvering via MIDI

Efter detta började arbetet med att studera funktionerna för grafikutmatning pÄ en LCD-skÀrm, vilket kulminerade i förberedelserna av kod som matar ut godtyckligt pixelinnehÄll i teckenomrÄdet, synkront med uppspelningen av Bad Apple-videon pÄ en extern enhet (video med demonstration ).

Dolt kommandoskal i Yamaha-synthesizer som möjliggjorde kodexekvering via MIDI
Spela upp video


KĂ€lla: opennet.ru
Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster