Rejtett parancshéj a Yamaha szintetizátorban, amely lehetővé tette a kód futtatását MIDI-n keresztül

Anna Antonenko, aki beágyazott rendszereket fejleszt és szabadidejében a BOSS (BEAM-alapú operációs rendszer biztonsággal) operációs rendszeren dolgozik, közzétette a Yamaha PSR-E433 zenei szintetizátoron végzett reverz mérnöki munkájának eredményeit. Munkája során egy obfuszkált shell interfészt fedezett fel a szintetizátorban, amely lehetővé teszi az egyedi kódfuttatást firmware szinten. A shell interfészhez SysEx üzeneteket tartalmazó MIDI csomagok küldésével lehet hozzáférni, amelyek akkor továbbíthatók, amikor a szintetizátor USB-n keresztül csatlakozik. A reverz mérnöki munka során kapott chip- és firmware-adatok, valamint kódminták és hibakeresési dump-ok elérhetők a GitHubon.

Anna érdeklődése a reverz engineering iránt néhány évvel ezelőtt kezdődött, miután úgy döntött, hogy kitisztítja egy szintetizátor belsejét, és kielégíti a belső szerkezetei iránti kíváncsiságát. A panel egy YAMAHA SWL01U chipet tartalmazott, amelyről nem talált részletes információkat az interneten. Néhány hónappal ezelőtt Anna rábukkant egy hasonló szintetizátormodell kézikönyvére, amely tartalmazta a chip lábkiosztását. Újra szétszerelte az eszközt, és kísérletezni kezdett, a panel lábait használva a JTAG hibakereső interfészhez és az UART porthoz.

Rejtett parancshéj a Yamaha szintetizátorban, amely lehetővé tette a kód futtatását MIDI-n keresztül

Az OpenOCD hibakereső, egy JTAG kapcsolat és némi kísérletezés segítségével kiderült, hogy a kártya egy ARM7TDMI processzormaggal rendelkező chipet használ. A hibakeresőben a memóriaelrendezés vizsgálatával kinyerhettük a ROM-ban és a flash memóriában található firmware tartalmát. A firmware-képeket ezután a Ghidra reverz mérnöki csomaggal elemeztük.

A firmware-ből kinyert karakterlánc-adatok áttekintése során egy sor karakterláncot vettünk észre ("help", "info", "ver", "logout" stb.), amelyek shell parancsokra hasonlítottak. Ezen karakterláncok mutatóinak tanulmányozása lehetővé tette számunkra, hogy olyan kódot találjunk, amely függvényeket hív meg parancsok feldolgozásához, amelyek hasonlítanak a bejelentkezési felületre és a parancs shellre. Azt is felfedeztük, hogy a shell a "login" paranccsal aktiválható, amely a "#0000" jelszó megadását igényli. void shell_run_command(char* command_input) { if (shell_login_state == 0) { if (shell_compare_command(command_input, "login") == 0) { shell_ask_passwd(); // kiírja a "jelszó?" értéket shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command(command_input, "#0000") == 0) { shell_login_ok(); // kiírja a "login OK" értéket shell_login_state = 2; } else { shell_print("Jelszóhiba\r"); shell_login_state = 0; } } else { // a parancs tényleges futtatása } }

A firmware további vizsgálata során kiderült, hogy a parancsok csomagokban kerültek feldolgozásra, amelyek mindig ugyanazzal a 8 bájtos adattal kezdődtek, és a 0xf7 kóddal végződtek. Mivel a szintetizátorral való külső interakció csak MIDI-n keresztül történik, és a MIDI specifikáció egy speciális, SysEx nevű szolgáltatásüzenettípust biztosít, feltételezték, hogy ez használható parancsok továbbítására. Ezt a feltételezést tovább támasztotta alá az a tény, hogy a SysEx üzenetek és a shell által elemzett csomagok mind ugyanazzal a 0xf0 kóddal kezdődtek, amelyet a 0x43 (Yamaha) gyártói azonosító követett.

A hipotézis teszteléséhez egy Python szkriptet írtak, amely a bemeneti adatokat MIDI protokollcsomagokká fordította. És a módszer működött: login passwd? #0000 login OK > help logout help ? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m CÍMDATAK m/b CÍMDATAK m/w CÍMDATAK m/l CÍMDATAK > info DevelopName PSR-E433 DevelopNumber #3341 Main DevelopNumber #3341 Make data & time 2012. május 16. 19:00:57 J/E Válasszon angolt >

A „help” parancs küldésekor megjelenő prompt többek között a memória tartalmának módosítására vonatkozó parancsokat tartalmazott. Ezekkel a parancsokkal tetszőleges kód tölthető be a memóriába, és átvihető oda a parancsfeldolgozás utáni visszatéréshez használt veremmutató lecserélésével. Kísérletként egy egyszerű, assembly nyelven írt alkalmazást helyeztek el a memória egy fel nem használt területén, amely a „HeloWrld” karakterláncot jelenítette meg egy 8 karakteres LCD kijelzőn. A programot szabványos MIDI fájlként implementálták, amelyet egyszerűen át kellett vinni az eszközre.

Rejtett parancshéj a Yamaha szintetizátorban, amely lehetővé tette a kód futtatását MIDI-n keresztül

Ezt követően megkezdődött az LCD kijelzőn megjelenő grafikák jellemzőinek tanulmányozása, amelynek eredményeként olyan kódot készítettek, amely tetszőleges pixeltartalmat jelenít meg a karakterterületen, szinkronban a Bad Apple videó külső eszközön történő lejátszásával (videó bemutatóval).

Rejtett parancshéj a Yamaha szintetizátorban, amely lehetővé tette a kód futtatását MIDI-n keresztül
Play Video


Forrás: opennet.ru
Vásároljon megbízható tárhelyet DDoS védelemmel, VPS VDS szerverekkel rendelkező webhelyekhez 🔥 Vásároljon megbízható weboldal tárhelyet DDoS védelemmel, VPS VDS szerverekkel | ProHoster