Novedades

Guia Tutorial avanzado de Cheat Engine para principiantes en x64 bits



Zion

S. Moderador
Desde
9 Abr 2023
Mensajes
10
¿Que es el Cheat Engine?

Cheat Engine es una herramienta de escaneo de memoria y editor hexadecimal desarrollada por Eric Heijnen (Dark Byte) para el sistema operativo Windows. Es un software libre que permite acceder y realizar cambios en los datos almacenados en la memoria de la computadora, lo que le permite a los usuarios cambiar la información en un juego, como la salud, la munición, el puntaje, las vidas y la cantidad de cosas que tienen en el inventario. Cheat Engine es un escáner de código abierto de memoria / editor / depurador para Windows, que te permite gestionar tus propios códigos y combinaciones de teclas para activar acciones específicas en tus videojuegos. Es comúnmente abreviado como CE.

Así que veamos el Tutorial de Cheat Engine (x64).

Así que abra Cheat Engine , luego en el menú principal seleccione ayuda y luego seleccione Tutorial de Cheat Engine.

Tutorials.CETutorialx64.01.png


Luego adjunte al proceso Tutorial de Cheat Engine , debería ser 'Tutorial-x86_64.exe'.

Si no está seguro de cómo adjuntar al proceso, consulte: [TUTORIAL] - Cómo marcar un proceso en Cheat Engine: una guía paso a paso

Bienvenido

Cuando se inicie el tutorial, debería ver algo como esto, simplemente puede hacer clic en el botón siguiente después de leer el texto de ayuda .

Guarde la contraseña en pasos posteriores en caso de fallas (por inyecciones) y para reiniciar más tarde.

Tutorials.CETutorialx32.02.png

Escaneo del Valor Exacto

Entonces, para el paso 2, verá algo como esto.

Tutorials.CETutorialx32.step01.01.png


Lo que necesitamos encontrar es la salud, y aquí es un número entero.

Así que configure el escáner de memoria para encontrar un número entero y para el escaneo de valor exacto, luego establezca el valor en el valor de salud actual , la mayoría de los números enteros se almacenarán en una variable de 4 bytes, así que comencemos allí.

Nota: Los números enteros se pueden almacenar en una variable de 1 byte (byte), una variable de 2 bytes (int16/short), una variable de 4 bytes (int32/int) o una variable de 8 bytes (int64/long).

Cuando esté listo, haga clic en el primer botón de escaneo.

Tutorials.CETutorialx64.step02.01.png


Debería ver una lista de direcciones, en la lista de direcciones encontradas, como esta.

Tutorials.CETutorialx64.step02.03.png


Ahora haga clic en el botón hit me , luego vuelva a ingresar el valor actual y haga clic en el siguiente botón de escaneo .

Tenga en cuenta el valor rojo en la lista, esto muestra que el valor ha cambiado.

Tutorials.CETutorialx64.step02.04.png


Después de hacer clic en el siguiente escaneo , es posible que deba seguir haciendo clic en golpearme y volver a escanear para indicar que la lista de direcciones encontrada es lo suficientemente pequeña como para trabajar con ella.

Tutorials.CETutorialx64.step02.05.png


Simplemente haga doble clic en la dirección en la lista encontrada para agregarla a la tabla de trucos. Luego cambie el valor y congele la dirección , haga doble clic en el valor en la lista de direcciones para editarlo, congélelo haciendo clic en el cuadro habilitador/congelado.

Tutorials.CETutorialx64.step02.06.png


Ahora el siguiente botón debería estar habilitado, haga clic en él para ir al siguiente paso. Haga clic en el botón hit me nuevamente si el siguiente botón aún no está habilitado.

Valor inicial desconocido

Cuando comience el paso 3, debería ver el formulario con este aspecto.

Tutorials.CETutorialx32.step03.01.png


Como dice el texto de ayuda, asegúrese de hacer clic en el botón de nuevo escaneo antes de comenzar nuevos escaneos.

Tutorials.CETutorialx64.step03.02.png


Esto borra los resultados encontrados para comenzar a buscar un nuevo valor.

Aquí es donde sugiero seguir adelante y hacer clic en el botón Hit me , solo para ver cómo se reduce el valor para ayudar a determinar qué tipo de valor buscar.

Tutorials.CETutorialx32.step03.03.png


Tenga en cuenta que el valor se redujo en un número entero , es decir, un número no fraccionario.

Así que configuraría el escáner para 4 bytes y un valor inicial desconocido . Luego haga clic en el primer botón de escaneo.

Tutorials.CETutorialx64.step03.04.png


Ahora haga clic en el botón golpearme .

Luego establezca el tipo de escaneo en un valor reducido y haga clic en el botón de escaneo anidado .

Tutorials.CETutorialx64.step03.05.png


Tenga en cuenta la cantidad de direcciones encontradas, esto es un poco pequeño para la mayoría de los juegos en estos días, los resultados encontrados pueden ser fácilmente de millones para la mayoría de los juegos.

Ahora simplemente siga disminuyendo el valor con el botón Hit me y busque un valor reducido , hasta que los resultados encontrados sean lo suficientemente pequeños para trabajar.

Tutorials.CETutorialx64.step03.06.png


Ahora solo elegimos una dirección y cambiamos el valor para ver si tiene el efecto deseado , así es como funciona.

Aquí es donde sugiero que siempre anote los valores (o simplemente Ctrl+C ) antes de cambiarlos para restablecerlos si no son el valor correcto , para evitar cambiar un montón de direcciones desconocidas y corromper sus archivos guardados al hacer esto. en juegos

El siguiente botón debería habilitarse tan pronto como establezca el valor en 5000 . Después de cambiar el valor y hacer clic en el botón Hit me, la barra de progreso debería llenarse, pero esto no es necesario.

Tutorials.CETutorialx64.step03.07.png


Ahora el siguiente botón debería estar habilitado, haga clic en él para ir al siguiente paso . Haga clic en el botón hit me nuevamente si el siguiente botón aún no está habilitado.

Punto Flotantes(Float)

Cuando comience el paso 4, debería ver el formulario con este aspecto.

Tutorials.CETutorialx32.step04.01.png


Así que haga clic en el nuevo botón de escaneo . Luego configure el escáner para un valor flotante , exacto , ingrese el valor de salud actual .

Cuando la configuración haga clic en el primer botón de escaneo.

Tutorials.CETutorialx64.step04.02.png


Tan solo escanee como antes para encontrar la dirección de salud , luego agréguela a la lista de direcciones .

Ahora haga clic en el nuevo botón de escaneo nuevamente. Luego configure el escáner para un valor doble y exacto , ingrese el valor de munición actual .

Cuando la configuración haga clic en el primer botón de escaneo.

Tutorials.CETutorialx64.step04.03.png


Tan solo escanee como antes para encontrar la dirección de munición , luego agréguela a la lista de direcciones .

Ahora cambie los valores a 5000 , luego el siguiente botón debería habilitarse. Luego haga clic en el botón siguiente para avanzar al siguiente paso.

Buscador de Codigo

Cuando comience el paso 5, debería ver el formulario con este aspecto.

Tutorials.CETutorialx32.step05.01.png


Así que primero encuentre el valor y luego agréguelo a la lista de direcciones .

Continúe y guarde la tabla y la contraseña en este punto , en caso de que el depurador no esté configurado correctamente.

Si necesita ayuda para configurar el depurador, consulte:

Una vez que tenga la dirección en la lista de direcciones, haga clic con el botón derecho en ella y luego seleccione averiguar qué accede a esta dirección.

Tutorials.CETutorialx32.step05.02.png


Cheat Engine le pedirá que adjunte el depurador, simplemente haga clic en el botón .

Tutorials.CETutorialx32.step05.03.png


Luego se abrirá un formulario de depuración, ahora haga clic en el botón de cambio de valor y debería obtener el código que aparece en el formulario de depuración.

Lo que queremos es una instrucción de escritura. Así que buscaremos algo como uno de los siguientes:

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Seleccione la línea de código de la instrucción de escritura , puede hacer clic en el botón Mostrar desensamblador para ver el código en la memoria, luego haga clic en el botón Reemplazar .

No olvides hacer clic en el botón de parada.

Tutorials.CETutorialx64.step05.04.png

El botón de reemplazo reemplazará esa línea de código con NOP (No Operación = No hace nada)

Cheat Engine le pedirá un nombre para la entrada que agregará en la lista de opciones avanzadas.

Introduzca un nombre y haga clic en el botón Aceptar .

Tutorials.CETutorialx64.step05.05.png


Ahora haga clic en el botón de cambio de valor de nuevo en el tutorial .

El siguiente botón debe habilitarse, luego haga clic en el siguiente botón para avanzar al siguiente paso.

Cuando se reemplacen las entradas en la lista de opciones avanzadas, aparecerán con texto rojo.

Tutorials.CETutorialx64.step05.06.png


La lista de opciones avanzadas se puede ver haciendo clic en el botón de opciones avanzadas en la barra de estado en la esquina inferior izquierda del formulario principal de Cheat Engine.

Para restaurar el código original de una entrada en la lista, haga clic derecho en la entrada y seleccione restaurar con el código original.

Tutorials.CETutorialx64.step05.07.png


Tenga en cuenta que el texto es negro después de la restauración.

Tutorials.CETutorialx64.step05.08.png

Punteros

Cuando comience el paso 6, debería ver el formulario con este aspecto.

Tutorials.CETutorialx32.step06.01.png


Así que primero encuentre el valor y luego agréguelo a la lista de direcciones .

Una vez que tenga la dirección en la lista de direcciones, haga clic con el botón derecho en ella y luego seleccione averiguar qué accede a esta dirección.

Tutorials.CETutorialx64.step06.05.png


Luego haga clic en el botón cambiar valor para que el proceso acceda a la dirección.

Al elegir el código para encontrar la dirección base del puntero, intente seleccionar una instrucción que no escriba en el mismo registro que la dirección base.

Aquí estamos interesados en el valor entre corchetes ('[' y ']'), por lo que aquí queremos el valor de RDX.

Tutorials.CETutorialx64.step06.02.png


El desplazamiento aquí es 0, si la instrucción tuviera algo como esto:

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Entonces el desplazamiento sería '12C' (0x12C), tenga en cuenta que esto está en hexadecimal.

Ahora configure el escáner para 8 bytes , valor exacto , marque la casilla de verificación hexadecimal , luego tome el valor encontrado y póngalo como el valor para escanear .

Cuando esté listo, haga clic en el primer botón de escaneo .

Busque en la lista de direcciones encontradas las direcciones con texto verde , estas son direcciones estáticas.

Tutorials.CETutorialx64.step06.03.png


Agregue uno a la tabla de trucos , haga doble clic en la dirección del registro de memoria que se agregó a la lista de direcciones, copie la dirección, luego marque la casilla de verificación del puntero y pegue la dirección en la dirección base de los punteros.

Si no está seguro de cómo hacer esto, consulte aquí: [TUTORIAL] - Como agregar una direccion a la lista de Cheat Engine
Entonces mi puntero se verá así.

["Tutorial-x86_64.exe"+XXXXXX]+0
Debería configurarse algo como esto, recuerde establecer el desplazamiento al desplazamiento que encontró.

Tutorials.CETutorialx64.step06.04.png


Haga clic en el botón Aceptar cuando el puntero esté configurado .

Ahora congele el valor en 5000 y haga clic en el botón de puntero de cambio , el siguiente botón debería habilitarse.

Si el siguiente botón no se habilita, seleccione otra dirección de la lista encontrada, busque una verde que haya cambiado su valor, configúrela como la última y vea si apunta al valor correcto, si es así, cambie el valor se congela y haga clic en el botón de puntero de cambio .

Haga clic en el botón siguiente para avanzar al siguiente paso.

Inyección de Código

Cuando inicie el paso 7, debería ver el formulario con este aspecto.

Tutorials.CETutorialx32.step07.01.png


Aquí seguiremos los mismos procedimientos que en el paso 5 , pero en lugar de hacer clic en reemplazar, haga clic en el botón Mostrar desensamblador.

Tutorials.CETutorialx64.step07.02.png


Esto abrirá el formulario de vista del desensamblador en la dirección de la instrucción.

Tutorials.CETutorialx64.step07.03.png


Con la instrucción seleccionada, presione Crtl+A
para abrir un formulario de ensamblador automático.

En el menú del formulario del ensamblador automático, seleccione la plantilla y luego seleccione la inyección completa.

Tutorials.CETutorialx32.step07.04.png


Esto generará un script para comenzar.

Tutorials.CETutorialx64.step07.05.png


Ahora necesitamos agregar un código que aumente el valor en 2 , luego eliminar el código original que disminuye el valor .

Para aumentar el valor podemos usar INC o ADD .

Así que intentemos algo como esto.

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Ahora agregue el script a la tabla de trucos .

Si no está seguro de cómo hacerlo, mire aquí: [TUTORIAL] - Como agregar un script a la tabla en Cheat Engine
Luego habilite el script y haga clic en el botón hit me .

Esto debería habilitar el siguiente botón, así que haga clic en el siguiente botón para ir al siguiente paso.

Punteros Multinivel

Cuando inicie el paso 8, debería ver el formulario con este aspecto.

Tutorials.CETutorialx32.step08.01.png


Iteracion Manual


Así que aquí seguiremos los mismos pasos que en el paso 6, excepto que veremos qué accede a la dirección base que encontramos , y seguiremos repitiendo esto hasta que se encuentre una base estática .

Así que aquí está mi primera salida del depurador.

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Encontré una base estática en el primer escaneo de la dirección base, pero recuerdo que era una base falsa. Así que aquí lo que queremos es una dirección base en forma de 'process.exe+offset', puede probar uno de los otros que se parecen a 'module.dll+offset' pero quiero decir que aquí resultarán ser punteros falsos. Y sí, la mayoría de los juegos más nuevos tendrán muchos valores e indicadores falsos.

Y la salida del depurador de la dirección que contiene: 0000000001287960

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Y la salida del depurador de la dirección que contiene: 0000000002D6D540

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Y la salida del depurador de la dirección que contiene: 0000000002D6CE40

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Ahora buscamos esa base '000000000123F1C0' y deberías encontrar una dirección estática, pero en los juegos reales continuarías hasta encontrar una base estática.

Con esa dirección estática como base, mi puntero se verá así.

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Tutorials.CETutorialx64.step08.02.png

Escaneo del Puntero

El escaneo del puntero se puede usar para resolver esto rápidamente encontrando primero la dirección del valor deseado, guardando un mapa de puntero generado, reiniciando el juego, buscando la dirección nuevamente, guardando otro mapa de puntero y luego comparando los dos. Se puede encontrar más información en

Finalmente

Una vez que haya encontrado el puntero, congélelo en 5000 y luego haga clic en el botón Cambiar puntero . Si encontró la base correcta, el siguiente botón debería habilitarse después de aproximadamente 2 segundos. Así que haga clic en el botón siguiente para ir al siguiente paso.

Codigo compartido

Cuando inicie el paso 9, debería ver el formulario con este aspecto.

Tutorials.CETutorialx32.step09.01.png


Entonces, como dice el texto de ayuda, hay más de una solución.

Primero necesitamos encontrar una de las direcciones y agregarla a la tabla .

Si tiene problemas para encontrar una dirección, recuerde probar diferentes tipos de valores y no olvide iniciar nuevos escaneos .

Luego, como en el paso 7, queremos ver qué accede a la dirección , para encontrar la función que escribe en la salud del actor.

Continúe y guarde la contraseña si desea probar diferentes formas, este es el último paso del tutorial.

Así que aquí es bueno entender lo que realmente estamos buscando para diferenciar a los aliados de los combatientes.

Cuando se escribe el juego o el motor, los actores y los jugadores pueden escribirse así.

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

El equipo en sí podría ser una estructura, por ejemplo, si se declara como una clase de objeto como la variable 'Coords', que nos gustaría buscar un puntero a la estructura del equipo del actor.

Entonces, una forma en que podríamos hacer esto es encontrar la identificación del equipo o la estructura del equipo en la estructura del jugador.

Encuentra la identificación del equipo en la estructura del jugador


Después de haber encontrado la función que disminuye la salud.

Haga clic con el botón derecho en la instrucción en el formulario de vista del desensamblador y seleccione averiguar a qué direcciones accede esta instrucción.
Tutorials.CETutorialx64.step09.02.png


Luego haga clic en el botón de ataque para los 4 valores .

Debe tener las 4 direcciones en la lista del depurador.

Tutorials.CETutorialx64.step09.03.png


Así que adelante, agréguelos a la lista de direcciones.

Tutorials.CETutorialx64.step09.04.png


Luego, abramos el formulario de estructura de datos de disección.

Tutorials.CETutorialx64.step09.05.png


Obtendrá algunas ventanas emergentes, después de pensar en ellas, debería ver un formulario como este. Tenga en cuenta que tuve que expandir el ancho del formulario para poder mover las columnas.

Ahora, en el mío, el desplazamiento 0x10 se adivinó como un puntero de 8 bytes de ancho en un proceso de 64 bits. Vi que los punteros en 0x10 tenían valores que realmente no parecían punteros.

Así que tuve que cambiarlo a 4 bytes y agregar un nuevo conjunto de elementos que está desplazado a 0x14 con un tipo de valor de 4 bytes. Esta es a menudo la forma en que funciona.

Tutorials.CETutorialx64.step09.06.png


Así que aquí podemos ver que la variable del equipo está en el desplazamiento 0x14 de la estructura.

Ahora necesitamos agregar un código de inyección a un script , luego agregar un código que verifique la variable de equipo de la estructura , para determinar qué actores son aliados y cuáles son combatientes.

Así que queremos algo así.

Tutorials.CETutorialx64.step09.07.png


Entonces, con este script habilitado, cuando el juego escribe en la salud de un actor, esto es lo que sucederá después del salto al código de enlace:
  1. Guarde ( PUSH ) el registro RFLAGS, no es completamente necesario pero sigue siendo un buen hábito al comparar.
  2. Compruebe si el actor está en el equipo 1.
    1. Si el actor está en el equipo 1, establecemos el nuevo valor en 5000 en un formato de coma flotante.
  3. Compruebe si el actor está en el equipo 2.
    1. Si el actor está en el equipo 2, establecemos el nuevo valor en 0 en formato hexadecimal. (flotante 0 == int 0 == hexadecimal 0)
  4. Restaure ( POP ) el registro RFLAGS, esto es completamente necesario si el registro fue PUSHed .
Con esta secuencia de comandos habilitada, haga clic en el botón de reinicio del juego y reproducción automática , luego debería ver que el formulario cambia y se ve así.

Tutorials.CETutorialx32.step09.08.png


Así que haga clic en el botón siguiente para completar el tutorial.

Luego debería ver un formulario que le indica que ha completado el tutorial.

Encuentra una diferencia en los registros


Después de haber encontrado la función que disminuye la salud.

Haga clic con el botón derecho en la instrucción en el formulario de vista del desensamblador y seleccione averiguar a qué direcciones accede esta instrucción.

Tutorials.CETutorialx64.step09.02.png


Luego haga clic en el botón de ataque para los 4 valores .

Debe tener las 4 direcciones en la lista del depurador.

Tutorials.CETutorialx64.step09.03.png


Ahora echemos un vistazo a los registros para ver si podemos encontrar una diferencia en los aliados y combatientes.

Seleccione cada dirección individualmente y presione Ctrl+R .

Organice los formularios para que sea más fácil compararlos.

Tutorials.CETutorialx64.step09.b.01.png


Así que aquí podemos ver que RSI es 1 para los combatientes.

Así que un script como este debería funcionar.

Tutorials.CETutorialx64.step09.b.02.png


Entonces, con este script habilitado, cuando el juego escribe en la salud de un actor, esto es lo que sucederá después del salto al código de enlace:
  1. Guarde ( PUSH ) el registro RFLAGS, no es completamente necesario pero sigue siendo un buen hábito al comparar.
  2. Compruebe si el registro RSI es 1.
    1. Si el registro RSI es 1, establecemos el nuevo valor en 0 en formato hexadecimal. (flotante 0 == int 0 == hexadecimal 0)
    2. Si el registro RSI no es 1, asumimos que el actor es un aliado, por lo que establecemos el nuevo valor en 5000 en un formato de coma flotante.
  3. Restaure ( POP ) el registro RFLAGS, esto es completamente necesario si el registro fue PUSHed .
Con esta secuencia de comandos habilitada, haga clic en el botón de reinicio del juego y reproducción automática , luego debería ver que el formulario cambia y se ve así.

Tutorials.CETutorialx32.step09.08.png


Así que haga clic en el botón siguiente para completar el tutorial.

Luego debería ver un formulario que le indica que ha completado el tutorial.

Fuente
Cheat Engine
 
Última edición:
Atrás
Arriba