Saltar al contenido

Escaneo de punteros en Cheat Engine: encuentra direcciones que sobreviven a un reinicio

Cheat-Engine.net Por Cheat-Engine.net Lectura de 9 min 25 vistas

Por qué las direcciones cambian cada vez que reinicias un juego, cómo funcionan los punteros multinivel y cómo usar escaneos de punteros, mapas de punteros y reescaneos para crear entradas que sigan funcionando.

Encontraste tu valor de salud, lo guardaste en una tabla de trucos, reiniciaste el juego y ahora la entrada muestra ?? o un número aleatorio. No es un error tuyo. La mayoría de los valores de un juego viven en una dirección distinta cada vez que se ejecuta. Un puntero es un camino que lleva al valor desde un punto de partida que no se mueve, y el escáner de punteros de Cheat Engine es la herramienta que encuentra esos caminos por ti.

Esta guía asume que ya sabes encontrar un valor con First Scan y Next Scan; si no, lee primero el tutorial de Cheat Engine para principiantes. Usa estas técnicas solo en juegos para un jugador y sin conexión, y haz una copia de seguridad de tus partidas guardadas antes de experimentar.

Por qué las direcciones cambian entre reinicios

Los juegos crean la mayor parte de sus datos mientras se ejecutan. Cuando se carga un nivel, el juego le pide al sistema un bloque de memoria para el objeto del jugador, otro para el inventario, y así sucesivamente. Esto se llama asignación dinámica, y el lugar donde termina cada bloque depende de lo que se haya asignado antes, algo que cambia de una ejecución a otra e incluso entre pantallas de carga. Tu salud se guarda en una posición fija dentro del objeto del jugador, pero el objeto del jugador en sí se mueve.

Además, Windows carga los programas y sus módulos (el ejecutable principal y sus DLL) en direcciones base variables por motivos de seguridad. Por eso las direcciones estables siempre se escriben relativas a un módulo, como "game.exe"+01A2B3C0, en lugar de un número sin más.

En la lista de resultados del escaneo, Cheat Engine muestra en verde las direcciones que pertenecen a un módulo. Son estáticas: mantienen el mismo desplazamiento dentro del módulo en cada ejecución. Las direcciones negras son dinámicas. La mayoría de los valores que te interesan son dinámicos.

Cómo funcionan los punteros multinivel

Un puntero es simplemente un valor que contiene una dirección. Los juegos están llenos de ellos: un "administrador del juego" global guarda la dirección del mundo, el mundo guarda la dirección del jugador, el jugador guarda la dirección de un bloque de estadísticas, y ese bloque guarda la salud en el desplazamiento 18. Seguir una cadena así desde un punto de partida estático siempre lleva a la dirección actual del valor, sin importar dónde se hayan asignado los objetos.

"game.exe"+01A2B3C0   read the 8-byte address stored here  (level 1)
  + 10                read the address stored here         (level 2)
  + 18                this is the health value

Cheat Engine escribe el mismo camino con notación de corchetes como [["game.exe"+01A2B3C0]+10]+18: cada par de corchetes significa "lee la dirección guardada aquí". Los desplazamientos son hexadecimales. Un camino con un solo desplazamiento es un puntero de un nivel; la mayoría de los juegos reales necesitan de dos a cinco niveles.

Paso 1: encuentra la dirección actual del valor

Encuentra el valor como de costumbre y agrégalo a la lista de direcciones. Asegúrate de tener el tipo correcto, porque la entrada de puntero lo heredará; la guía de tipos de valor te ayuda si no estás seguro de si la salud es un valor de 4 Bytes o Float. Confirma la dirección cambiándola y comprobando el cambio en el juego.

Paso 2 (opcional): mira qué accede a la dirección

Haz clic derecho en la entrada y elige Find out what accesses this address o Find out what writes to this address. Cheat Engine conecta su depurador y lista las instrucciones que tocan el valor mientras juegas. Un resultado típico se ve así: movss [rbx+18],xmm0 o mov [rcx+18],eax. El número entre corchetes, aquí 18, es el desplazamiento del valor dentro de su objeto, y el registro (rbx o rcx) contenía la dirección del objeto en ese momento. Si seleccionas la instrucción y abres sus detalles, verás los valores de los registros.

Esta es la forma manual de rastrear punteros: escaneas la dirección del objeto como un valor hexadecimal de 8 bytes para encontrar qué apunta a él, y repites el proceso con cada nivel. Así enseña los punteros el tutorial integrado de Cheat Engine, y vale la pena hacerlo una vez para entender la idea. Ten en cuenta que conectar el depurador puede volver inestables algunos juegos; guarda tu partida antes de intentarlo.

Las instrucciones que encuentres aquí también son el punto de partida para los scripts de inyección de código, una alternativa a los punteros que se explica en la guía básica de Auto Assembler.

Paso 3: haz un escaneo de punteros

Hacer cada nivel a mano es lento, así que Cheat Engine puede buscar automáticamente todos los caminos posibles. Haz clic derecho en la entrada y elige Pointer scan for this address. El cuadro de configuración tiene muchas opciones; las importantes son:

  • Address to find: se rellena con la dirección de tu entrada.
  • Maximum offset value: qué tan grande puede ser cada desplazamiento. El valor por defecto es un buen punto de partida; súbelo solo si los escaneos no encuentran nada.
  • Max level: cuántos niveles de profundidad buscar. Más niveles encuentran más caminos, pero tardan mucho más y producen muchos más resultados. Empieza con unos 5.

Haz clic en OK, elige dónde guardar los resultados (un archivo .PTR más archivos auxiliares) y espera. Un primer escaneo puede producir cientos de miles o millones de caminos candidatos. La mayoría son coincidencias que solo funcionan en esta sesión. Los siguientes pasos los descartan.

Paso 4: reescanea después de reiniciar el juego

Este es el paso que hace que el escaneo de punteros funcione.

  1. Mantén abierta la ventana del escaneo de punteros, o vuelve a abrir más tarde el archivo .PTR guardado desde el menú del escáner de punteros.
  2. Cierra el juego por completo y vuelve a iniciarlo. Carga una partida guardada.
  3. Conecta Cheat Engine de nuevo y encuentra la nueva dirección del valor con un escaneo normal.
  4. En la ventana del escaneo de punteros, abre su menú y elige la opción de reescaneo. Introduce la nueva dirección como la dirección a buscar y confirma.

Cheat Engine comprueba cada camino almacenado con la nueva ejecución y conserva solo los que ahora llevan a la nueva dirección. Repite dos o tres veces, de preferencia con variedad: otra partida guardada, otro nivel y, al menos una vez, después de reiniciar tu PC. Cada ronda elimina los caminos que solo funcionaban por casualidad. También puedes reescanear por valor en lugar de por dirección cuando el valor es conocido y distintivo.

Mapas de punteros: escanea de forma más inteligente

Un mapa de punteros es una instantánea de todos los punteros en la memoria del juego en un momento dado, guardada en el disco. Puedes generar uno desde el menú de clic derecho de la lista de direcciones mientras el juego está en ejecución, y registrar la dirección del valor para esa sesión. Más tarde, en la configuración del escaneo de punteros, puedes escanear usando un mapa de punteros guardado en lugar de la memoria en vivo, y compararlo con otros mapas guardados, cada uno junto con la dirección que tenía el valor en esa sesión.

La ventaja es que puedes reunir primero mapas de varias sesiones de juego y combinarlos en un solo escaneo, sin tener el juego abierto durante la parte lenta. El resultado final es el mismo tipo de lista filtrada que produce una serie de reescaneos, a menudo conseguida más rápido.

Paso 5: elige un resultado y agrégalo a la tabla

La lista de resultados muestra una columna Base Address como "game.exe"+01A2B3C0, luego una columna por cada desplazamiento, y la dirección a la que apunta actualmente el camino. Al elegir entre los sobrevivientes, prefiere:

  • caminos que empiecen en el ejecutable principal del juego o en su módulo principal del motor;
  • caminos más cortos, con menos niveles;
  • caminos que sobrevivieron a los reescaneos más variados.

Haz doble clic en un resultado para agregarlo a la lista de direcciones. La dirección de la entrada aparece con el prefijo P-> para indicar que es un puntero. Revisa su tipo; las entradas del escaneo de punteros usan 4 Bytes por defecto, así que cámbialo a Float u otro tipo si tu valor lo necesita. Ponle una descripción clara y guarda la tabla.

También puedes introducir un puntero a mano: usa el botón para agregar una dirección manualmente, marca la opción Pointer, escribe el módulo y el desplazamiento en el campo de dirección base (por ejemplo "game.exe"+01A2B3C0) y agrega un campo por cada desplazamiento. Cheat Engine muestra la dirección a la que se resuelve cada nivel mientras escribes, lo que facilita detectar errores. Presta atención al orden de los campos de desplazamiento en ese cuadro: el desplazamiento que se aplica primero queda junto a la dirección base.

Límites de los punteros

Un buen puntero sobrevive a los reinicios, pero no necesariamente a las actualizaciones del juego. Cuando el desarrollador publica un parche, la dirección base estática y los desplazamientos pueden cambiar, y tendrás que repetir el escaneo. Guarda tus archivos .PTR y tus notas para poder rehacerlo rápido. Ten cuidado también con los valores que tienen varias copias, por ejemplo las estadísticas por personaje en un grupo; un camino puede llevar al personaje que se seleccionó primero.

Resumen

  1. Encuentra el valor y confírmalo.
  2. Si quieres, usa el depurador para ver qué instrucciones acceden a él.
  3. Haz un escaneo de punteros con niveles y desplazamientos moderados.
  4. Reinicia el juego, encuentra la nueva dirección y reescanea. Repite con sesiones variadas.
  5. Elige un camino corto y consistente, agrégalo a la tabla con el tipo correcto y guarda.

Comentarios

0
Respondiendo a

Nunca se muestra públicamente.

Un moderador revisa los comentarios antes de que aparezcan.

Aún no hay comentarios

Sé el primero en compartir tu opinión.