Si Anna Antonenko, kinsa nag-ugmad sa mga embedded system ug sa iyang libre nga oras nagpalambo sa BOSS (BEAM-based Operating System with Security) operating system, nagpatik sa mga resulta sa reverse engineering sa Yamaha PSR-E433 music synthesizer. Atol sa trabaho nga gihimo, ang usa ka obfuscated shell interface giila sa synthesizer, nga nagpaposible sa pag-organisar sa pagpatuman sa code niini sa lebel sa firmware. Ang interface sa kabhang ma-access pinaagi sa pagpadala sa mga pakete sa MIDI nga adunay mga mensahe sa SysEx, nga mahimong mapasa kung ang synthesizer konektado pinaagi sa USB. Ang kasayuran bahin sa chip ug firmware nga nakuha sa panahon sa reverse engineering, ingon man mga pananglitan sa code ug mga debugging dump, gi-post sa GitHub.
Ang interes sa reverse engineering mitumaw pipila ka tuig na ang milabay, human nakahukom si Anna nga limpyohan ang sulod sa synthesizer gikan sa abog ug sa samang higayon makatagbaw sa iyang pagkamausisaon nga may kalabutan sa tinguha nga makita ang sulod sa device. Ang board adunay sulud nga YAMAHA SWL01U chip, nga ang detalyado nga kasayuran dili makit-an sa Internet. Pipila ka bulan ang milabay, nakit-an ni Anna ang usa ka manwal alang sa parehas nga modelo sa synthesizer, nga adunay sulud nga pinout sa kini nga chip. Gi-disassemble na usab ni Anna ang device ug gisugdan ang mga eksperimento, gamit ang mga pin nga anaa sa board para sa JTAG debugging interface ug sa UART port.

Gamit ang OpenOCD debugger, nagkonektar sa JTAG ug mga eksperimento, nakit-an nga ang board naggamit sa usa ka chip nga adunay ARM7TDMI processor core. Natun-an ang layout sa memorya sa debugger, nakahimo kami sa pagdiskarga sa mga sulod sa firmware nga nahimutang sa ROM ug Flash memory. Ang mga imahe sa firmware gisusi dayon gamit ang Ghidra reverse engineering package.
Samtang nagtan-aw sa string data nga gikuha gikan sa firmware, usa ka hugpong sa mga linya ("tabang", "info", "ver", "logout", ug uban pa) ang namatikdan nga susama sa mga sugo sa shell. Ang pagsusi sa mga punto niini nga mga linya nagpakita sa code nga nagtawag sa mga function sa pagproseso sa mga sugo, nga nagpahinumdom sa usa ka login interface ug usa ka command shell. Gipadayag usab nga aron ma-aktibo ang kabhang, gihatag ang "login" nga mando, diin kinahanglan nimo nga ipasa ang password nga "#0000". void shell_run_command(char* command_input) {kon (shell_login_state == 0) {kon (shell_compare_command(command_input, "login") == 0) {shell_ask_passwd(); // nag-imprinta "passwd? " shell_login_state = 1; } } lain kon (shell_login_state == 1) {kon (shell_compare_command(command_input, "#0000") == 0) {shell_login_ok(); // prints "login OK" shell_login_state = 2; } lain pa { shell_print("Passwd Error\r"); shell_login_state = 0; } } lain {/ // aktuwal nga padagana ang sugo } }
Ang dugang nga pagsusi sa firmware nagpakita nga ang mga sugo giproseso sa mga batch, kanunay nga nagsugod sa parehas nga 8 bytes sa datos ug natapos sa code 0xf7. Tungod kay ang eksternal nga interaksyon sa synthesizer gihimo lamang pinaagi sa MIDI, ug ang detalye sa MIDI naghatag usa ka espesyal nga tipo sa serbisyo sa mga mensahe sa SysEx, gituohan nga kini magamit sa pagpadala mga mando. Ang dugang nga pagpalig-on sa panaghap mao nga ang SysEx nga mga mensahe ug mga pakete nga gi-parse sa shell nagsugod sa usa ka code, 0xf0, gisundan sa manufacturer ID 0x43 (Yamaha).
Aron sulayan ang pangagpas, usa ka script sa Python ang gisulat nga naghubad sa data sa input sa mga pakete sa MIDI protocol. Ug ang pamaagi nagtrabaho: login passwd? #0000 login OK > tabang logout tabang ? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m ADDRESS DATA m/b ADDRESS DATA m/w ADDRESS DATA m/l ADDRESS DATA m/l ADDRESS DATA > info DevelopName PSR-E433 DevelopNumber #3341 Main DevelopNumber # 3341 Paghimog datos ug oras MAYO 16 2012 19:00:57 J/E Pilia ang English >
Ang prompt nga gipakita sa pagpadala sa "tabang" nga sugo naglakip, lakip sa ubang mga butang, mga sugo alang sa pag-usab sa sulod sa memorya. Gamit kini nga mga sugo, posible nga i-load ang arbitraryong code sa memorya ug ibalhin ang kontrol niini, ilisan ang pointer sa stack nga gigamit sa pagbalik pagkahuman sa pagproseso sa command. Ingon usa ka eksperimento, usa ka yano nga aplikasyon nga gisulat sa sinultian nga asembliya gibutang sa usa ka wala magamit nga lugar sa panumduman nga nagpagawas sa string nga "HeloWrld" sa usa ka 8-karakter nga timailhan sa pagpakita sa LCD. Ang programa gi-format ingon usa ka regular nga MIDI file, nga kinahanglan ra nga ibalhin sa aparato.

Pagkahuman niini, nagsugod ang pagtrabaho sa pagtuon sa mga bahin sa mga graphic output sa usa ka LCD display, nga nagtapos sa pag-andam sa code nga nagpagawas sa arbitraryong sulud sa pixel sa lugar sa karakter, nga dungan sa pag-playback sa Bad Apple nga video sa usa ka eksternal nga aparato (video nga adunay demonstrasyon. ).


Source: opennet.ru
