# Cheat Engine

Cheat Engine, comúnmente abreviado como CE, es un escáner de memoria desarrollado como software libre, además de editor hexadecimal y depurador, desensamblador, ensamblador, speedhack creado por Eric Heijnen (Dark Byte), para el sistema operativo Windows. CE tiene cierto parecido, en cuanto a funciones se refiere, con Memory Hacking Software de L. Spiro, tsearch, y ArtMoney. Cheat Engine se utiliza para escanear la memoria de algún programa con la finalidad de encontrar y por lo general, modificar un valor de interés en el mismo.
Cheat Engine es solo para fines privados y educativos. No obstante, es usado en la mayoría de los casos, para obtener ventajas en videojuegos, es ilegal su uso en la mayoría de los juegos en línea y aunque tiene la posibilidad de acceder (o no) al código interno de cualquier programa en ejecución, las licencias EULA/TOS de muchos programas privativos impiden este tipo de actividades, como su desensamblado e ingeniería inversa, por lo que su uso en el ámbito legal debe limitarse a propósitos que no estén en contra de cualquier cláusula expresada en la licencia del programa objetivo.

## Características y funciones

Cheat Engine también puede crear entrenadores (Trainers) que tienen un cierto nivel de independencia y tienen la facultad de modificar por sí solos la memoria de un programa en específico sin tener que buscar nuevas direcciones en cada momento. Es importante aclarar que además de la modificación de valores concretos en posiciones estáticas de memoria, Cheat Engine permite la edición del código ensamblador que compone al programa, permitiéndole al usuario cambiar también el comportamiento del programa objetivo en un momento dado.
CE tiene una gran flexibilidad en la gestión de la memoria de un proceso, no obstante, sus funciones más destacadas son las siguientes:
* Búsqueda de valores desconocidos, código ASM y demás datos.
* Búsqueda automática de punteros a direcciones dinámicas.
* Reconocimiento de más de 8 tipos de datos diferentes.
* Sofisticado sistema de búsqueda.
* Interfaz intuitiva y ordenada.
* Desensamblado de la sección de código.
* Ensamblado de nuevas líneas en memoria y no en disco.
* API Hooking.
* Inyección de las DLL.
* Gestión del sistema Direct2D y Direct3D.
* Inyección de código ASM.
* Creación de tablas y trainers para guardar resultados.
* Depuración del programa con gran variedad de opciones.
* Mapa de caracteres, subprocesos, rutinas, hilos y llamadas.
* Seguimiento de los registros y la pila del programa depurado.
* Herramientas a nivel de núcleo en sistemas operativos con soporte DVBM.
* Soporte para plugins que añaden mayores funciones a CE.
* Intérprete y editor en tiempo real de Código Lua adaptado (CE Lua)

## Complementos

Cheat Engine permite al usuario, si es desarrollador, añadir funciones adicionales al programa mediante el uso de un sofisticado sistema de complementos, esto consiste en una biblioteca de enlace dinámico que exporta tres funciones:
* GetVersion: es llamada cuando la biblioteca es cargará por primera vez. Su prototipo es:
* DisablePlugin: es llamada el momento de cerrar Cheat Engine o al momento de deshabilitar el plugin en los ajustes del programa. Su prototipo es:
* InitializePlugin: es llamada cuando Cheat Engine se inicia, es el cuerpo, o el inicio del plugin. Su prototipo es:
Los plugins pueden estar codificados en cualquier lenguaje que permita la compilación de bibliotecas de enlace dinámico nativas para Win32. Los lenguajes más usados para ello son C/C++ y Delphi.

## Modo kernel

Es usado por CE para llamar a funciones alternativas en privilegios del núcleo del sistema operativo (Ring 0) y permite al usuario avanzado eludir técnicas antidepuración mediante el uso de puntos de ruptura hardware y anulación de cualquier API de Windows que impida a Cheat Engine realizar su trabajo con normalidad. Es una característica no esencial, y mucho menos frecuente, pero que sin embargo tiene una potencia increíble y es menester mencionarla en un espacio aparte.
El motor de este sistema es un pequeño archivo (dbk32.sys) ubicado en el directorio principal de Cheat Engine. Es un controlador y es la única parte del programa que no está escrita en Delphi. Por las limitaciones de este lenguaje para trabajar en el desarrollo de controladores se usó el lenguaje C para su creación, compatible con el Kit para controladores de Windows.