
Ricostruire un protocollo USB morto: i segreti di un palmare svelati da un coltello caldo, un viaggio multidisciplinare per far rivivere un'interfaccia USB dimenticata
Nel 2024, bjiru ha caricato un video sul dispositivo portatile ME2, un giocattolo prodotto intorno al 2008 che offriva la possibilità di utilizzare l'USB per sincronizzare punti e gemme tra il tuo dispositivo e un mondo online. Il gioco era estremamente di nicchia, quindi nessun software, driver o risorsa era stato archiviato, almeno finché bjiru non si è fatto avanti con il client del gioco online.
Sono il leader di Miuchiz Reborn, uno sforzo iniziato nel 2015 per preservare, fare reverse engineering, emulare e mantenere l'accessibilità di un gioco simile a questo, con una parte online e una parte portatile collegate tramite USB. A causa della simile epoca e tipo di gioco, il ME2 era già stato portato alla mia attenzione dalla comunità di Miuchiz nel 2018, poiché pensavano (erroneamente) che potessero condividere somiglianze architetturali. Nonostante fossi a conoscenza dell'esistenza del dispositivo da anni, il video di bjiru mi ha finalmente spinto a iniziare la ricerca su di esso.
I miei sforzi iniziali furono spesi esclusivamente per ricreare il server necessario per rendere di nuovo funzionante la copia del gioco per computer di bjiru, ma lungo il percorso, la mia attenzione è inevitabilmente scivolata verso il portatile. Una ricreazione del gioco online non potrebbe mai essere completa senza il meccanismo per sincronizzare i tuoi punti da e verso il dispositivo. Questa comunicazione tra il tuo computer e il dispositivo ME2 era la principale caratteristica del gioco, dopotutto. Immaginavo che la mia esperienza precedente con i dispositivi portatili Miuchiz mi avrebbe aiutato a districare velocemente qualsiasi rituale di comunicazione si aspettassero... a patto di riuscire a ottenere del codice da reverse engineering.
La mia curiosità richiedeva il sacrificio di ME2. eBay richiedeva il sacrificio di denaro. Ben presto, questi esemplari giacevano davanti a me.

Sono unità piccole con solo un paio di pulsanti e una porta mini-USB femmina. Nella scatola è incluso un cavo, ma manca qualsiasi disco per software e driver. Quella porta USB sarebbe stata il modo per sincronizzare i punti tra il computer e il portatile, ma quando ho intrapreso lo stesso viaggio per il dispositivo portatile Miuchiz, ho ottenuto pieno accesso alla sua memoria flash facendo reverse engineering del funzionamento del software Windows associato. Senza tale software per il ME2, non c'è nulla da reverse engineering per capire come comunicare con il dispositivo. Anche dopo aver controllato la Wayback Machine e bjiru, a quanto pare non c'erano copie sopravvissute del software utilizzato per parlare con questi oggetti. Penso si chiamasse ME2 Desktop Buddy, ma quell'applicazione era separata dal client di gioco recuperato da bjiru. Il portatile si presenta come un dispositivo di archiviazione rimovibile, ma i contenuti ti indirizzano online per scaricare il gioco ME2, che non è più disponibile.
La strada da percorrere è chiara, poiché rimane solo un'opzione: aprire l'hardware.

Il firmware principale del ME2 è memorizzato su un SST39VF3201, un chip flash da 2 megaparole (4 megabyte, con unità indirizzabili a 16 bit). Il microcontrollore principale è... sotto un duro glob-top di epossidica. Questa è nota come chip-on-board (CoB) e di solito è una misura di risparmio sui costi, ma ha l'effetto collaterale di nascondere qualsiasi informazione identificativa sul circuito integrato all'interno. Un chip con package normale di solito ha marcature che lo identificano, proprio come fa il chip flash. Poiché i microcontrollori usati in dispositivi come questi spesso contengono una ROM interna, è possibile che parti o tutto il codice USB che volevo reverse engineering fossero in quella ROM. Avere quel codice in ROM ha il vantaggio di permettere il recupero di un dispositivo brickato o, se il produttore lo sceglie, di flashato dopo l'assemblaggio. Quella ROM esisteva all'interno di un chip che non avevo modo di identificare.
Recuperare i dati dal chip flash è un processo semplice e ben documentato: dissaldare il chip, metterlo in un programmatore flash standard come quelli di XGecu, e usarlo per estrarre i contenuti. Se ho bisogno anche di informazioni dalla ROM del microcontrollore, allora è meno semplice, ma comunque fattibile per un dispositivo come questo dove la protezione è improbabile. In passato, ho aggiunto codice alla flash SPI su un Tamagotchi Pix che avrebbe copiato la sua boot ROM nello spazio libero del chip flash, che poteva poi essere letto dallo stesso programmatore flash che ho usato per iniettare il codice. Tuttavia, in quel caso, il microcontrollore era adeguatamente incapsulato e aveva le informazioni del modello stampate sopra, quindi ho potuto trovare il suo datasheet per sapere quale set di istruzioni usava e dove si trovava la sua ROM nello spazio di memoria. A questo punto, non avevo nessuna di queste informazioni per il misterioso chip-on-board del ME2.
Nonostante le incertezze, l'unica strada apparente da qui è dissaldare il chip flash. Avevo anche acquistato alcuni socket per il chip flash nella speranza di poterne saldare uno al PCB del portatile. Questo mi avrebbe permesso di riprogrammare il ME2 e iterare rapidamente se avessi avuto bisogno di scrivere codice per estrarre la ROM interna dal microcontrollore. Sfortunatamente, non sono riuscito a rimuovere il chip flash con un saldatore senza danneggiarlo. Per risolvere questo problema di abilità dopo molti tentativi falliti, ho invece acquistato una stazione di rielaborazione (essenzialmente una pistola termica che afferma di poter raggiungere 500 °C) e ho rimosso il chip sciogliendo la saldatura con aria calda. Questo mi ha permesso di estrarre i contenuti della flash senza problemi, ma ha rivelato che usare effettivamente i socket che avevo acquistato sarebbe andato oltre le mie capacità. Non solo avrei dovuto saldare tutti i 48 minuscoli pin sul PCB, ma anche farlo abbastanza velocemente da evitare di fondere la plastica dei socket. Non avevo né gli strumenti né l'abilità per gestirlo, quindi se avessi avuto bisogno della ROM, avrei dovuto trovare un'altra strategia.
Il dump sembrava buono, comunque, e usando uno strumento che avevo già costruito specificamente per trovare bitmap non compressi in dump di firmware, ho potuto trovare immagini che sarebbero state normalmente visualizzate sul dispositivo:

Ho ottenuto un dump del firmware dal chip flash, ma prima di poter fare un serio reverse engineering, ho bisogno almeno di sapere quale set di istruzioni esegue il dispositivo. Non c'erano marcature sull'hardware stesso, quindi si sarebbe dovuto indovinare. Ho provato ad analizzare il codice in Ghidra, un disassembler, decompiler e incubo traballante open source che mi tiene occupato, con praticamente ogni tipo di specifica di processore con cui veniva fornito. Qualche variante ARM? Qualche discendente 6502? MIPS? Letteralmente qualsiasi altra cosa supportata da Ghidra? Tutto un sonoro 'no'.