
Reconstruindo um Protocolo USB Morto: Os Segredos de um Portátil Desbloqueados por uma Faca Quente, uma jornada multidisciplinar para reviver uma interface USB esquecida
Em 2024, bjiru publicou um vídeo sobre o dispositivo portátil ME2, um brinquedo produzido por volta de 2008 que apresentava a capacidade de usar USB para sincronizar pontos e gemas entre o seu dispositivo e um mundo online. O jogo era extremamente nichado, então nenhum software, drivers ou ativos foram arquivados, pelo menos até bjiru aparecer com o cliente do jogo online.
Sou o líder do Miuchiz Reborn, um esforço que começou em 2015 para preservar, fazer engenharia reversa, emular e manter a acessibilidade de um jogo similar a este, com uma parte online e uma parte portátil conectada via USB. Devido à época e ao tipo de jogo semelhantes, o ME2 já havia sido trazido à minha atenção pela minha comunidade Miuchiz em 2018, pois eles pensavam (equivocadamente) que poderiam compartilhar semelhanças arquitetônicas. Apesar de eu estar ciente da existência do dispositivo há anos, o vídeo de bjiru finalmente me levou a iniciar a pesquisa sobre ele.
Meus esforços iniciais foram dedicados exclusivamente a recriar o servidor necessário para tornar funcional a cópia do jogo de computador de bjiru, mas ao longo do caminho, minha atenção inevitavelmente se desviou para o portátil. Uma recriação do jogo online certamente nunca poderia ser completa sem o mecanismo para sincronizar seus pontos de e para o dispositivo. Essa comunicação entre seu computador e o dispositivo ME2 era, afinal, o principal truque do jogo. Imaginei que minha experiência anterior com os dispositivos portáteis Miuchiz me ajudaria a desvendar rapidamente qualquer ritual de comunicação que eles esperassem... desde que eu conseguisse algum código para fazer engenharia reversa.
Minha curiosidade exigiu o sacrifício de ME2s. O eBay exigiu o sacrifício de dinheiro fiduciário. Em pouco tempo, esses espécimes estavam diante de mim.

Estas são unidades pequenas com apenas alguns botões e uma porta mini-USB fêmea. Há um cabo incluído na caixa, mas falta qualquer disco com software e drivers. Essa porta USB seria a maneira de sincronizar pontos entre seu computador e o portátil, mas quando embarquei na mesma jornada para o dispositivo portátil Miuchiz, obtive acesso total à sua memória flash fazendo engenharia reversa de como o software Windows que o acompanhava funcionava. Sem esse software para o ME2, não há nada para fazer engenharia reversa para descobrir como se comunicar com o dispositivo. Mesmo após verificar o Wayback Machine e bjiru, aparentemente não há cópias sobreviventes do software que era usado para falar com esses dispositivos. Acho que se chamava ME2 Desktop Buddy, mas esse aplicativo era separado do cliente de jogo que bjiru recuperou. O portátil se expõe como um dispositivo de armazenamento removível, mas o conteúdo apenas direciona você para baixar o jogo ME2 online, que não está mais disponível.
O caminho a seguir é claro, pois resta apenas uma opção: abrir o hardware.

O firmware principal do ME2 está armazenado em um SST39VF3201, um chip flash de 2 megapalavras (4 megabytes, com unidades endereçáveis de 16 bits). O microcontrolador principal está... sob uma camada dura de epóxi glob-top. Isso é conhecido como chip-on-board (CoB) e geralmente é uma medida de redução de custos, mas tem o efeito colateral de ocultar qualquer informação de identificação sobre o circuito integrado interno. Um chip encapsulado normalmente terá marcações que o identificam, assim como o chip flash tem. Como os microcontroladores usados em dispositivos como esses geralmente contêm uma ROM interna, é possível que partes ou todo o código USB que eu queria fazer engenharia reversa estivesse nessa ROM. Ter esse código na ROM tem o benefício de permitir a recuperação de um dispositivo brickado ou, se o fabricante optar por fazer isso, programar o dispositivo após a montagem. Essa ROM existiria dentro de um chip que eu não tinha como identificar.
Recuperar os dados do chip flash é um processo direto e bem documentado: dessoldar o chip, colocá-lo em um programador flash padrão como os da XGecu e usá-lo para extrair o conteúdo. Se eu também precisasse de informações da ROM do microcontrolador, isso seria menos direto, mas ainda é viável para um dispositivo como este, onde a proteção é improvável. No passado, adicionei código ao flash SPI de um Tamagotchi Pix que copiava sua ROM de inicialização para o espaço livre no chip flash, que podia então ser lido pelo mesmo programador de flash que usei para injetar o código. No entanto, nesse caso, o microcontrolador estava devidamente encapsulado e tinha informações do modelo impressas, então pude encontrar sua ficha técnica para saber qual conjunto de instruções usava e onde sua ROM estava no espaço de memória. Neste ponto, eu não tinha nenhuma dessas informações para o misterioso chip-on-board do ME2.
Apesar das incertezas, o único caminho aparente a partir daqui é dessoldar o chip flash. Também comprei alguns soquetes para o chip flash na esperança de conseguir soldar um na placa de circuito do portátil. Isso me permitiria reprogramar o ME2 e iterar rapidamente se eu precisasse escrever código para extrair a ROM interna do microcontrolador.
Infelizmente, não consegui retirar o chip flash com um ferro de solda sem danificar o chip. Para resolver essa questão de habilidade após várias tentativas fracassadas, comprei uma estação de retrabalho (efetivamente uma pistola de ar quente que afirma ser capaz de atingir 500 °C) e removi o chip derretendo a solda com ar quente. Isso me permitiu extrair o conteúdo do flash sem problemas, mas revelou que usar os soquetes que comprei estava além das minhas capacidades. Não apenas teria que soldar todos os 48 minúsculos pinos na placa de circuito, como também teria que fazê-lo rápido o suficiente para evitar derreter o plástico dos soquetes. Não tinha nem as ferramentas nem a habilidade para lidar com isso, então, se precisasse da ROM, precisaria de outra estratégia.Se um utilizador com demasiado tempo livre (e talvez uma pistola de calor e uma faca) tiver a ideia de tentar sondar como o dispositivo funciona, pode acabar por solicitar ao dispositivo que programe num setor que está além da capacidade do seu chip flash. O processador está ciente de cada passo, mas o chip flash não. Em vez disso, esse ciclo final de comando falha completamente o espaço de endereços do chip flash, então o flash aguarda ansiosamente qual valor deve ser programado onde.
Processador: Ei flash! Quero começar a programar outra palavra!
Flash: Alto e claro! A programar 0xAA em 0x5555!
Processador: ...Hã?
Devido aos ciclos de comando dessincronizados, o flash confunde o primeiro ciclo do próximo comando com o último ciclo do comando anterior, e 0xAA é programado em 0x5555. O endereço equivalente para bytes típicos de 8 bits é 0xAAAA, que corresponde ao local onde 0x00AA foi escrito no meu dump de flash.
Isso poderia potencialmente ser usado para uma escrita arbitrária, desde que você esteja disposto a corromper aquela palavra específica na flash, mas o dispositivo já está suficientemente pwned e não estou interessado em brickar mais unidades. Pode ser possível salvar esses dispositivos, já que a engenharia reversa da Embadded ROM também mostrou que ela contém seu próprio manipulador USB e implementações de leitura/programação/apagamento de flash. No entanto, só consegui que a ROM entrasse nesse estado (em vez de inicializar a partir do código flash) uma vez, e nunca mais. Com base na descompilação da ROM, suspeito que possa depender de uma porta GPIO que ficou flutuando, mas não tenho certeza. De qualquer forma, minha missão aqui já estava cumprida.
O resultado final desta travessura é um utilitário de linha de comando que pode:
Isso, juntamente com o código do servidor do jogo e outras pesquisas, está disponível no repositório ME2-Restoration. Como os detalhes de implementação estão disponíveis lá e provavelmente não são interessantes para o leitor típico, detalhes técnicos específicos foram omitidos aqui em favor da descrição de processos e técnicas.
Mais importante ainda, isso demonstra que o software original do lado do PC não é estritamente necessário para entender ou preservar sua funcionalidade. Mesmo com o software oficial perdido no tempo, foi possível abrir a caixa preta que era o ME2 e reconstruir seu protocolo a partir de seu hardware e firmware, restaurando uma interface de outra forma morta em algo utilizável novamente. Isso não se limita a interfaces como USB, também. Leia como recriei um servidor de licenças há muito morto para trazer de volta à vida um editor vetorial de uma década atrás.
Esta é também a primeira vez que decapsulo um circuito integrado, então, para lhe prestar o respeito que merece, comprei um microscópio melhor e desde então contribuí com a foto de maior qualidade do GPL162002A/B para o siliconprawn, pré-visualizada aqui com resolução reduzida para ser mais amigável à web:
