28 febrero 2016

Arcade Hacker

Como sabéis, Arcade Vintage está comprometido con la la cultura arcade y los juegos que la hicieron posible. Un parte vital de todo ello es la recuperación de las placas que albergaban dichos juegos, intentando mantener siempre lo más cercanamente posible su estado original.

Hoy vamos a subir un poco el listón técnico de este blog para actuar como puente hacia el blog de Arcade Hacker (http://arcadehacker.blogspot.com.es/) de nuestro amigo Eduardo Cruz, que está realizando una tarea increíble en este sentido. No pretendemos explicar con detalle sus trabajos, pero sí servir de introducción a ellos, para que los que no domináis el inglés o no tenéis conocimientos de microelectrónica, podáis conocer y valorar lo que Eduardo hace.

Hablaremos de protecciones anticopia, ingeniería inversa, microscopios y códigos secretos. Acompáñanos en este apasionante viaje para descubrir los secretos que han estado dormidos durante tanto tiempo...





Alrededor de las empresas dedicadas al desarrollo de video juegos, surgió todo un ecosistema de otra empresas que se afanaron por crear copias o derivados de las placas originales, con la intención de fabricar placas propias, totalmente funcionales (bootlegs), por supuesto sin pagar ningún tipo de compensación a las desarrolladoras originales.

Con la intención de evitar, o al menos de minimizar estas actividades, las empresas desarrolladoras idearon sus propios métodos para proteger sus desarrollos. Uno de estas empresas es Capcom que incluyó un sistema alimentado con baterías, que en caso de desconexión, inutilizaba completamente la placa. Este tipo de sistemas fue utilizado en plataformas basadas en el chip Kabuki o en las conocidas CPS-1.

Esto, que está totalmente justificado, tiene un lado negativo para los que intentamos recuperar todo este legado y que el los juegos tienen una caducidad, limitada a la duración de la batería.

Aunque ya hace algún tiempo que el equipo de MAME ha logrado obtener los códigos necesarios para poder disfrutar en emuladores de nuevo de los juegos protegidos con estos sistemas y es posible también disponer hacer modificaciones hardware en las placas para poder hacer funcionar de nuevo los juegos, estas modificaciones no solo a menudo son engorrosas, sino que desvirtúan la esencia de mantener las placas en su estado original.

Eduardo se lanzó a la aventura de investigar la manera de acceder a los entresijos de estas plataformas para obtener algo más de información que ayudara en la recuperación de estos sistemas.

Las técnicas utilizadas para averiguar la manera en que un sistema funciona a partir de un equipo o dispositivo ya construido se denomina ingeniería inversa. Como es de imaginar, a la hora de abordar un ejercicio de ingeniería inversa, no se suele disponer de mucha información previa y los avances suelen ser lentos, complejos y muchas veces infructuosos.

Me ha resultado fascinante el camino que Eduardo ha ido siguiendo en su proyecto, y para aquellos que sabéis inglés, os recomiendo que leáis el material del blog y que sigáis con atención los videos donde explica paso a paso el proceso seguido.

Voy a intentar resumir y explicar de manera sencilla y sin demasiado detalle el contenido de los trabajos, pero la referencia será siempre el trabajo original de Eduardo y de otros colaboradores a los que él también hace referencia, como Digshadow.

Partimos del chip Kabuki, que Eduardo explica es una versión modificada del famoso Z80, CPU utilizada en multitud de placas arcade y microordenadores clásicos como el Spectrum o el Amstrad CPC. El chip Kabuki incluye un Z80, pero además un sistema de encriptación que supone una parte importante del chip.

Partes principales de Kabuki identificadas.


Incluso para aquellos que no son profanos en la materia, la identificación de areas funcionales dentro de un chip es una tarea complicada. Eduardo procede a la identificación de los principales bloques dentro de Kabuki, a partir de fotografías microscópicas del chip. Estas fotografías, explica, se componen de multitud de fotografías de partes del chip que posteriormente se unen para hacer una composición completa del integrado.

Detalle de una sección de Kabuki

Una vez identificadas las partes de interés, Eduardo se plantea de qué manera podría funcionar el sistema de encriptación, que aplica una serie de intercambios, operaciones lógicas y rotaciones a los bits presentes en el bus de datos del Z80. Estas operaciones, no son aplicadas más que a las operaciones de lectura, y no a todo el rango de direcciones que el Z80 puede acceder, sino solo a algunas partes. Para complicar más la situación, la encriptación aplicada es distinta para las instrucciones del procesador y para los datos.

A partir de deducciones lógicas, se identifican las lineas del chip que tienen que ver con el proceso de encriptación. Asímismo, se identifica que la parte del chip necesaria para introducir las claves es un largo registro de desplazamiento de 108 bits. Es como una memoria en la que el contenido de cada posición se mete introduciendo datos por un extremo y empujándolos uno a uno con datos nuevos, hasta que la memoria contiene el contenido adecuado.

Identificación de los elementos del registro de desplazamiento

Cada una de estas posiciones de memoria para los códigos fue identificada (no hace falta decir que esto es todo un trabajo de chinos).

A continuación toca averiguar si sería posible introducir algunas señales por los pines del chip para poder escribir en esa memoria. Al fin y al cabo, Capcom debería tener su propia manera de activar las placas. Si somos capaces de averiguar esto, podríamos reemplazar las baterías de las placas 'muertas' y reactivarlas de nuevo, sin ningún tipo de modificación hardware.

Finalmente, Eduardo encontró la secuencia de señales y pulsos necesarios para activar las partes necesarias del chip y poder introducir los codigos necesarios. Parte de este proceso implicaba obtener una clave 'secreta' necesaria para activar el sistema de encriptación.

Voy a hacer un rápido inciso aquí para explicar muy por encima algunos aspectos sobre la fabricación de chips, para ayudar a entender cómo se obtuvo esta clave secreta.

Para los que no estéis familiarizados con los procesos de fabricación usados en microelectrónica, los chips básicamente se obtienen depositando capas de distintos materiales sobre una base de silicio. Los materiales usados son metales, polisilicio y silicio dopado con impurezas varias, que cambian su comportamiento eléctrico. A veces se usan otros semiconductores distintos del silicio, como germanio.
Detalle de las capas de un chip

Como véis en las fotos, las capas no son uniformes, y las formas que adopta cada una se definen con ayuda de unas máscaras que se crean para cada una de ellas, en un proceso similar a la litografía. Los métodos que se utilizan para generar cada capa requieren de mucha precisión y utilizan deposición de gases, Rayos X, haces de iones y otras técnicas muy complejas, como podéis ver.

Fabricación de chips


La geometría e interacción de unas capas con otras es lo que genera la formación de transistores, puertas lógicas y circuitos que conforman un chip.

Volviendo a nuestro tema principal, aunque parezca ciencia ficción, la manera en que esta clave pudo ser obtenida, pasa por eliminar de alguna forma alguna de las capas de metal superiores del chip para poder inspeccionar visualmente el contenido del mismo.

En el caso de Kabuki esto se pudo hacer con la ayuda de programas de edición gráfica. Con el resultado siguiente:



El hecho es que al eliminar esta capa, se pudo acceder a la parte que contenía la clave secreta de 20 bits, y de esta manera pudo ser obtenida por inspección visual..

Con esto se completa el procedimiento necesario para acceder al HW y reprogramar el chip con los códigos necesarios para volver a revivir las placas. El trabajo previo del equipo de MAME, que ya había obtenido estas claves con anterioridad es ahora vital para elegir el contenido a introducir. Una vez más aprovecho para hacer notar que MAME no es sólo el emulador arcade por excelencia, sino que también es una base de datos con una cantidad brutal de información, conseguida y organizada en el código de MAME por los desarrolladores de este emulador, información que es inestimable en nuestros esfuerzos por recuperar placas arcade y hacer que vuelvan a funcionar.

No contento con explicar el proceso, Eduardo ha desarrollado un software para Arduino, junto con un procedimiento sencillo para utilizarlo y que cualquiera pueda hacer volver a la vida a las placas basadas en Kabuki.



Una vez roto el sistema de Kabuki, era hora de intentar aplicar el mismo tipo de técnica sobre los CPS-B21, que fueron los chips encargados de la seguridad, entre otras cosas, de las famosas placas CPS-1.

Siguiendo un procedimiento similar al de Kabuki, Eduardo cuenta como también ha sido posible acceder al sistema de encriptación de CPS-1. Este sistema es algo más complejo, pero de nuevo, dando explicaciones sobre cada parte del proceso de ingeniería inversa seguido, vamos llegando paulatinamente al resultado esperado y las placas pueden volver a revivir gracias a un pequeños sistema similar al de Kabuki para introducir los códigos necesarios.

En particular, la parte de obtención de la clave necesaria para acceder al HW del CPS-B21 fue particularmente compleja de obtener. Al parecer, CPS-B21 contaba con una capa de metal (no sabemos si utilizada como capa de pasivación, para proteger el circuito o mejorar su comportamiento eléctrico o si estaba expresamente incluida para impedir la inspección vidual del mismo).

La colaboración de Digshadow fue crítica para obtener un decapado físico del chip, que es un proceso muy complejo, que requiere del uso de ácidos y técnicas de manipulación a veces peligrosas y complejas.

Proceso de decapado del CPS-B21

Os mostramos aquí algunas de las imágenes que ilustran el proceso seguido con CPS-B21, de manera equivalente al que se utilizó inicialmente con Kabuki.

Identificación de las partes relacionadas con la encriptación de CPS-B21

Obtención de la funcionalidad por inspección visual

Explicación del proceso de activación y partes del sistema de encriptación
Amigos, sé que ha sido una entrada algo técnica en este blog, y solo pretendo que apreciéis el grado de dificultad y el trabajo que muchas veces queda relegado a un público minoritario, pero que es vital para que luego podamos todos disfrutar de muchos de los juegos de nuestra infancia en lugares como nuestro querido salón de Arcade Vintage.

Desde aquí quiero mostrar mi admiración y agradecimiento a Eduardo Cruz, a Digshadow y a toda la gente que trabaja muchas veces de manera altruista para que el legado arcade siga perdurando durante mucho tiempo y futuras generaciones puedan seguir jugando a esos juegos que nosotros tuvimos la suerte de disfrutar en su día.



2 comentarios:

  1. Uno se pone a jugar en un emulador y no se hace la menor idea del trabajo enorme que hay detrás. Gracias por mostrarlo!!

    ResponderEliminar
  2. Impresionante trabajo. Felicitaciones ! Saludos desde Argentina !

    ResponderEliminar