Los programas de trucos para juegos modifican la memoria de un videojuego, alterando así su comportamiento mediante direcciones y valores, con el fin de permitir hacer trampas. Pueden "congelar" una dirección de memoria, impidiendo que el juego reduzca o modifique la información almacenada en ella (por ejemplo, el indicador de salud, el contador de munición, etc.), o manipular los datos en las direcciones de memoria especificadas para adaptarlos a las necesidades de quien hace trampas .
Historia
En las décadas de 1980 y 1990, los entrenadores generalmente se integraban directamente en el juego real por grupos de crackers . Cuando se iniciaba el juego por primera vez, el entrenador se cargaba primero, preguntando al jugador si deseaba hacer trampas y qué trucos quería activar. Luego, el código procedía a cargar el juego real. Estos entrenadores integrados venían con introducciones sobre los grupos que publicaban el juego y el entrenador a menudo se usaba para mostrar las habilidades de codificación de demos del grupo de crackers . [ 1 ] Algunos de estos grupos se centran por completo en su demoscene hoy en día. [ 2 ] En las listas de lanzamientos e introducciones de los grupos de crackers, los juegos entrenados se marcaban con uno o más signos más después del nombre, uno por cada opción o truco en el entrenador, por ejemplo: "Mega Krew presenta: Ms. Astro Chicken++ " . Los entrenadores modernos agregan a sus títulos un solo + o escriben "más" y un número, ya que muchos tienen varias funciones. El número utilizado representa la cantidad de modificaciones que el entrenador tiene disponibles, por ejemplo, "salud infinita" o "muertes de un golpe". Otra diferencia es la inclusión de la versión del juego o la fuente de descarga digital del juego. Por ejemplo: "Hitman: Absolution Steam +11 Trainer", [ 3 ] "FEAR 3 v 1.3 PLUS 9 Trainer", etc. [ 4 ] [ 5 ]
Los entrenadores modernos también se ofrecen como programas descargables por separado. En lugar de modificar directamente la programación del juego, modifican valores almacenados en la memoria. De hecho, esto se ha vuelto tan común que, por definición, los entrenadores actuales solo modifican la memoria; la modificación del archivo ejecutable del juego está mal vista y dichos programas no se consideran verdaderos entrenadores, sino parches.
En la programación orientada a objetos, los objetos de memoria suelen almacenarse dinámicamente en el montón , pero los sistemas operativos modernos utilizan la aleatorización del espacio de direcciones (ASLR) . Por lo tanto, la única forma de modificar dicha memoria de manera reproducible es obtener información desde dentro del proceso del juego. Esto requiere métodos de ingeniería inversa como la interceptación de la API de malloc () y free() , la inyección de código o la búsqueda de punteros de acceso estático. El entrenador se activa cuando se asigna el objeto y se desactiva cuando se libera.
Los sistemas operativos modernos también incluyen ejecutables independientes de la posición (PIE) para mayor seguridad. Junto con ASLR, los binarios se cargan en una dirección de memoria virtual diferente en cada ejecución del código. Esto hace que la modificación confiable de los valores de memoria estática sea más compleja. La dirección de carga debe determinarse y restarse de una dirección de memoria encontrada para obtener un desplazamiento de memoria estática. Este desplazamiento suele ser exactamente la dirección de la variable estática dentro del binario PIE. Por ejemplo, la herramienta de Linux scanmem admite PIE de esta manera. [ 6 ] Para el desplazamiento de memoria configurado, el entrenador del juego también determina la dirección de carga y la agrega durante el tiempo de ejecución. El mismo método también se puede usar para bibliotecas dinámicas .
Punteros de acceso estático frente a enganches de API
Buscar y seguir punteros de acceso inversos a punteros en memoria estática puede resultar engorroso. No proporciona el tamaño del objeto y, si hay varios objetos de la misma clase, a menudo no se pueden manejar correctamente, ya que puede haber, por ejemplo, vectores o listas entre ellos en el montón. Sin embargo, la ventaja es que este método se puede usar para conectarse a un proceso que ya se está ejecutando, si funciona. La compatibilidad con DMA (Asignación Dinámica de Memoria) en Cheat Engine es un ejemplo de ello.
El hooking de API funciona de manera completamente diferente: un precargador carga una biblioteca en el proceso del juego al iniciarlo. La biblioteca espía las asignaciones de memoria dinámica y el descubrimiento comienza con el registro de todas ellas. Con la búsqueda de memoria estática en paralelo es posible hacer coincidir la dirección del valor encontrado con una asignación de memoria única. La idea es cerrar el proceso del juego inmediatamente después de que se encuentre el valor y el objeto aún exista. Entonces, la última asignación de memoria coincidente es la correcta. Por lo tanto, la coincidencia inversa es el método preferido. Se descubre el tamaño del objeto, así como el desplazamiento del valor dentro de él, y la dirección del código de salto hacia atrás en el binario del juego se puede determinar mediante el rastreo de la pila. A menudo se encuentra un constructor y con él es posible realizar un seguimiento de todos los objetos de memoria que asigna. La biblioteca en el proceso del juego y el entrenador del juego necesitan comunicarse entre sí a través de la comunicación entre procesos (IPC) . La desventaja es: esto puede detectarse como malware . Pero es posible encontrar más valores dentro de los objetos volcándolos y comparándolos. Además, la adaptación a otras versiones de juegos y compiladores resulta sencilla, ya que basta con buscar una llamada a una función de la biblioteca con un parámetro conocido (el tamaño del objeto) en el código ensamblador. Por ejemplo, el entrenador de juegos universal gratuito y de código abierto (FOSS) "ugtrain" demuestra que este método es completamente legal con juegos FOSS como ejemplos. [ 7 ]
Herramientas automatizadas utilizadas en la fabricación de entrenadores
En el pasado, los entrenadores a menudo se codificaban en lenguaje ensamblador o en cualquier lenguaje de alto nivel disponible en ese momento. Hoy en día, los entrenadores también se pueden crear con herramientas automatizadas que solo requieren información básica sobre trucos como la dirección y el código de inyección; el programa luego compila el entrenador usando valores y configuraciones predefinidos que no requieren habilidades de programación por parte del usuario final. La herramienta de creación de entrenadores más popular utilizada hoy en día es Cheat Engine , que admite una amplia variedad de tipos de inyección y punteros; otras herramientas que se usaban en el pasado pero que ya no son tan aplicables son Trainer Maker Kit , Game Trainer Studio y Trainer Creation Kit , etc. [ 8 ] Algunas de las técnicas avanzadas que admiten los entrenadores de Cheat Engine incluyen la inyección de código , el cambio de código y la flexibilidad y versatilidad que proporciona su scripting Lua [ 9 ] [ 10 ] que ha dejado obsoletas a otras herramientas de creación de entrenadores que carecían de soporte para algunas de estas características.
Referencias
- ↑ "Página de información del grupo Defacto2 para Fairlight" . Contiene información sobre sus antiguas demos, lanzamientos y estadísticas . Archivado del original el 6 de octubre de 2011. Consultado el 14 de febrero de 2014 .
- ↑ "Demostraciones del grupo Razor1911" . División de la demoscene Razor1911 que programó impresionantes demostraciones en los inicios de los entrenadores integrados . Consultado el 14 de febrero de 2014 .
- ↑ "Hitman Trainer" . Nomenclatura de entrenadores por grupos de entrenadores modernos . 21 de noviembre de 2012. Consultado el 14 de febrero de 2014 .
- ↑ "Lista de instructores de GCW" . Consultado el 14 de febrero de 2014 .
- ↑ "Listado del famoso grupo de entrenamiento de escena DVT" . Consultado el 5 de junio de 2015 .
- ↑ "Scanmem: introduce soporte para tipos de región y direcciones de carga" . GitHub . Consultado el 5 de junio de 2015 .
- ↑ "entrenador de juegos universal "ugtrain"" . GitHub . Consultado el 25 de diciembre de 2015 .
- ↑ "Herramientas para la fabricación de entrenadores" . Consultado el 14 de febrero de 2014 .
- ↑ "FearlessRevolution" . Comunidad dedicada a los entrenadores y tablas de Cheat Engine . 25/03/2020 . Consultado el 25/03/2020 .
- ↑ "Lua" . Wiki de Cheat Engine Lua que explica algunas de las funciones de scripting disponibles en CE . 11/06/2013 . Consultado el 14/02/2014 .
- Crackeo de software
- Hacer trampas en los videojuegos