Manuel Pazos arroja luz sobre la curiosa protección de ARC

Nunca dejaré de sorprenderme de lo que son capaces los grandes de la escena MSX. Su talento es capaz de dejarnos con la boca abierta en cada ocasión.

En esta ocasión, me refiero a Manuel Pazos y su reciente trabajo en la desprotección del juego ARC que se publicó originalmente en dos discos acompañado de un cartucho ROM en el que estaba la protección anticopia. El uso del cartucho era absolutamente necesario para que el juego funcionase y hasta ahora nadie se había aventurado a investigar a fondo este sistema. Así que Manuel se ha metido de cabeza en el tema para arrojar algo de luz sobre su funcionamiento.

En su cuenta de Twitter ha publicado una serie de mensajes donde explica todo el proceso y sus conclusiones. Como me parece un tema muy interesante y me ha llamado la atención, me he tomado la licencia de traducirlos y pegarlos aquí (tenéis los originales al final de la entrada):

Este es ARC, un juego para MSX desarrollado por  en 1990. Se publicó en dos discos de 720K y un cartucho. El cartucho tenía una EPROM de 32K y hardware extra usado como protección anticopia. Hasta donde yo se, nunca fue desprotegido.

Un amigo del MSX mate () publicó una foto del interior del cartucho. Estaba cubierto de una especie de silicona para prevenir ingeniería inversa. Tenía curiosidad sobre cómo funcionba la protección y fue tan amable de enviarme el juego apra examinarlo. ¡Gracias Markus!

Quité toda la silicona pero los cirtuitos integrados tenían su superficie rayada, de manera que no era posible leer la referencia para identificarlos… al menos esa era la intención. Pero pude identificarlos todos (¡eso espero ^^!).

El cartucho comprueba las operaciones de lectura y escritura en el puerto de entrada/salida #7F. Cada vez que el valor #35 es escrito, se incrementa un contador. Si el puerto es leído y los bits 0-1 del contador son «11», se devuelve el valor #DA . Un simple programa en BASIC confirma que funciona de esa manera.

Usé el emulador openMSX para añadir puntos de interrupción donde se accede el puerto #7F. De esta manera es relativamente fácil encontrar el código que comprueba la protección. La protección tiene códgo automodificable, o código ofuscado que parece «basura» o datos aleatorios.

Después de parchear esa rutinas, conseguí jugar hasta el final sin usar el cartucho original. Pero para ser sinceor, no tiene mucho mérito desproteger un juego MSX usando emuladores actuales. (¡También tuve que desensamblar la lógica del enemigo del final para descubrir cómo derrotarlo ^^!)

Deja tu comentario sobre esto

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.