Entrenador (juegos)

Programa que modifica la memoria de los juegos de ordenador para permitir hacer trampas

Los entrenadores de juegos son programas diseñados para modificar la memoria de un juego de computadora, modificando 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 cambie la información almacenada en esa dirección de memoria (por ejemplo, el medidor de salud, el contador de munición, etc.) o manipular los datos en las direcciones de memoria especificadas para satisfacer las necesidades de la persona que hace trampas en el juego.

Historia

En los años 1980 y 1990, los entrenadores generalmente se integraban directamente en el juego real mediante grupos de crackers . Cuando se iniciaba el juego por primera vez, el entrenador se cargaba primero, preguntando al jugador si deseaba hacer trampa y qué trucos le gustaría habilitar. Luego, el código pasaba al juego real. Estos entrenadores integrados venían con introducciones sobre los grupos que lanzaban el juego y el entrenador solía mostrar las habilidades de codificación de demostración del grupo de crackers . [1] Algunos de estos grupos se centran completamente en su Demoscene hoy. [2] En las listas de lanzamiento y las introducciones del grupo de crackers, los juegos entrenados se marcaban con uno o más signos más después de ellos, uno para cada opción o truco en el entrenador, por ejemplo: "el Mega Krew presenta: Ms. Astro Chicken++ " . Los entrenadores modernos agregan sus títulos con un solo + o escribiendo "más" y un número, ya que muchos tienen varias funciones. El número utilizado representa la cantidad de modificaciones que tiene disponibles el entrenador, por ejemplo, "salud infinita" o "muertes de un solo 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 vienen como programas que se descargan por separado. En lugar de modificar directamente la programación del juego, modifican los valores almacenados en la memoria. De hecho, esto se ha vuelto tan común que los entrenadores actuales, por definición, solo modifican la memoria; la modificación del 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 diseño 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 conexión API de malloc() y free() , la inyección de código o la búsqueda de punteros de acceso estáticos. El entrenador se activa cuando se ha asignado el objeto y se desactiva nuevamente cuando se libera el objeto.

Los sistemas operativos modernos también vienen con 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 de 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 de juegos también determina la dirección de carga y la agrega nuevamente durante el tiempo de ejecución. El mismo método también se puede utilizar para bibliotecas dinámicas .

Punteros de acceso estáticos vs. conexión de API

La búsqueda y el seguimiento de punteros de acceso en sentido inverso a punteros en memoria estática puede ser 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 en el medio en el montón. Pero la ventaja es que este método se puede utilizar 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 enganche de API funciona de forma completamente diferente: un precargador carga una biblioteca en el proceso del juego mientras lo inicia. La biblioteca espía las asignaciones de memoria dinámica y el descubrimiento comienza registrándolas todas. 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 directamente 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, hacerla coincidir a la inversa es el método de elección. Se descubren el tamaño del objeto, así como el desplazamiento del valor dentro de él, y la dirección del código de retroceso en el binario del juego se puede determinar mediante el rastreo hacia atrás. A menudo se encuentra un constructor y con eso 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 que esto se puede detectar 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 todo lo que se necesita es buscar una llamada a una función de biblioteca con un parámetro conocido (el tamaño del objeto) en el desensamblaje. Por ejemplo, el entrenador de juegos universal gratuito y de código abierto "ugtrain" muestra 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 se codificaban a menudo 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 de creación de entrenadores automatizadas que solo requieren información básica sobre trucos, como la dirección y el código de inyección, luego el programa compila el entrenador utilizando 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 que se usa 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 brinda su scripting Lua [9] [10] que ha eliminado gradualmente otras herramientas de creación de entrenadores que carecían del soporte para algunas de estas características. [11]

Referencias

  1. ^ "Página de información del grupo Defacto2 para Fairlight". Contiene información sobre sus demos y versiones anteriores y estadísticas . Archivado desde el original el 6 de octubre de 2011. Consultado el 14 de febrero de 2014 .
  2. ^ "Demostraciones grupales de Razor1911". División de la escena de demostración de Razor1911 que codificó demostraciones impresionantes en los primeros días de los entrenadores integrados . Consultado el 14 de febrero de 2014 .
  3. ^ "Hitman Trainer". Nombramiento de entrenadores por grupos de entrenadores de Modern . 21 de noviembre de 2012. Consultado el 14 de febrero de 2014 .
  4. ^ "Lista de entrenadores de GCW" . Consultado el 14 de febrero de 2014 .
  5. ^ "Listado del famoso grupo de formación de entrenadores de escena DVT" . Consultado el 5 de junio de 2015 .
  6. ^ "Scanmem: introduce el tipo de región y la compatibilidad con direcciones de carga". GitHub . Consultado el 5 de junio de 2015 .
  7. ^ "universal game trainer "ugtrain"". GitHub . Consultado el 25 de diciembre de 2015 .
  8. ^ "Herramientas para la fabricación de entrenadores" . Consultado el 14 de febrero de 2014 .
  9. ^ "FearlessRevolution". Comunidad dedicada a entrenadores y tablas de cheat engine . 25 de marzo de 2020. Consultado el 25 de marzo de 2020 .
  10. ^ "Lua". Cheat Engine Lua Wiki que explica algunas de las funciones de scripting disponibles en CE . 2013-06-11 . Consultado el 2014-02-14 .
  11. ^ "OPTrainers" . Consultado el 23 de junio de 2021 .
Retrieved from "https://en.wikipedia.org/w/index.php?title=Trainer_(games)&oldid=1152323588"