Introducción al LibCrypt 1/2

Introducción

Este es el primero de una serie de artículos que quiero escribir para que todo el mundo conozca que son, como funcionan y, lo más importante, como saltarse las protecciones de los juegos de PlayStation. No se porque, a excepción del tutorial que dejó a medias BAD, no hay más información sobre este tema por la red. La verdad es que las protecciones de los juegos de PSX, basadas en el LibCrypt, no son en realidad muy complicadas, y pueden ser superadas con bastante facilidad. Lo que yo pienso es que a los crackers no les gusta demasiado revelar sus conocimientos, para que cualquiera pueda hacer lo que tanto esfuerzo les ha costado aprender por sus propios medios. Esta postura la entiendo, y también la respeto, pues tienen todo el derecho de actuar así. Sin embargo, personalmente creo que es mejor que los conocimientos se compartan, que no sean propiedad de unos pocos, sino que sean accesibles para todo el mundo.

Esto no quiere decir tampoco que os vaya a decir paso a paso lo que hay que hacer para desarrollar un crack, ya que la gracia está en que experimentéis, os estrujéis la cabeza y descubráis cosas por vosotros mismos, a pesar de que creo que os daré la información necesaria para que, con un poco de esfuerzo y práctica, no tengáis demasiadas dificultades. Veréis como en realidad no es tan complicado y, con unos pocos conocimientos de base, seréis capaces de hacer vuestros propios cracks.


Un poco de historia

Como todos sabéis durante los primeros años de existencia de la PlayStation los juegos no llevaban ningún tipo de protección anticopy, lo cual, gracias a la aparición del famoso modchip hizo que la piratería alcanzase niveles desconocidos en el mundo de las videoconsolas y, por supuesto, esto repercutió en que la PSX fuera un éxito de ventas sin precedentes, batiendo todos los records y previsiones. Pero llegaron los tiempos, hace poco más de un año, en que ya casi todo el mundo tenía una PlayStation y además los desarrolladores no paraban de demandar algún tipo de protección para implementar en sus juegos, cosa que estaba totalmente prohibida por Sony (además de por la ley ;)).

Casi todos recordareis el juego Medievil, pues si por algo ha pasado a la historia ha sido por ser el primer juego de PlayStation protegido, experimento que le sirvió a Sony para tantear el terreno. Mientras tanto, en Japón continuaban experimentando con algún que otro juego, pero siempre con protección antimod, que no era en sí un anticopy, sino que incluso podía impedir el uso del juego original a todo aquel que tuviera el chip instalado. Como todos sabéis no tardaron en aparecer cracks, todavía no estaban muy experimentados y daban problemas con muchas grabadoras, pero todo se fue solucionando poco a poco. Además, Sony no estaba muy convencida de utilizar el antimod en Europa, pues el uso de modchips alcanzaba cuotas demasiado elevadas.

Después de un tiempo de reflexión, a principios de verano del 99 apareció el V-Rally 2. Misteriosamente nadie podía copiarlo correctamente, siempre se colgaba en la pantalla de Loading antes de empezar cualquier carrera. Este fue el primer juego en implementar LibCrypt, pero después de una relativamente larga espera un grupo poco conocido en España llamado PaRaDoX lanzó un mágico parche, el cual junto a una bonita intro y selector PAL/NTSC rompía la protección.

Fue pasando el tiempo y los juegos protegidos se sucedían (Ape Escape, Wip3Out, Speed Freaks...), así como los respectivos cracks, como siempre después de un tiempo de espera suficiente para vender algunos juegos originales, y como no de la mano de los que se habían convertido en precursores y reyes de la scene, el grupo internacional PaRaDoX.

El LibCrypt se fue complicando con sucesivas versiones, pero fueron apareciendo también nuevos grupos de crackers, internacionales como Kalisto, o nacionales como BAD y SquareX, ante la necesidad de hacer cracks específicos para la versión de cada juego para un determinado país.


Principio de funcionamiento de LibCrypt

Como muchos otros tipos de protección de CDROM's, el principio del funcionamiento del LibCrypt se basa en que los CD's se pueden grabar en "fábrica" con ciertas informaciones imposibles de duplicar por una grabadora casera convencional, lo cual es aprovechado para introducir ciertos datos que se chequearán durante el juego y no será posible que una copia contenga la información correcta (ignorando el uso del CloneCD, claro).

El código del LibCrypt está en realidad dividido en varias subrutinas independientes, las cuales entre otras cosas se encargan de chequear el disco e identificar si se trata o no de una copia. Estas subrutinas, aparte de estar todas escritas originalmente en puro ensamblador, utilizan directamente registros del hardware de la PSX, como son los del CDROM y del coprocesador de control del sistema (COP0). Esto, unido a que además hace una detección del Action Replay dificulta bastante la traza del programa, como ya comentaremos más adelante en el siguiente artículo.

Estudiándola con un poco más de detalle la rutina hace algo más o menos así: Primero se llama a una función que inicializa los registros del coprocesador y prepara la detección del AR. Luego realiza una llamada a una función recursiva tipo "non-blocking", la cual en segundo plano hace los chequeos de protección y calcula un número de 16 bits (Magic Word), utilizando como parámetros el valor almacenado en algún registro del coprocesador, y dejando el resultado en la parte baja del registro BPC del COP0. Por último se hace la comprobación final, haciendo una especie de checksum, que entre otras cosas realiza un XOR entre el valor del BPC y algunos datos de un sector de memoria. Naturalmente, si el juego es una copia el valor contenido en el BPC será diferente al esperado, y el checksum fallará. Hay que destacar que la comprobación final cada juego la realiza en un momento diferente; algunos al comienzo (Dino Crisis, Resident Evil 3), otros a mitad del juego (Mulán, Tarzán), e incluso algunos en diferentes ocasiones a lo largo del mismo (Soul Reaver).


Cómo romper LibCrypt

Ante el funcionamiento del LibCrypt comentado anteriormente se nos pueden ocurrir varias soluciones para cargarnoslo. Una de las más evidentes podría ser localizar cuándo se realiza la comprobación del BPC y anular la rutina, sin embargo como he comentado anteriormente muchas veces se realiza en diferentes ocasiones durante el juego, y no podemos estar seguros de tener localizadas todas. Este método creo que ha sido utilizado en alguna ocasión, ya que es la única forma (creo) de realizar un crack universal. Aún así como he dicho es algo arriesgado.

La práctica habitual consiste en modificar la rutina que hace los chequeos y calcula la Magic Word para que introduzca siempre el valor correcto en el BPC, independientemente de que el CD sea original o se trate de una copia. Pero esto también tiene algunos inconvenientes. El primero de ellos es que hay que tener cuidado de alterarla lo menos posible, porque al parecer la propia rutina realiza un autocheck de ella misma (a partir del LC2 creo), para comprobar su integridad. El segundo, y más importante, es que para poder meter siempre el valor correcto en el BPC necesitaremos conocer la MW, y esto implica que tendremos que disponer del juego original. Por si fuera poco, la obtención de la Magic Word presenta la dificultad añadida de que en principio no podremos utilizar un debugger, y que cuando consigamos poder usarlo, no podremos en ningún caso trazar el programa ni leer directamente los registros del coprocesador.

Parece complicado, pero ya veréis como en realidad no lo es tanto ;-)


Necesitaremos...

Lo primero es el hardware. Para esto existen distintas soluciones, unas más cómodas, potentes y caras, y otras más dificultosas y económicas. Yo personalmente utilizo una tarjeta PCCOMM en compañía de un Action Replay. Otras soluciones habituales son el uso de un X-Plorer, un cable serie, e incluso únicamente con un Action Replay y bastante paciencia :). No es la intención de este artículo entrar en detalles sobre la obtención y uso de estos accesorios, y además pienso que sobre este tema sí que hay bastante información desperdigada por la red.

Ahora le toca el turno al software. Básicamente necesitaremos un desensamblador, un editor de texto, un debugger, un editor hexadecimal y el correspondiente software asociado al hardware que utilicemos (lease Caetla Tools para el AR), además claro está del software de grabación.

Por último, y no por ello menos importante, os recomiendo que os estudiéis un poco los documentos que encontréis sobre el hardware de la PSX, así como el juego de instrucciones del MIPS R3000. El mejor y más útil documento que podéis encontrar en mi opinión es este.

Aquí tenéis algunas direcciones útiles donde podréis encontrar las herramientas que comento junto con mucha información:

Graveland - http://dev.paradogs.com

Napalm - http://napalm.intelinet.com

Hitmen - http://www.hitmen-console.org


Despedida

Bueno, hasta aquí ha llegado el primer artículo. Espero que os haya parecido útil y hayáis aprendido algunas cosas. Este ha sido bastante teórico, pero creo que servirá para entender la práctica, que desarrollaremos más adelante. En el próximo entraremos a saco con el LibCrypt 2, y descubriréis definitivamente como acabar con él :). Es posible que haya algún fallo en las explicaciones que he dado, y seguramente habrá bastantes matices que se presten a discusión.



by Urotsukidoji
0 respuestas