viernes, 28 de diciembre de 2012

Destripando Tamagotchis

Natalie Silvanovich, al final de la charla admitía que no pasará a la historia como una defensora de los derechos de los tamagotchis, ya que admitía que probablemente una decena habrían sido destripados mientras intentaba averiguar cómo funcionaban.
Los tamagotchis, para aquellos que no estén al tanto, son unas mascotas virtuales japonesas que deben se alimentadas y cuidadas (sin las desventajas de las mascotas reales), pero que desde que estuvieron de moda han evolucionado mucho porque ahora no tienen sólo que ser cuidadas, sino que tienen que tener amigos con los que intercambiar regalos virtuales, una educacion y un trabajo, en suma son unos Tamagotchi 2.0 sociales (que desarrollan a través de comunicación infrarroja -- IR).
Por tanto, la última versión, el TamaTown Tama-GO tiene además de interfaz IR, la posibilidad de acoplar unas figuras que desbloquean la posibilidad de jugar a nuevos juegos.

Así que en lugar de dedicarse a cacharrear en el extremo más potente de las video consolas, Natashenka se dedicó a ese otro extremo de la ultrabaja potencia... pero aun así no es fácil superar las barreras del secreto industrial.
El primer paso de éxito fue destripar el protocolo IR, relativamente fácil con Arduino, pero sobre lo que no se ha entrado en mucho detalle en la charla (aunque hay más detalle en la presentación). Con esto se puede conseguir tener muchos amigos que te dan ricos regalos, lo cual contribuye mucho a la felicidad de tu tamagotchi (es algo social, claro). Y averiguar que el género de los tamagotchis está representado por tres bits, uno que indica la apariencia general, otro que indica lo que aparece en las estadísticas.
Pero aún así, sin la posibilidad de modificar el código, no es posible descifrar todo lo que se envía en el protocolo y otros objetivos como convertirlo en un TV-B-Gotchi o ir por ahí fertilizando otros Tamagotchis (sí, también tienen la posibilidad de reproducción), así que el siguiente objetivo requería ataques hardware y perder la garantía.
Por dentro un Tama-Go tiene una única placa base con una EEPROM y un microcontrolador por detrás, bajo un gran pegote de epoxy.
El primer paso para poder hacer algo es identificar el integrado que hay debajo del peogtoe. Tras probar varios métodos (algunos bastante peregrinos como usar palillos de comida china) para quitar la epoxy, al final pudo contar con la ayuda de Travis Goodspeed que quitó el epoxy mediante ácido nítrico. Pero eso era sólo el primer paso, porque una vez eliminado el epoxy y con acceso al diagrama del dispositivo no fue posible tener ninguna idea de qué dispositivo era, a pesar de la ayuda de miles de internautas que a su vez no tenían ni idea.
Así que no hubo más remedio que recurrir a los foros de Tamagotchi "serios", en los que superando su limitación de no hablar japonés, consiguió por fin la primera pista útil: parecía que el fabricante del chip era un fabricante japonés llamado General Plus (GP). Y tras doscientas datasheets de General Plus, encontró un datasheet que encajaba con la disposición de los contactos del chip: el GPLB5X, un controlador 6502 (que algunos pueden recordar como el motor del Commodore 64 y muchos otros equipos de los 80).
Una de las principales limitaciones de este disponisitivo a la hora de cacharrear con él es que la ROM no es programable, está fijada en el proceso de fabricación. Así que el siguiente paso es intentar descargar el contenido de la ROM.
Aunque para este paso en las especificaciones se menciona que GP tiene un programa de prueba para verificar que la fabricación del chip ha sido correcta, Natalia se ha cansado de pedir (incluso en el CCC) si alguien le puede pasar el programa de verificación... sin éxito. Así que ha tenido que recurrir a otros métodos. El primero ha sido atacar a través de la EEPROM.
Por ahí ha habido poco recorrido, porque la EEPROM contiene muy pocos datos, muy parecidos a los del protocolo IR, y prácticamente cualquier cambio conduce al rearranque del tamagotchi. No contiene el estado del tamagotchi, y aunque se puede hacer que con ello se bloquee, sin más datos de la ROM es difícil hacer nada...
El último paso ha sido jugar con las figuras que se acoplan al Tamagotchi. Hay dos tipos de figuras que se pueden acoplar al tamagotchi, unas gratuitas que simplemente contienen conexiones entre contactos (previsiblemente formando identificadores), y otras más complejeas que también tienen una ROM. El hecho de que también las figuras con ROM también tengan contactos le hizo llegar a la conclusión de que la ROM de todas las figuras es la misma, pero se cambia la figura que representa a base de los contactos.
Y aquí si que tuvo más éxito, ya que rápidamente pudo identificar que era una ROM SPI, aunque General Plus no utiliza el protocol SPI estándar, pudo simular la variante utilizando su Arduino para descargarse la ROM. Desafortunadamente la ROM no incluye código, sólo imágenes y datos.
En este punto averiguó que el funcionamiento del código es muy simple, ya que en el juego todo son imágenes (incluido el texto) y que además no hay ningún tipo de composición (si un tamagotchi puede tener una pelota, hay que tener una imagen con y sin pelota para todos ellos).
Para esta ROM externa ya se puede tener la posibilidad mayor de hacking, ya que se puede sustituir la ROM por otra, y eso es lo que hizo. Aunque no fue del todo sencillo, ya que primero tuvo que conseguir un simulador que fuese suficientemente rápido, y luego un más rápido todavía ya que la CPU lee unas partes de la ROM más rápidamente que otras.
Una vez simulada la ROM, pudo ver las interacciones de la CPU con la ROM, que confirman la simplicidad del código, por ejemplo la CPU sólo pide 50 bytes de datos que no son imágenes de la ROM. De esos, solo uno determina el juego que desbloquea la figura, y aun así ha probado que solo hay unos 25 juegos. Pero al final hasta ahí es donde ha podido llegar, sin acceso a la ROM interna completa... que no es poco.

No hay comentarios:

Publicar un comentario