No soy muy jugón, pero cuando lo hago, me gusta jugar a mi manera. No quiero estar X tiempo en un nivel porque tal o cual enemigo resulta muy difícil o tener que rehacer un nivel porque olvidé recoger un objeto que ahora resulta vital para algo. Sí, uso trucos.
Algunos juegos incorporan un sistema de trucos integrado, cosa que se agradece, pero no son pocos los que no lo hacen. ¿Significa eso que debemos resignarnos? ¡Jamás! Lo que tenemos que hacer es tomárnoslo como un reto y… trucar el juego
En este caso usaré como ejemplo uno de los pocos juegos a los que realmente dediqué horas en su momento: Microsoft Fury3. Si no lo conoces, tranquilo, es de 1995 y poca gente ha oído hablar de él… eran otros tiempos. Seguro que te puedes hacer por ahí con una copia cuando Sinde no mire, pero te aviso, el instalador es de 16 bits (cosas de la época) así que si estás en 64, te toca saltarte el instalador. Afortunadamente con copiar la carpeta del ejecutable a cualquier otro sitio, sirve (ventajas de la época).
El objetivo es crear un “trainer”, un programa que nos permita modificar el comportamiento del juego para darnos “ventaja”. Una de las cosas que más nos van a importar son las armas y su munición y nuestra salud. Los juegos almacenan estos valores en posiciones de memoria… y por supuesto nosotros podemos modificarla a nuestro antojo. Así pues, tenemos dos tareas, encontrar las direcciones de memoria que nos interesen para más tarde parchearlas.
En este primer post, me centraré en cómo encontrar las direcciones de memoria que queremos parchear. En la siguiente entrega veremos cómo hacer un programa que modifique esas direcciones de memoria con los valores que nos interesen.
Para esto usaremos CheatEngine, un programa que examina la memoria de un proceso y nos deja buscar entre sus valores. Puedes hacer lo mismo con cualquier debugger… pero CheatEngine es de lo más cómodo que conozco (con diferencia).
Imaginemos que queremos encontrar nuestra salud. CheatEngine nos permite varios métodos, pero para hacerlo simple, la idea es ir haciendo suposiciones lógicas sobre cómo podría estar implementado. Yo he hecho las siguientes suposiciones sobre el valor de la posición de memoria en la que se almacena la salud:
Así pues, iniciamos Fury y empezamos a jugar. Tan pronto veamos la nave, pausamos el juego, abrimos CheatEngine y le decimos que se “adjunte” a Fury:
No he hecho suposiciones sobre valores concretos de la salud, así que empezaremos diciéndole a CheatEngine que no tenemos ni idea del valor de la posición que buscamos:
Ahora hay 40.148. Son muchas menos, pero aún son demasiadas, así que repetimos la operación hasta que nos quedemos con un número manejable. En mi caso, tras unas cuantas veces, me he quedado con 7 direcciones. Examinando los valores, parece claro que sólo uno tiene sentido para la salud: 004EBCA9, con valor de 135.
¿Por qué digo que 135 tiene sentido para la salud? Sencillo, en un byte se puede guardar un valor entre 0 y 255, en el juego tengo la salud más o menos a la mitad, así que un valor de 135 cuadra con eso. Probemos la teoría, digámosle a CheatEngine que cambie el valor por 255, que debería ser salud máxima. Para esto no tenéis más que hacer doble clic en la dirección de memoria para que pase a edición, y una vez allí cambiáis su valor a 255:
Algunos juegos incorporan un sistema de trucos integrado, cosa que se agradece, pero no son pocos los que no lo hacen. ¿Significa eso que debemos resignarnos? ¡Jamás! Lo que tenemos que hacer es tomárnoslo como un reto y… trucar el juego
En este caso usaré como ejemplo uno de los pocos juegos a los que realmente dediqué horas en su momento: Microsoft Fury3. Si no lo conoces, tranquilo, es de 1995 y poca gente ha oído hablar de él… eran otros tiempos. Seguro que te puedes hacer por ahí con una copia cuando Sinde no mire, pero te aviso, el instalador es de 16 bits (cosas de la época) así que si estás en 64, te toca saltarte el instalador. Afortunadamente con copiar la carpeta del ejecutable a cualquier otro sitio, sirve (ventajas de la época).
¿Qué vamos a hacer?
El objetivo es crear un “trainer”, un programa que nos permita modificar el comportamiento del juego para darnos “ventaja”. Una de las cosas que más nos van a importar son las armas y su munición y nuestra salud. Los juegos almacenan estos valores en posiciones de memoria… y por supuesto nosotros podemos modificarla a nuestro antojo. Así pues, tenemos dos tareas, encontrar las direcciones de memoria que nos interesen para más tarde parchearlas.
En este primer post, me centraré en cómo encontrar las direcciones de memoria que queremos parchear. En la siguiente entrega veremos cómo hacer un programa que modifique esas direcciones de memoria con los valores que nos interesen.
¿Cómo encontrar las direcciones de memoria?
Para esto usaremos CheatEngine, un programa que examina la memoria de un proceso y nos deja buscar entre sus valores. Puedes hacer lo mismo con cualquier debugger… pero CheatEngine es de lo más cómodo que conozco (con diferencia).
Imaginemos que queremos encontrar nuestra salud. CheatEngine nos permite varios métodos, pero para hacerlo simple, la idea es ir haciendo suposiciones lógicas sobre cómo podría estar implementado. Yo he hecho las siguientes suposiciones sobre el valor de la posición de memoria en la que se almacena la salud:
pablito09 dijo:La salud se almacena en una posición de memoria (vale, esto era evidente).
A mayor salud, mayor valor.
Valores negativos no tienen sentido.
Así pues, iniciamos Fury y empezamos a jugar. Tan pronto veamos la nave, pausamos el juego, abrimos CheatEngine y le decimos que se “adjunte” a Fury:
No he hecho suposiciones sobre valores concretos de la salud, así que empezaremos diciéndole a CheatEngine que no tenemos ni idea del valor de la posición que buscamos:
Nos dice que ha encontrado 14.651.392 direcciones de memoria… sigamos refinando la búsqueda (el número de direcciones encontradas puede variar bastante, ya que depende del momento exacto en el que se tome la muestra). Volvemos al fury y nos pegamos un par de porrazos contra el suelo para disminuir la salud. Seguimos sin saber que valor tiene la salud, pero seguro que es menor que antes, así que le decimos a CheatEngine que realice una búsqueda sobre los resultados para mostrar únicamente aquellas que hayan reducido su valor:
Ahora hay 40.148. Son muchas menos, pero aún son demasiadas, así que repetimos la operación hasta que nos quedemos con un número manejable. En mi caso, tras unas cuantas veces, me he quedado con 7 direcciones. Examinando los valores, parece claro que sólo uno tiene sentido para la salud: 004EBCA9, con valor de 135.
¿Por qué digo que 135 tiene sentido para la salud? Sencillo, en un byte se puede guardar un valor entre 0 y 255, en el juego tengo la salud más o menos a la mitad, así que un valor de 135 cuadra con eso. Probemos la teoría, digámosle a CheatEngine que cambie el valor por 255, que debería ser salud máxima. Para esto no tenéis más que hacer doble clic en la dirección de memoria para que pase a edición, y una vez allí cambiáis su valor a 255:
Efectivamente la salud se restaura a su valor máximo. ¿Qué pasaría si nos equivocáramos? Cualquier cosa, desde que se cuelgue el programa, hasta que se pare la nave o vayamos a toda pastilla… simplemente es impredecible.
Con los mismos procedimientos podemos obtener también las direcciones de memoria que manejan el Turbo y cada una de las armas. Para dejaros practicar, pondré la tabla con los resultados, pero no el procedimiento, a ver si lo lográis
Con los mismos procedimientos podemos obtener también las direcciones de memoria que manejan el Turbo y cada una de las armas. Para dejaros practicar, pondré la tabla con los resultados, pero no el procedimiento, a ver si lo lográis
Espero que les aya gustado on este mini post
Perdonen por poner esta categoría pero nadie entraba y me tomo mucho tiempo