Página de José Moya=>Lecciones Informática=>Trampas

ADVERTENCIA:

Este tutorial es antiguo, y los procedimientos descritos en este tutorial están referidos a programas antiguos. Casi todos los programas modernos utilizan estructuras de datos mucho más complejas y ficheros muy extensos. Además, las leyes sobre copyright han cambiado desde la elaboración de este tutorial y es posible que el concepto de "integración de datos" haya cambiado o desaparecido

¿Creía que su procesador de textos servía para escribir? ¿Aún utiliza la hoja de cálculo para hacer cuadrículas? ¿Pensaba que encontraría información útil en internet? ¡No se preocupe! ya están aquí las...

Lecciones de informática en el hogar.

Capítulo I: Cómo hacer trampas.

O de cómo pasé el segundo nivel de Cadaver®, gané mi primer billón en el SimCity® y cloné al dragón de Golden Axe®, hace ya muchos años...

ADVERTENCIA: [next]

Haga siempre una copia de seguridad de los archivos que vaya a modificar. El autor no se compromete a que, en caso contrario, no pierda la información contenida en los mismos.

Aparte de esto, es una buena política hacer siempre una copia de seguridad de los programas y jugar sobre la copia: Así protegerá sus discos originales de eventuales fallos de hardware, o de virus que puedan dañarlos.

Otra buena política es proteger siempre los disquetes originales. Ignoro por qué es frecuente que los discos originales no vengan de fábrica con la protección puesta (esto es, con el agujerito cerrado en los de 5¼ y abierto en los de 3½). El usuario ha de examinar siempre los disquetes originales para asegurarse de que estén protegidos contra escritura.

Usuarios de CD-ROM y DVD, noten que los CD-ROM y DVD originales están protegidos contra escritura. Para poder editar o reemplazar archivos, hagan una instalación completa en disco duro.

SEGUNDA ADVERTENCIA: [next]

Es posible que alguno de los trucos siguientes vulnere las leyes del copyright, especialmente aquellos trucos que se basen en el cambio de elementos del programa (por ejemplo, renombrar archivos). El autor no es responsable de los delitos que puedan cometerse al poner en práctica los procedimientos descritos en este documento, si bien se compromete a NO ESTAR DANDO INFORMACIÓN SUFICIENTE PARA DESPROTEGER UN JUEGO.

Si Vd. considera que esta página pone en peligro sus derechos de autor, envíe un mensaje a jgmoyay@teleline.es exponiendo su caso. Escriba "QUITE TRUCLEC.HTM" como "tema". (Podría tardar obtener respuesta: leo el correo una vez a la semana).

Lecciones de informática en el hogar.

Capítulo I: Cómo hacer trampas. [next]

Llamo a este capítulo "cómo hacer trampas" porque lo dedico a explicar cómo averigua la gente los trucos para los juegos de computadora. Hay dos tipos de trucos:
  1. Los que utilizan combinaciones de teclas o parámetros secretos que el programador ha colocado al crear el juego: Es difícil averiguar estos si no se puede hacer una compilación inversa del programa.
  2. Los que alteran los ficheros del programa o, más comunmente, las partidas grabadas. Alterar un fichero de programa podría ser una violación del copyright (en la mayoría de los casos, lo es); alterar una partida grabada no debería serlo, puesto que las partidas grabadas no tienen mayor relación con el juego que los documentos generados por una aplicación con la aplicación en sí.

    Sin embargo, esto no es tan fácil. Algunos juegos shareware incluyen en su distribución shareware todos los niveles (shareware o públicos y registrados o privados) pero exigen una "clave" para entrar al primer nivel de la versión registrada (tal cosa sucede, por ejemplo, con "Towers", un juego de rol de JV Enterprises®). ¿Qué sucedería si nosotros, cambiando un dato de la partida grabada, conseguimos jugar más allá de los niveles shareware? Estaríamos causando un daño económico a los autores del programa. Ese daño económico es uno de los principales factores que, en legislaciones como la de los Estados Unidos, separan el "uso bienintencionado" de la piratería.

    La legislación de la unión europea nos permite utilizar excepcionalmente ingeniería inversa (averiguar la estructura interna de la partida grabada podría considerarse "ingeniería inversa", si bien no es una descompilación) siempre que sea indispensable para integrar datos entre aplicaciones y que no distribuyamos los resultados de nuestra investigación ni los utilicemos para crear un nuevo programa con idéntica función al anterior. ¿Podríamos pensar que estamos tratando de "integrar datos" entre el juego y una nueva aplicacicación de manejo de partidas grabadas?

    No soy jurista. Por lo tanto, quien aplique las siguientes ideas ha de saber que lo hace bajo su responsabilidad.

Voy a hablar sólo de los trucos del segundo tipo.

Renombrar archivos [next]

La alteración más fácil de un programa es la sustitución de archivos. Por ejemplo: tenemos un programa con los siguientes ficheros:

JUEGO.EXE MAPA1.MAP SPRITE1.SPRMAPA2.MAP
SPRITE2.SPR MAPA3.MAP SPRITE3.SPR

Un directorio con nombres así sugiere que el nivel 1 podría estar almacenado en MAPA1.MAP y SPRITE1.SPR, el nivel 2 en MAPA2.MAP y SPRITE2.SPR etc. Podemos intentar renombrar los archivos y ver si al comenzar el juego ha cambiado el "nivel 1":

(ADVERTENCIA: HACER COPIA DE SEGURIDAD DEL PROGRAMA ANTES DE PROBAR ESTO)

C>REN MAPA1.MAP MAPA0.MAP
C>REN MAPA2.MAP MAPA1.MAP
C>REN MAPA0.MAP MAPA2.MAP
C>REN SPRITE1.SPR SPRITE0.SPR
C>REN SPRITE2.SPR SPRITE1.SPR
C>REN SPRITE0.SPR SPRITE2.SPR

Si la cosa funciona, podremos jugar a niveles a los que nunca hemos llegado. En algunos juegos se puede, incluso, jugar a niveles que sólo están definidos para la demo.

Copiar archivos [next]

Del mismo modo que hemos utilizado el método del renombrado para jugar en niveles "nuevos", podemos utilizar una variante para jugar con personajes "nuevos": con los "malos" de la partida.

Podemos hacer esto si los distintos personajes están en ficheros distintos. Supongamos que el directorio (carpeta) del juego contiene:

HUMAN.SPRGNOME.SPRBADBOY.SPRDRAGON.SPR
TROLL.SPRTHOUL.SPRBEHOLD.SPRFLAG.SPR

Podemos intuir que estos ficheros, cuyos nombres son nombres de personajes, contienen los datos de los personajes. Asimismo, supondremos que HUMAN.SPR es el personaje "humano" que maneja el jugador.

Existe la posibilidad de que no sean jugables todos los archivos: FLAG.SPR ("bandera") tiene muchas posibilidades de ser sólo una animación. En cuanto al resto, podríamos probar a jugar con el dragón:

COPY HUMAN.SPR HUMANSPR.BAK (esto crea una copia de seguridad de HUMAN.SPR)
COPY DRAGON.SPR DRAGSPR.BAK (esto crea una copia de seguridad de DRAGON.SPR)
COPY HUMAN.SPR DRAGON.SPR
COPY DRAGSPR.BAK HUMAN.SPR

(Para volver a poner los archivos como antes, copiaríamos HUMANSPR.BAK en HUMAN.SPR y DRAGSPR.BAK en DRAGON.SPR)

Nótese que no hemos renombrado los ficheros, sino que los hemos copiado para que el ordenador encuentre los "malos" de la partida.

Si hay suerte, el personaje "humano" se habrá convertido en un dragón. Téngase en cuenta que a veces el cambio sólo consigue cambiar la forma (no da habilidades de lucha). Y otras veces, nos quedamos sin la habilidad especial del personaje "normal" pero tampoco adquirimos las del nuevo (por ejemplo, si el humano era un mago, es posible que perdiéramos la magia sin conseguir a cambio el "soplo de fuego" del dragón).

A veces los personajes están definidos a en varios archivos (uno con los gráficos, otro con los especiales, etc.). En dicho caso tendríamos que hacer copia de seguridad de todos y renombrar todos los archivos "sospechosos".

Reemplazar los ficheros de datos [next]

Otro cambio muy fácil de hacer pero que no tiene mayores consecuencias es la búsqueda de archivos de formatos estándar en el juego. Por ejemplo: si el juego tiene archivos ".VOC" o ".WAV" que nuestro lector de archivos de sonido reconoce, podríamos cambiarlos por otros archivos de sonido del mismo formato, quizá grabados por nosotros (¡podemos hacer que el dragón eructe al lanzar fuego!). Otra cosa que podemos hacer es buscar ficheros estándar de gráficos (PCX, GIF, TIF, BMP...) y modificarlos (recordando siempre que el nuevo archivo ha de tener el tamaño del original). Existen algunos programas que buscan gráficos en otros: estos programas también pueden sernos útiles. Pero ten en cuenta que si bien podría ser discutible que cambiar el nombre de los archivos de un programa pueda ser ilegal, cambiar el contenido de los archivos de un programaes claramente una infracción del copyright.

Por supuesto, recuerda que NUNCA puedes distribuir tu "versión personalizada" de un juego.

Incluso limitarte a distribuir los archivos que has creado podría ser ilegal.

Piensa, ante todo, en el daño que podrías estar causando a los creadores del programa. Miles de usuarios podrían no registrar un juego shareware si alguien crea nuevos niveles, o escenarios, gratuitos que funcionen con la versión no registrada. No es ninguna tontería: ficheros tales fueron creados para juegos como Duke Nukem® o Wolfenstein 3D®. ¿Por qué crees que los creadores de DOOM® acabaron desarrollando un sistema de creación de mapas que funcionaba sólo en la versión registrada y prohibieron explícitamente (prohibición que no debería necesitar mostrarse explícitamente) que se editaran los mapas de la versión shareware?

En algunos juegos, editar el mapa puede ser muy fácil. Pero aquí no voy a decir cómo hacerlo.

Editar las partidas grabadas

Un cambio más interesante es el trucaje de partidas grabadas. El ambiente propicio para trucar partidas grabadas requiere un programa que maneje grandes cifras (mayores, a ser posible, de 65535) y que permita grabar partidas grabadas en cualquier momento (algunos juegos sólo permiten grabar cada cierto tiempo). Vamos a ver el camino a seguir para trucar las partidas:

- Apuntar todos los datos numéricos visibles en la pantalla en el momento de grabar (esto es: apuntar dinero, vidas, energía, número de balas,...). Algunos juegos reducen la cantidad de dinero al grabar partidas. En ese caso, habría que apuntar la cantidad de dinero restante.

- Averiguar el valor hexadecimal de todas las cantidades. Para esto hay que usar una calculadora científica que maneje valores hexadecimales. Si no se tiene la calculadora (algunos programas incluyen una), escribir:

GWBASIC (o: QBASIC; o: BASICA)

PRINT HEX$(número_a_averiguar)

(en el caso de QBASIC habría que pulsar "ejecutar" en uno de los menús para que el programa comenzase)

Tras haber apuntado los valores, nos dispondremos a buscarlos en el fichero de partida grabada.

Supongamos que los valores son:

Vidas: 3 (3 hex) Energía: 50 (32 hex)
Dinero: 512 (200 hex)Experiencia: 12345 (3039 hex)

y que la partida grabada es "SAVEGAME.001"

Lo primero que tenemos que hacer es poner ceros delante a todos los números con cifras impares (en este caso, 3 hex se convierte en 03 hex y 200 hex se convierte en 0200 hex). Algunos editores hexadecimales esperan los números divididos en grupos de dos cifras.

Utilizaremos un editor que viene con el DOS, DEBUG:

DEBUG SAVEGAME.001
RCX (resto de: (longitud del archivo / 10000 hex))
5123 <- Anotar el número en un papel y pulsar "enter".
RBX (longitud del archivo / 10000 hex)
0000 <- Anotar también este número y pulsar "enter".
Comencemos nuestra búsqueda:
S 100 5223 3039 (5223hex= 5123 hex + 100 hex: DEBUG utiliza como base la dirección 100; 3039hex es el valor de "experiencia").
D256:1034 (respuestas que da el ordenador).
D256:1253
D256:3600
(Si no apareciese nada, o si en las direcciones indicadas no encontrásemos datos satisfactorios, deberíamos buscar las cifras AL REVÉS: s 100 5223 3930. Es frecuente que el orden utilizado para almacenar las cifras no sea 12 34 sino 34 12. En caso de más de cuatro dígitos sería: 78 56 34 12).
D D256:1024 1040 (buscamos algo antes de la primera dirección indicada)

Entre las cifras tiene que estar el valor que hemos buscado y, probablemente, alguno de los otros valores apuntados. Buscamos en todas las posiciones que nos ha indicado el mandato "S" y nos quedamos con aquel en que aparezcan más valores apuntados. Es frecuente que los valores se almacenen siempre con cuatro cifras, con lo que "3" no sería "03" sino "0003" o "0300".

Para cambiar el valor al máximo tendríamos que entrar en su posición el valor "7FFF" (o, en caso de cifras al revés, "FF7F". Para eso escribiríamos:

E dirección 7FFF.

Si hay ceros delante de la cifra (o detrás, con cifras inversas) podríamos intentar escribir el "7F" en dicha posición y poner un "FF" en la posición del "7F", a ver si aumentaba el valor en cuestión por encima de 65536 ("7FFF" es 32767, pero es que "FFFF" puede ser "65535" o "-1").

Otro medio para averiguar dónde se encuentran los valores es la comparación de dos partidas grabadas realizadas casi a la vez, en que sólo ha cambiado algún dato (por ejemplo, se deja un objeto en el suelo y se vuelve a grabar). La comparación de partidas nos indicará dónde se almacena el equipo, y con ensayo y error averiguaremos cómo añadir objetos a nuestra mochila (metiendo valores en el "espacio vacío" y observando qué aparece al iniciar el juego).

Otro dato que podemos buscar es la posición del personaje. Cambiar esto puede ser interesante, sobre todo si estamos al otro lado de una puerta que no sabemos traspasar. Este dato suele estar cerca de los datos de puntuación, experiencia, resistencia, vidas, etc. Si no podemos averiguar nuestra posición mediante un mapa (recuérdese que no siempre se miden las coordenadas de norte a sur: podemos tener que buscar las coordenadas de varios modos, incluyendo la posibilidad de que la posición cero de todas las coordenadas esté ocupada por pared), podríamos tratar de buscar la posición del jugador comparando partidas grabadas diferenciadas sólo por la posición del jugador.

Una vez tuviéramos apuntada la posición en el archivo en que se almacena la posición, podríamos calcular la posición a la que queremos llevar a nuestro personaje. En cierto juego en que manejaba a un equipo de personajes me resultó más fácil mover a uno de ellos y meterle en el equipo los cadáveres de los demás... ¡que seguían vivos!, y llevarlos a que los resucitaran. Pero unas horas más adelante se me colgó la partida, probablemente a causa de la existencia de dos posiciones para cada personaje. Aunque quizá en otro juego no sea una estrategia demasiado mala.

Al calcular la posición de destino hemos de tener en cuenta que las puertas también ocupan espacio (yo tiendo a marcarlas como una rayita en mis mapas, cuando habrían de ser un cuadrado entero). Pero, por lo demás, siguiendo estas instrucciones se pueden hacer maravillas.

Cuando las partidas grabadas tienen siempre la misma longitud podemos usar siempre las mismas posiciones para buscar los datos. Cuando las partidas grabadas tienen longitud variable esto no suele funcionar.

Además, para complicarnos las cosas, existen maneras de evitar que encontremos los datos. Una de ellas es la compresión de las partidas grabadas: en un archivo comprimido no podemos buscar datos a menos que sepamos cómo descomprimirlo (y yo nunca he entendido del todo cómo funcionan los diversos métodos de compresión/descompresión de archivos). Otra manera de desesperanzar al jugador tramposo es "cifrar" los datos. He visto usar un método de cifrado muy simple en un juego shareware, "One Must Fall". Los archivos de partidas grabadas pueden tener más o menos este aspecto:

D5A9:100 A1 A2 A4 F4 E4 F4 F3 E1 - ED EB ....

Si hiciéramos un xor con el valor a1 para el primer byte, a2 para el segundo, etcétera, leeríamos:

D5A9:100 00 00 07 50 41 52 54 49 - 44 41 ...

En la columna derecha de la pantalla veríamos la palabra "PARTIDA" (el nombre "largo" del archivo), de longitud 7.

El problema, como se ve, es averiguar el primer valor: los demás se averiguan fácilmente.

Otro método de seguridad es el "Checksum": en algún lugar en el archivo (usualmente al comienzo o al final) hay un valor que "certifica" que el archivo no ha cambiado. Si el archivo cambia, hay que calcular un nuevo "Checksum" para que el archivo funcione. No sé cómo calcular checksums, pero quizá funcionen los que produce el "VALIDATE" de MCAFEE.


NOTAS

REN
Cambiar nombre.
En MS-DOS se utiliza el comando REN (REN nombreantiguo nombrenuevo).
En Windows, se puede renombrar con click derecho en el nombre del archivo, seleccionando la opción "Cambiar nombre".
En Unix y similares, se puede utilizar el comando mv (mv nombreantiguo nombrenuevo).
[volver]
COPY
Copiar.
En MS-DOS se utiliza el comando COPY (COPY origen destino).
En Windows, se puede copiar arrastrando un fichero con las opciones Copiar y Pegar del menú Edición (o las teclas Ctrl-C Ctrl-V).
En Unix y similares, se puede utilizar el comando cp (cp origen destino).
[volver]
Calculadora hexadecimal:
Los ordenadores almacenan los números en bytes, "casillas" de memoria que almacenan un valor entre 0 y 255.

Los programadores, para poder escribir estos valores utilizando sólo 2 cifras, utilizan la notación hexadecimal, en la que cada cifra representa un valor entre 0 y 15 (los valores superiores a 9 se escriben utilizando las letras de la A a la F). El valor 16 es una "dieciseisena" y se representa como 10.

Para leer fácilmente la notación hexadecimal podemos utilizar una calculadora.

En MS-DOS, utilizar el procedimiento descrito. Qbasic está en los discos de instalación de MS-DOS 5 y superior y en el directorio OLDDOS de los CDs de Windows 95 y superior. Con MS-DOS anterior, buscar BASICA o GWBASIC.
En Windows, utilizar la calculadora (calc.exe). Es posible que sea necesario seleccionar científica en el menú ver.
En Unix (y gnu/linux), utilizar printf y expr. Ver el manual (man printf; man expr) para más detalles.
[volver]
Editor hexadecimal:
Programa que muestra los datos almacenados en un archivo en forma de series de números hexadecimales, y permite editar estos datos.
Los números hexadecimales se pueden interpretar utilizando una Calculadora Hexadecimal
En MS-DOS, utilizar el procedimiento descrito, a menos que se disponga de un programa especializado, como PC-Tools o Utilidad Norton.
En Windows, armarse de paciencia, salir a Símbolo de sistema MS-DOS y utilizar el procedimiento descrito para MS-DOS, salvo que se disponga de programas especializados.
En Unix (y gnu/linux), se puede utilizar od -x nombre_archivo para visualizar en forma hexadecimal el contenido de los ficheros, pero para editarlos hay que utilizar hexedit, ghex u otro programa especializado.
[volver]
del.icio.us