Autor Tema: Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).  (Leído 296679 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Rockman

  • Con experiencia
  • ***
  • Mensajes: 1281
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1035 en: 12 de Agosto de 2014, a las 09:26 horas »
Gracias Andreas por explicarnos un poco como fue el trabajo de desencriptar el Music Ball. Haces parecer que tu trabajo es sencillo pero para el resto de mortales no lo es.

Para los curiosos que no quieran liarse a compilar y quieran probar el Music Ball ya en estado jugable, que sepais que Haze acaba de publicar en su blog una versión de Mame/UME con las ultimas actualizaciones añadidas entre las que incluye el trabajo de Andreas.

http://mamedev.emulab.it/haze/2014/08/11/ume-0-154ex1/

Mucha gracias maestro. Viva las mates! ;-)

PD: Y ánimos con el sr. Dallas!
RESUMEN: Proyecto de incluir versiones españolas de juegos a Mame (Oficial): http://www.aumap.org/foro/index.php?topic=1270.0

ricky2001

  • Socio
  • ****
  • Mensajes: 1446
  • Arcade Adicto
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1036 en: 12 de Agosto de 2014, a las 10:19 horas »
Hola, sobre este último tema, tengo la placa del World rally 2 suicidada de pofo y puedo mandarla si es necesaria para ayudar con el dallas.

Saludos

Pofo

  • Visitante
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1037 en: 12 de Agosto de 2014, a las 12:10 horas »
El alligator lo han conseguido recuperar?

Rockman

  • Con experiencia
  • ***
  • Mensajes: 1281
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1038 en: 12 de Agosto de 2014, a las 15:32 horas »
El alligator lo han conseguido recuperar?

Qué juego es ese Pofo? No tengo noticias. De qué operador es?
En el link que está en mi firma están todos los que se han ido preservando con la ayuda de todos los involucrados. Si te apetece preservar el Attack que has rescatado recientemente lo añadimos.

Saludos.

PD: Gracias Ricky por tu gesto con lo de la placa WR2, supongo que si lo leen los interesados ya te dirán algo. :-)
RESUMEN: Proyecto de incluir versiones españolas de juegos a Mame (Oficial): http://www.aumap.org/foro/index.php?topic=1270.0

Pofo

  • Visitante
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1039 en: 12 de Agosto de 2014, a las 15:35 horas »
El alligator hunt (dallas-gaelco) es recuperable, al menos he visto una placa que indica que esta anulada la proteccion.

P.d.- ricky, ese dallas esta jodido, se le intento montar un puerto paralelo para almacenar los vectores de direccion, estados y leer datos....y......choffffffffffffff (si es una que le falta la bateria, que puede que sea otra que solo tiene un fallo en los fondos).
« última modificación: 12 de Agosto de 2014, a las 15:39 horas por Pofo »

Rockman

  • Con experiencia
  • ***
  • Mensajes: 1281
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1040 en: 12 de Agosto de 2014, a las 15:45 horas »
El alligator hunt (dallas) es recuperable, al menos he visto una placa que indica que esta anulada la proteccion.

P.d.- ricky, ese dallas esta jodido, se le intento montar un puerto paralelo para almacenar los vectores de direccion, estados y leer datos....y......choffffffffffffff (si es una que le falta la bateria, que puede que sea otra que solo tiene un fallo en los fondos).

Ah vale, es el Alligator Hunt de Gaelco que lleva el chip Dallas. Estaba pensando en un boot de algun juego de principios de los 80. :-P
En este caso como Gaelco saco la versión del Alligator Hunt desprotegido, se ha podido emular, pero la versión del juego que lleva el Dallas sigue como los demás sin funcionar la emulación. Si miras el listado de juegos del Mame lo verás Pofo.
RESUMEN: Proyecto de incluir versiones españolas de juegos a Mame (Oficial): http://www.aumap.org/foro/index.php?topic=1270.0

Pofo

  • Visitante
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1041 en: 12 de Agosto de 2014, a las 15:53 horas »
Entonces se supone que hay dos versiones de placa y la que lleva el dallas es irrecuperable?

No se puede analizar el comportamiento del dallas usando esta placa con codigo desprotegido y trazando paso a paso el programa?

He visto un chico que decia que se podia recuperar una con dallas cambiando el codigo(y supongo que con alguna modificacion mas).

Rockman

  • Con experiencia
  • ***
  • Mensajes: 1281
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1042 en: 12 de Agosto de 2014, a las 16:00 horas »
No conozco los detalles de ese chip Dallas. Lo poco que se es que tiene una ram interna donde están las llaves para desencriptar, que al más minimo intento de hacerle alguna "trastada" borra automaticamente los datos y deja la placa inservible.

Quizá con las dos versiones de placas Alligator Hunt en paralelo podrían estudiarlo. Lo desconozco porque la encriptación que utiliza es muy fuerte y por ahora inaccesible. Otro tema es conseguir las dos placas a la vez y funcionales, el equipo necesario para estudiarlo, y lo más importante, la persona con conocimientos suficientes para llevar a cabo la hazaña.

Casi nada...

Saludos.

PD: He actualizado el resumen del proyecto con las capturas del Music Ball en funcionamiento. (Se las he copiado a Haze, esperemos que no se enfade) :-)
RESUMEN: Proyecto de incluir versiones españolas de juegos a Mame (Oficial): http://www.aumap.org/foro/index.php?topic=1270.0

Pofo

  • Visitante
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1043 en: 12 de Agosto de 2014, a las 16:04 horas »
Si, se lo delicada que es esa ram y alguna cosilla mas.

Lo digo porque aqui se planteo analizar el dallas y creo que analizar esta placa desde fuera con las dos versiones es una ayuda.


commodoro

  • Animadillo
  • **
  • Mensajes: 136
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1044 en: 12 de Agosto de 2014, a las 20:51 horas »
Gaelco reparaba hasta hace pocos años las placas dañadas, no se si sigue haciendolo.

Es una lastima que al final no continuase la colaboracion con Mame. A fin de cuentas estos juegos estan mas que amortizados, y para ellos seria una publicidad que les saldria muy barata.




Pofo

  • Visitante
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1045 en: 12 de Agosto de 2014, a las 22:16 horas »
Gaelco reparaba hasta hace pocos años las placas dañadas, no se si sigue haciendolo.

Es una lastima que al final no continuase la colaboracion con Mame. A fin de cuentas estos juegos estan mas que amortizados, y para ellos seria una publicidad que les saldria muy barata.

Gaelco se disgrego, creo que el tema dianas sobrevivo un poco mas, ojala me equivoque pero a dia de hoy la publicidad seria mas bien un epitafio.

Andreas Naive

  • Recien llegado
  • Mensajes: 49
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1046 en: 12 de Agosto de 2014, a las 23:29 horas »
Hola, sobre este último tema, tengo la placa del World rally 2 suicidada de pofo y puedo mandarla si es necesaria para ayudar con el dallas.

Gracias, Ricardo. Por ahora esperamos que nos valga con la que nos dejó Enric; lo único que supongo que podría pasar es que lleguemos a necesitar algún Dallas más (el chip, no las placas), pero eso dependerá de Charles.

Como dice Pofo, en el que tú tienes la información ya no está en la SRAM, así que para recuperar el código protegido no nos vale; por supuesto, el chip debería seguir siendo funcional; si hay necesidad, lo pediré a través del foro. Y si alguien tiene alguna placa de desguace con un Dallas, que lo extraiga y se acuerde de nosotros. :)

En realidad, el asunto todavía no ha empezado a andar: la última vez que hablé con Charles me dijo que aún no había recibido la placa; aduanas y esas cosas, supongo.

Y en cuanto a las Alligator Hunt, yo no tocaría una placa funcional hasta que no tengamos cierta idea de cómo se comporta el chip. Si nos vamos a arriesgar a cargárnosla, mejor esperar a tener clara alguna vía de ataque. Por eso la opción de la WR1 me gusta tanto; podemos probar sin arriesgarnos a nada que sea irremediable.

Por supuesto, siempre quedá intentar implementar el ataque de Kuhn sobre una placa aún viva. Charles se niega en redondo; dice que nos cargaríamos la placa sí o sí, y que es posible que intentar conectar cables externos provoque problemas de sincronismo. No obstante, si alguien le quiere echar huevos e intentarlo sobre una placa WR1, yo le explico toda la teoría.

ricky2001

  • Socio
  • ****
  • Mensajes: 1446
  • Arcade Adicto
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1047 en: 13 de Agosto de 2014, a las 00:25 horas »
Hola Andreas, yo tengo un par de WR1 de desguace de las que se podría aprovechar el Dallas, al menos de una de ellas, así que contar con el si es necesario y también tengo otras 2 funcionales y una de ellas ya la he resucitado antes, así que si se borrara la podría resucitar sin problemas, tengo hecho el cable y toda la información, así que si me dices la teoría y soy capaz de entenderlo y hacerlo puedo intentarlo  ;), te anticipo que mis conocimientos de programación son nulos.

saludos, Ricky

commodoro

  • Animadillo
  • **
  • Mensajes: 136
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1048 en: 13 de Agosto de 2014, a las 17:56 horas »
De momento la web de Gaelco sigue activa, y sigue estando el enlace al servicio tecnico.
No se si la empresa existe todavia. En cualquier caso es una lastima que hayan dejado de producir arcades.

Andreas Naive

  • Recien llegado
  • Mensajes: 49
Re:Proyecto: Añadir versiones españolas de juegos de los 80 a Mame (no oficial).
« Respuesta #1049 en: 14 de Agosto de 2014, a las 00:25 horas »
Gracias por la oferta de los chips, Ricardo. Lo tendré en cuenta si es necesario.

En cuanto a lo del ataque de Kuhn, no es necesario saber tanto de programación cuanto de electrónica. Empecemos con la explicación: cuando tú programas/reprogramas el Dallas, él utiliza el generador pseudoaleatorio interno para generar las claves para dos cifrados distintos; por una parte, los propios datos (en bloques de un byte, ya que el procesador interno, un 8051, es de 8 bits), y por otra la dirección (en bloques de 32 KiB). Por ello, el código que se sube acaba cifrado por la encriptación de datos y desordenado por la encriptación de direcciones. Todo ese código protegido está almacenado en la SRAM a la que va conectada el Dallas. En una placa normal de las que conocéis, si algo raro pasa y la SRAM pierde su contenido, se pierde el código.

El ataque de Markus Kuhn ( http://www.cl.cam.ac.uk/~mgk25/tamper.pdf , secciones 3.1 y 3.2) no requiere comprender los cifrados, y es bastante sencillo conceptualmente; la idea general es inyectar un troyano que simplemente lea el contenido de la SRAM (desde dentro, como código 8051 normal) y lo muestre a través de un puerto externo, para que desde fuera pueda ser leído (con un analizador lógico o un data logger, por ejemplo).

El problema es, claro, que esto hay que hacerlo en caliente, sin destruir el contenido de la SRAM; si tú intentases subir el código 8051 directamente, lo primero que haría el Dallas sería eliminar las claves de cifrado de los datos en la SRAM, haciéndolos ininteligibles. Por ello, el código ha de "inyectarse" en caliente. La idea básica es:
1) Fase A. Aprovechando que el cifrado de datos actúa por bytes, reconstruir las tablas de cifrado de unas pocas decenas de bytes consecutivos (una tabla por byte), los suficientes bytes para "hacer sitio" para el código que lea toda la SRAM.
2) Fase B. Cifrar el código 8051 que se quiere inyectar utilizando la información recuperada en la fase A y, de nuevo, *inyectarlo* para que el Dallas lo ejecute. Una vez en ejecución, ese código, que hemos escrito nosotros, lo que hará será leer toda la SRAM y mostrar la información por algún puerto externo. Esto va a funcionar porque para el Dallas el código ejecutado es legítimo y al leer la SRAM, el Dallas presenta a nuestro código los datos ya descifrados.

¿Como implementa la fase A Kuhn? En su ejemplo, hace lo siguiente: en ensamblador de 8051, la secuencia de instrucciones $75 $90 $XX es un MOV 90h, XX (saca XX por la dirección $90, que es a la que está mapeada el puerto paralelo P1); si nosotros supiésemos como inyectar los dos primeros bytes ($75 $90), bastaría con probar todas las combinaciones del tercero para reconstruir la tabla de cifrado correspondiente a la dirección del tercer byte (el que variamos, la XX en el ejemplo). Así que el primer problema es... que no sabemos cómo hay que cifrar esos dos primeros bytes para que el Dallas, al descifrarlo, realmente lea $75 $90. ¿Cómo se resuelve este escollo? Fuerza bruta. Probando las 2^16 combinaciones posibles hasta dar con la tecla. Kuhn afirma que con su implementación puede hacer 300 intentos por segundo; cada intento obliga a resetear y volver a esperar a la primera lectura del Dallas a la SRAM. ¿Cómo detectas cuál de las 2^16 pruebas es la que ha funcionado? Espiando en el puerto paralelo... es de esperar que la única combinación buena sea aquella que genere actividad en P1. Así que fijas un valor cualquiera para el tercer byte, y pruebas todas las combinaciones de los 2 primeros. XX YY 55, por ejemplo. Aquella combinación de XX YY que genere actividad en P1 será la buena.

Supongamos que ya sabemos cómo codificar $75 $90 para esas dos direcciones. Digamos que has decubierto que el cifrado de esos dos bytes (en esas direcciones concretas) son, por ejemplo, $81 $09. Lo siguiente que harías sería probar todas las combinaciones $81 $09 XX; al ejecutar ese código, lo que el Dallas va a entender es $75 $90 f(XX), donde f es la función de descifrado para esa dirección concreta. Probando todas las combinaciones de XX, reconstruyes la función de cifrado para esa dirección concreta de memoria. Ya tenemos un byte perfectamente entendido.

A continuación, intentaríamos recontruir la función para el byte en la dirección siguiente. Para ello, trataríamos de inyectar el código NOP + MOV 90h, XX, en binario $00 $75 $90 $XX; ahora tenemos un byte más (4 en lugar de 3), pero recuerda que ya hemos reconstruido por completo la función de cifrado del tercer byte, por lo que, de nuevo, sólo tenemos que probar todas las combinaciones posibles de los dos primeros. La misma complejidad que antes. Repitiendo el proceso, llegaremos a reconstruir la función de cifrado correspondiente al byte en la cuarta posición. Para el byte en la quinta posición, lo mismo, ahora con NOP+NOP+MOV 90h XX, pero ahora ya sabemos cómo codificar el primer NOP, así que ya sólo cuesta 2^8 intentos (para el segundo NOP). Para el byte en la sexta posición, lo mismo con tres NOPs, pero ahora ya sabemos cómo codificar los dos primeros NOPs, así que podemos saltar directamente a la modificación de las XX del sexto byte para reconstruir la tabla correspondiente.

Y así un byte tras otro, cada vez añadiendo un NOP más al comienzo. Llegaremos a un punto en que ya hayamos reconstruido un número suficiente de tablas de cifrado para poder inyectar con comodidad nuestro troyano. Entramos en la fase B.

Fase B) nuestro código será básicamente un par de NOPs (para las dos primeras direcciones sólo tendremos una tabla parcial, pero ya sabemos cómo cifrar un NOP por los pasos anteriores, así que esto sabemos hacerlo) seguido de nuestro bucle de lectura, escrito en 8051 mondo y lirondo, y cifrado utilizando las tablas que hemos reconstruido en la fase A. Si inyectamos tal código, al ejecutarse leerá el contenido descifrado de la SRAM y lo mostrará por algún puerto en el que nosotros ya estaremos esperando los datos.

----

Y eso es básicamente todo. Ahora, ¿cómo *inyectamos* código, tanto en fase A como en B? Lo que hace Kuhn es, básicamente, esperar a que el Dallas intente leer algo de la SRAM y dar el cambiazo en ese momento (presentando al Dallas nuestros datos en lugar de los que devuelve la SRAM). Kuhn menciona que todo se puede construir con electrónica básica, pero no da detalles de lo que hace. Además, menciona que hay algún asuntillo más... Sospecho que puede deberse a una de los mecanismos de protección del Dallas: cuando está parado (ciclos idle) genera lecturas aleatorias contra la SRAM, sólo para despistar a los posibles atacantes. Así que, sospecho, es posible que las primeras veces que detectes una petición del Dallas a la SRAM, no se trate de una petición real, sino de una de estas lecturas aleatorias. Has de distinguir unas de otras para saber en cuál inyectar tu código. Tampoco creo que sea excesivamente difícil una vez que puedes espiar lo que devuelve la SRAM, porque esas lecturas deberían ser aleatorias, mientras que la primera lectura válida debería ser siempre la misma tras cada reseteo(y, posiblemente, las siguientes se hagan inmediatamente a continuación sin que se cuele entre medias ninguna otra lectura aleatoria).

La dificultad de la implementación, por tanto, consiste en que hay que añadir la electrónica necesaria para inyectar nuestro código; eso va a obligar a desconectar eléctricamente las conexiones de datos de la SRAM al Dallas (cortando pistas, levantando patillas, lo que sea) y reconectarlo a nuestra circuitería. Ha de tenerse en cuenta que en unas ocasiones (fase A e inicio de la B) nos interesa que lo que entre al Dallas sea nuestros datos, y en otras (ejecución de nuestro troyano en fase B) que la información real de la SRAM llegue al Dallas; así que posiblemente habría que utilizar un par de líneas de búferes para decidir quién está conectado eléctricamente al Dallas. También, dado que habrá que resetear al Dallas muchas veces por segundo, se debería controlar alguna señal apropiada (reset/chip enable, no recuerdo qué tiene), o la línea de alimentación.

Y claro, todo esto se puede ensayar en una WR1 más o menos sin preocupaciones, pero sólo valdría para aprender; para que esto fuese útil de verdad, después habría que coger otra de las placas aún no recuperadas, digamos una WR2, e implementar esto en caliente sin cargarnos la SRAM; vale decir, cortar pistas/levantar patillas, conectar nuestra circuitería, implementar el ataque, etc... SIN destruir la información de la SRAM. Las objeciones de Charles, aparte de que a la mínima seguro que te cargas algo y pierdes la SRAM, es que la velocidad a la que funciona (12 Mhz) obligaría a mantener los cables con los que conectásemos nuestra electrónica/circuitería muy cortos para evitar problemas de sincronismo.

Implementar esto, no cabe duda, es un señor proyecto, así que, en realidad, no espero que te lances, Ricardo. Soy consciente de que cuando te ofreciste no sabías la que te iba a caer encima. ;) No obstante, yo lo cuento, porque tampoco parece esencialmente mucho más difícil de lo que, por ejemplo, está intentado Eduardo con el Kabuki, así que si alguien está buscando un proyecto interesante, aquí lo tiene.