Anna Antonenko, koja razvija ugrađene sisteme iu slobodno vrijeme razvija operativni sistem BOSS (BEAM-based Operating System with Security), objavila je rezultate obrnutog inženjeringa Yamaha PSR-E433 muzičkog sintisajzera. Tokom obavljenog rada, u sintisajzeru je identifikovan zamućeni interfejs ljuske, što je omogućilo da se organizuje izvršavanje njegovog koda na nivou firmvera. Shell interfejsu se pristupa slanjem MIDI paketa koji sadrže SysEx poruke, koje se mogu prenijeti kada je sintisajzer povezan preko USB-a. Informacije o čipu i firmveru dobijenim tokom obrnutog inženjeringa, kao i primeri koda i ispisivanja grešaka, objavljuju se na GitHub-u.
Interes za obrnuti inženjering pojavio se prije nekoliko godina, nakon što je Anna odlučila očistiti unutrašnjost sintisajzera od prašine i istovremeno zadovoljiti svoju znatiželju vezanu za želju da vidi unutrašnjost uređaja. Ploča je sadržavala YAMAHA SWL01U čip, o čemu se detaljne informacije nisu mogle naći na internetu. Prije nekoliko mjeseci, Anna je naišla na priručnik za sličan model sintisajzera, koji je sadržavao pinout ovog čipa. Anna je ponovo rastavila uređaj i započela eksperimente, koristeći pinove dostupne na ploči za JTAG interfejs za otklanjanje grešaka i UART port.

Koristeći OpenOCD debugger, povezivanje na JTAG i eksperimente, otkriveno je da ploča koristi čip sa ARM7TDMI procesorskom jezgrom. Nakon što smo proučili raspored memorije u debugger-u, uspjeli smo izbaciti sadržaj firmvera koji se nalazi u ROM-u i Flash memoriji. Nakon toga, slike firmvera su analizirane u paketu obrnutog inženjeringa Ghidra.
Prilikom pregledavanja string podataka ekstrahovanih iz firmvera, primećen je skup linija (“help”, “info”, “ver”, “logout” itd.) koji podsećaju na komande ljuske. Ispitivanje pokazivača na ove linije otkrilo je kod koji poziva funkcije za obradu naredbi, podsjećajući na interfejs za prijavu i komandnu ljusku. Takođe je otkriveno da je za aktiviranje ljuske obezbeđena komanda "login", kojoj je potrebno proslediti lozinku "#0000". void shell_run_command(char* command_input) { if (shell_login_state == 0) { if (shell_compare_command(command_input, "login") == 0) { shell_ask_passwd(); // ispisuje "passwd? " shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command(command_input, "#0000") == 0) { shell_login_ok(); // ispisuje "login OK" shell_login_state = 2; } else { shell_print("Greška lozinke\r"); shell_login_state = 0; } } else { // stvarno pokreni komandu } }
Dalje ispitivanje firmvera pokazalo je da se komande obrađuju u serijama, uvijek počevši sa istih 8 bajtova podataka i završavajući kodom 0xf7. Budući da se eksterna interakcija sa sintisajzerom vrši samo preko MIDI-ja, a MIDI specifikacija pruža poseban tip usluge SysEx poruka, pretpostavljalo se da se to može koristiti za prijenos komandi. Nagađanje je dodatno ojačalo da su SysEx poruke i paketi koje je raščlanila školjka počinjali jednim kodom, 0xf0, nakon čega slijedi ID proizvođača 0x43 (Yamaha).
Da bi se testirala hipoteza, napisana je Python skripta koja je prevela ulazne podatke u pakete MIDI protokola. I metoda je radila: login passwd? #0000 prijava OK > pomoć odjava pomoć ? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m PODACI O ADRESI m/b PODACI O ADRESI m/w PODACI O ADRESI m/l PODACI O ADRESI > info DevelopName PSR-E433 DevelopNumber #3341 # Glavni DevelopNumber 3341 Napravite podatke i vrijeme 16. MAJ 2012. 19:00:57 J/E Odaberite engleski >
Prompt koji se prikazuje prilikom slanja naredbe "help" uključuje, između ostalog, komande za promjenu sadržaja memorije. Koristeći ove komande, bilo je moguće učitati proizvoljni kod u memoriju i prenijeti kontrolu na njega, zamjenjujući pokazivač na steku koji se koristi za vraćanje nakon završetka obrade komande. Kao eksperiment, jednostavna aplikacija napisana asemblerskim jezikom postavljena je u neiskorišteno memorijsko područje koje šalje string “HeloWrld” na LCD indikator od 8 znakova. Program je formatiran kao obična MIDI datoteka, koju je samo trebalo prenijeti na uređaj.

Nakon toga je započeo rad na proučavanju karakteristika grafičkog izlaza na LCD displeju, koji je kulminirao pripremom koda koji emituje proizvoljni sadržaj piksela u područje znakova, sinhrono sa reprodukcijom videa Bad Apple na eksternom uređaju (video sa demonstracijom ).


izvor: opennet.ru
