Archivo

Archive for the ‘Game-Hacking’ Category

Mu Online: protocolo. Algoritmo de encriptación.

Como vimos en el artículo anterior, los videojuegos online que constan de un cliente y un servidor se comunican mediante un protocolo.

Dependiendo de la importancia del juego y el nivel de este, resulta más o menos difícil aplicarle ingeniería inversa para conocer su funcionamiento y descubrir cómo se comunica el cliente con el servidor.

En este caso voy a hablar de Mu Online.

Este MMORPG (Massive Multiplayer Online Role Playing Game) posee muchas versiones oficiales  y no oficiales.

Este juego es tan famoso debido a la gran cantidad de servidores que hay. Estos servidores no son oficiales. O sea, este juego no es de código ni licencia abierta, pero su servidor fue robado (gracias a algún gran hacker) y fue sometido a ingeniería inversa para conocer su funcionamiento, y a lo largo de los años las diferentes versiones del servidor han ido evolucionando, al igual que el cliente. Es por esto que hay tantos servidores de diferentes versiones de MuOnline.

Nuestra meta es conocer cómo el cliente se conecta al servidor, y el principal problema es que no podemos simplemente sniffear la conexión ya que veríamos los paquetes que el cliente envía al servidor, pero no entenderíamos nada ya que estos paquetes se envían encriptados.

La criptografía (“escritura oculta”) es la técnica, bien sea aplicada al arte o la ciencia, que altera las representaciones lingüísticas de un mensaje.

En esencia la criptografía trata de enmascarar las representaciones caligráficas de una lengua, de forma discreta.

Y esta encriptación se produce gracias a un algoritmo de encriptación que posee el cliente. Por este algoritmo pasan los datos antes de ser enviados para ser encriptados de tal forma que no sean legibles para la visión humana.

Luego, al llegar al servidor, los datos son desencriptados por el mismo para que los pueda entender, pero eso es una historia aparte.

Mu Online: protocolo y algoritmo de encriptación

Un hacker llamado MiKiOnE encontró el algoritmo que encripta los mensajes dentro del cliente, luego de debuggearlo.

Algoritmo de encriptación

//code
unsigned char T1; //temp
unsigned char package[]; //uncrypt
unsigned char crypt[]; //crypt
unsigned char key[]={
        0xe7,0x6D,0x3a,0x89,
        0xbc,0xb2,0x9f,0x73,
        0x23,0xa8,0xfe,0xb6,
        0x49,0x5d,0x39,0x5d,
        0x8a,0xcb,0x63,0x8d,
        0xea,0x7d,0x2b,0x5f,
        0xc3,0xb1,0xe9,0x83,
        0x29,0x51,0xe8,0x56};
int a;
for(int b=0;b<=2;b++) {
  crypt[b]=package[b]; // copy first 3 bits
}
int a=4;
int size; // size of package
for(int i=0;i<=size;i++,a++) {
  if (a == 32)a=0;
  T1=crypt[i+2]^key[a];
  package[i+3]=crypt[i+3]^T1;
}

//end code

Esto nos facilitará entender los paquetes que el cliente envía al servidor, para modificarlos o para crear un cliente falso que imite hacer alguna tarea, como levelear un personaje o sumar puntos, étc.

En el próximo artículo explicaré cómo hacer para utilizar esto para aprovecharnos del servidor del Mu Online.

Manual de Cheat-Engine: hackeando el Pinball

Qué es Cheat Engine?

Cheat Engine es una herramienta de código abierto diseñado para ayudar con en la modificación de los juegos que se ejecutan sobre Windows, también contiene otras herramientas útiles para ayudar a la depuración de los juegos e incluso las aplicaciones normales.

Viene con un escáner de memoria para explorar rápidamente las variables utilizadas en un juego y permitir cambiarlas, también viene con un depurador, desensamblador, ensamblador, Speedhack, máquina de entrenamiento, herramientas de manipulación directa en 3D, herramientas de inspeccion del sistema.

Es decir, el Cheat Engine es un desensamblador en “tiempo real”. Permite acceder a la memoria ocupada por CUALQUIER proceso y modificarla, no solo la de los juegos.
En este paper nos centraremo en la funcion de : Escanear la memoria RAM reservada por un juego y modificarla posteriormente

Muchos de las trampas que encuentras para juegos tan complejos como World Of Warcraft, Dragon Age I y II son hechas con el CheatEngine.

Instalación

Obviamente nos bajamos (6.2 MB) el Cheat Engine desde aqui: http://cheatengine.org/download/CheatEngine61.exe

Pero no solo podemos bajarlo, tenemos la opcion de bajar el codigo fuente por si acaso alguien quiere hacerle unos arreglitos.

Hay que saber que CE no es un virus, ni un spyware, ni nada por el estilo pero al ser un hacking tool los antivirus pueden jodernos la instalacion, por lo que yo recomiendo que desactiven sus antivirus antes de proceder a la instalacion.

No explicare paso a paso la instalacion porque ufffff todos los usuarios de guindows saben eso (doble click, acepto, instalacion tipica, siguiente, siguiente, instalar, etc…) Despues de instalado nos saltara un muy buen manual de como usarlo pero esta en ingles.

Usando Cheat Engine

Aqui viene la parte interesante del asunto, despues de instalado damos un doble click sobre el icono de nuestro escritorio,  icono que seria muy parecido a este:

Lo cual nos abrira una interfaz grafica con todas las opciones que podremos usar de este maravilloso programa, como dije anteriormente solo me enfocare en el escaneo de memoria para modificar una variable prederminada. Explico a continuacion para que sirve cada boton:

Debido a que estoy haciendo este paper desde mi portatil que solo tiene ubuntu se habran dado cuenta que tengo XP corriendo desde una maquina virtual y es desde hare todo, por tanto esta vez tomaremos como juego de muestra el famoso Pinball de guindows y lo modificaremos para tener una puntuacion altamente ridicula.

Primero abrimos el CE (Abreviaturas de Cheat Engine, para no escribirlo siempre ufff)… dando doble click sobre el icono del escritorio.

Posteriormente buscamos y abrimos normalmente nuestro pinball de guindows, OJO aun no debemos jugar. Una vez tenemos ambos abiertos damos click en el selector de procesos (el que esta señalado con una flechita roja) y seleccionamos el proceso del pinball, se veria algo como esto:

Una vez seleccionado el proceso la pantalla nos quedaria asi:

A continuacion modificaremos el valor de los puntos (Score), pero como saber cual variable modificar?  Como nos damos cuenta cual es? Sencillo, como aun no hemos jugado nada nuestro puntaje esta en cero por lo que en la casilla de escanear escribiremos el numero cero 0, y activamos el filtro de buscar valor exacto, para finalmente dar a “first scan”, tendriamos algo como esto:

Ustedes diran ufff… 442,342 resultados para este valor en la memoria asignada al proceso pinball.exe, chanfleee… Pues nunca dije que fuera facil asi que paciensia chicos. Ahora jugamos un poco para conseguir algunos puntos..

Bueno mas que conseguir algunos puntos me quede un rato jugandolo.. jejej (es entretenido la verdad…) Ahora que tenemos un nuevo Score buscamos ese valor en CE y tendremos una pantalla como esta:

Ya con un nuevo valor buscamos la direccion de memoria y solo nos saldra una..

La cual modificaremos dandole un doble click a la direccion que nos aparecera y posteriormente un click derecho, asi:

Aquí modificamos el valor…

y listo…  pinball se actualizara tras un rato de que sigamos jugando(no seguí poniendo imágenes porque me llego la hora de irme a trabajar).

P.D Recuerden pausar el juego mientras modificamos la variable en la memoria asignada, recuerden que debemos ser usuarios Administradores para modificar segmentos de memoria.

Saludos.

 

Fuente: foro.elhacker.net. Por CloudswX

Debuggers, Decompiladores y Desensambladores

Conceptos

Para entender los conceptos de las principales herramientas usadas para realizar ingeniería inversa sobre diferentes aplicaciones, será mejor que lean en Wikipedia la información que hay sobre estas:

Aplicaciones

Aquí les dejo las herramientas más reconocidas para realizar ingeniería inversa (Cracking en inglés):

OllyDbg: es un depurador de código ensamblador de 32 bits para sistemas operativos Microsoft Windows. Pone especial énfasis en el análisis del código binario, esto lo hace muy útil cuando no está dispone el código fuente del programa.1 Traza registros, reconoce procedimientos, llamadas a las API, swiches, tablas, constantes y strings, así como localiza rutinas de archivos objeto y de bibliotecas. DESCARGA | TUTORIAL

IDA Pro: En informática, Interactive Disassembler (Desensamblador Interactivo), más conocido por su acrónimo IDA, es un desensamblador empleado para ingeniería inversa. Soporta una variedad de formatos ejecutables para diferentes procesadores y sistemas operativos. También puede ser usado como un depurador para executables Windows PE, Mac OS X, Mach-O y Linux ELF. Un plugin de decompilador para programas compilados con C/C++ está disponible a un costo extra. Además, para IDA existen gran cantidad de plugins que facilitan el uso de este desensamblador. DESCARGA

Java Decompiler: Existen diversos decompiladores para aplicaciones programadas en Java que nos permiten extraer el código fuente de las clases (class) de la aplicación. LISTA de decompiladores para Java.

Flash Decompiler: Free Flash Decompiler Gold es un potente y fiable extractor de flash. Que permite exportar todos los recursos tales como imágenes, formas, sonidos, fuentes, textos dinámicos, botones, sprites, scripts y marcos desde cualquier archivo SWF. DESCARGA

GNU Debugger: GDB o GNU Debugger es el depurador estándar para el sistema operativo GNU/Linux. Es un depurador portable que se puede utilizar en varias plataformas Unix y funciona para varios lenguajes de programación como C, C++ y Fortran. Viene en la mayoría de las distribuciones Linux instalado por defecto.

Cheat-Engine: Ya hemos hablado sobre este programa en la sección de Game-Hacking. Cheat Engine es un escáner de memoria, editor hexadecimal y depurador de software creado por Dark Byte y M.A.B.L para el sistema operativo Windows. Cheat Engine se utiliza para hacer trampas (cheat) en los videojuegos. DESCARGA | MINITUTORIAL.

W32Dasm: El W32Dasm es un decompilador de ejecutables de Windows, que nos permite traducir estos ejecutables a código ensamblador para entenderlo mejor. DESCARGA.

Resource Hacker: Resource Hacker (también conocido como ResHacker o ResHack) es una utilidad de extracción de recursos desarrollada por Angus Johnson para Windows. Se utiliza para modificar programas o elementos del sistema operativo, como los iconos de recursos de programas ejecutable (. Exe), programas de extensión (. Dll), y de archivos de recursos (. Res). DESCARGA

 

Bueno, con esto tienen para empezar de a poco. Para aprender mejor las técnicas del cracking les recomiendo que busquen en Internet los llamados “crackmes” que son aplicaciones programadas especialmente para ser crackeadas y así mejorar nuestros conocimientos sobre ingeniería inversa.

Si falta alguna herramienta importante o quieren que agregue otras diganme. Hasta ahora estas son las que he utilizado.

Programando un Trainer para el BlackJack (Linux)

Un trainer es una aplicación que modifica un valor en la memoria de un videojuegos, como ya expliqué anteriormente.

En el post anterior vimos un código que utilizaba las APIs de Windows para modificar el tiempo en el buscaminas de Windows, ahora veremos un código que utiliza APIs de Linux para modificar un juego perteneciente a este S.O.: el BlackJack (viene por defecto con Ubuntu).

Para esto utilizaremos ptrace, que es una función que nos proveen las librerías de Linux para programar en C, y que permite “debuggear” o “tracear” cualquier aplicación. Permite tomar el control de un proceso para modificarlo, ver sus resultados y su funcionamiento. En este caso lo utilizamos para “tomar el control de un proceso” y luego escribir en una dirección de memoria un valor, o cambiar un valor ya declarado.

ptrace is a system call found in several Unix and Unix-like operating systems. By using ptrace (the name is an abbreviation of “process trace”) one process can control another, enabling the controller to inspect and manipulate the internal state of its target. ptrace is used bydebuggers and other code-analysis tools, mostly as aids to software development. [Wikipedia]

Sinopsis

#include 

long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);

El código

#include 
#include 
#include 

int main()
{
ptrace(PTRACE_ATTACH, 3895, NULL, NULL);
wait(NULL);
ptrace(PTRACE_POKEDATA, 3895, 0x8070bd4, 1111111111);
ptrace(PTRACE_DETACH, 3895, NULL, NULL);

return 0;
}

Explicación

PTRACE_ATTACH: con esto nos “atachamos” al proceso, es decir, tomamos su control..cabe destacar que el proceso al que nos atachamos ya está en ejecución. Es como si abriera el proceso para modificarlo.

3895: es el PID (Process ID), es decir, un identificador que identifica a cada proceso, es único y diferente para cada proceso. Para poder ver los PIDs de todos los procesos en ejecución ejecutamos “ps aux” (sin las comillas) en una terminal y nos saldrá una lista con todos los procesos que se están ejecutando en nuestro sistema y en la segunda columna llamada “PID” nos sale el PID de cada proceso..cabe destacar que los PIDs son números. Este PID es el que colocamos aquí.

PTRACE_POKEDATA: esto nos permite introducir valores en la memoria del proceso al que nos atachamos anteriormente.

0x8070bd4: esta es la dirección de memoria en donde modificaremos y almacenaremos el valor que especificaremos a continuación. Esta dirección se puede obtener mediante scanmem que es un editor de memoria como Cheat-Engine, pero para Linux.

1111111111: este es el nuevo valor que se introducirá en la dirección de memoria que especificamos anteriormente. Lo pueden cambiar por los nuevos valores que quiera…cabe destacar que es un valor long en este caso, así que intenten probando este número por si el valor que quieren cambiar no cambia…

PTRACE_DETACH: dejamos seguir corriendo al proceso normalmente ya que hicimos las modificaciones que quisimos en el mismo.

 

Este código lo que hace es modificar al “Balance” en el Blackjack (juego que viene por defecto con Ubuntu). Acuerdensen que tienen que introducir el PID correcto del proceso para abrirlo y modificarlo, el PID una vez que finalizan y vuelven a abrir el proceso cambia, así que estén atentos.

Programando un Trainer para el Buscaminas (Windows)

Un trainer es un cheat que permite editar un valor específico dentro de la memoria de un videojuegos, como puede ser la salud, las balas, el tiempo, étc. Este nos permitiría, por ejemplo, aumentar la salud de nuestro personaje o congelar el valor que contiene el número de balas que disponemos, entonces tendríamos balas infinitas.

Cheat-Egnine es la aplicación que nos permite encontrar estos valores dentro de los videojuegos y editarlos. También tiene otras utilidades que veremos más adelante.

Antes que nada, si no tienes conocimientos sobre las direcciones de memoria y los valores te recomiendo que leas las entradas anteriores publicadas en la sección de Game-Hacking.

Requisitos:

  • Un compilador de C++ y un IDE. Podría ser Dev-C++ que viene con el compilador “gcc”(descargar de aquí ) o Code::Block con la implementaciónn de MinGW.
  • Haber leído las publicaciones anteriores sobre Game-Hacking
  • Saber programar en C++ o ganas de aprender a programar.

Código

Abrimos el Dev-C++ o el IDE que estén usando para programar y vamos a crear un proyecto nuevo. Una vez que tenemos el proyecto, sólo nos falta comenzar a escribir las líneas de código que darán origen a nuestro programa, el trainer.
Okey! Todo bien hasta acá. Para programar la aplicación que nosotros queremos vamos a hacer uso de las famosas APIs de Windows, es decir, las funciones de las DLLs de Windows.

#include 
#include 

int main()
{
int n = 24;
DWORD pid;
HANDLE process;
HWND wnd = FindWindow(0, "Buscaminas");

GetWindowThreadProcessId(wnd, &pid);
process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

WriteProcessMemory(process, (LPVOID)0x0100579C, &n, 8, NULL);

CloseHandle(process);

return 0;
}

Explicación del Código

int n = 24; -> Declara una variable “Integer”, es decir, que contiene un número decimal. Llama a la variable como “n” y coloca el valor “24” dentro de la misma. Ese valor será el que colocaremos, por medio de las APIs, dentro de la dirección de memoria del tiempo del Buscaminas.

DWORD pid; -> Declara una variable característica de Windows. La variable pasa a llamarse “pid” que hace referencia a “Process ID”, es decir, el ID del procesos del Buscaminas que será abierto para guardar en “pid” el ID del proceso.

HANDLE process; -> Otra variable característica de Windows que declara a “process”, que guardará la dirección del proceso del Buscaminas.

HWND wnd; -> Igual que la anterior. Pero guarda la “dirección” de una ventana que es obtenida con “FindWindow()”.

FindWindow() -> Es una API de Windows que permite encontrar ventanas colocando el título de la misma. Ej.: FindWindow(0, “Título de ventana”). Luego esta dirección se pasa a wnd para poder manejarla.

GetWindowThreadProcessId(wnd, &pid); -> API que encuentra el PID de un proceso a través de la búsqueda de una ventana del mismo.

OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid) -> Abre el procesos para escribir y leer sobre él.

WriteProcessMemory(process, (LPVOID)0x0100579c, &n, 8, NULL); -> API más importante para esta implementación. Escribe en la memoria del proceso cambiando un valor. Recuerdan la dirección de memoria que nos salió en Cheat Engine, la dirección de memoria del tiempo del Buscaminas, esa dirección que costo buscarla?. Bueno, en esa dirección de memoria vamos a escribir para cambiar el valor del tiempo. Esa dirección era: 0x0100579c. Y ahí la tenemos, junto a ella está la variable “n”, o sea, el nuevo valor que pasará a tener dicha dirección para cambiar el tiempo. Sencillo.

CloseHandle(process); -> Cerramos proceso.

 

Bueno, después de que tenemos el código, compilamos con Dev-C++ (Ctrl+F9 para compilar el proyecto), ahora tendremos un “.exe”. Bien, ahora abrimos el Buscaminas y ejecutamos el programa que acabamos de crear con este código, gracias al Dev-C++ y su compilador. Y así el valor del tiempo cambiará.

Investiga más sobre esta técnica y sobre el código.

Direcciones de memoria dinámicas y estáticas, Pointers y Offsets

Bueno. Bienvenidos nuevamente a otro tutorial. Creo que después de este tuto van a salir todos hechos unos programados de cheats excelentes xD.
Hoy vamos a ver lo más difícil de las direcciones de memoria: las direcciones de memoria dinámicas.
Qué son las direcciones de memoria dinámicas? Recuerdan que en la publicación anterior vimos como editar un valor de una dirección de memoria, bueno, resulta que esta dirección de memoria en la que editamos el valor era estática, es decir, nunca cambia, siempre va a ser la misma, en este caso era 0100579C. Las direcciones de memoria dinámicas en un programa cambian cuando este se cierra y se vuelve a abrir, o cuando se reinicia, o cuando en un juegos se cambia de mapa, o en el medio del juego. Por ejemplo, tenemos el Counter-Strike y queremos encontrar la dirección de memoria donde se almacena el valor del dinero. Buscamos con el Cheat Engine hasta que logramos encontrarla, por ejemplo, es esta 03fbf5c4. Todo bien, cambiamos el valor del dinero y nos ponemos 16.000. Luego, cerramos el juego y cuando lo volvemos a ejecutar y lo abrimos con el Cheat Engine nos damos cuenta que el valor del dinero ya no se encuentra en la dirección 03fbf5c4, sino que ahora el valor del dinero se encuentra en otra dirección que desconocemos, como por ejemplo 01aa25c4. Lo que ha pasado acá es que la dirección es dinámica y cambió.
Qué problemaaa!!! Ahora cada vez que queramos cambiar valores en el Counter-Strike tendremos que buscar las direcciones de memoria cada vez que cambiemos de mapa, o reiniciemos el juego.
Bueno. Calma!.. Hay una solución: el Offset y el Address of Pointer.
Qué es esto? Pongansen a pensar. De donde salen las direcciones dinámicas? La respuesta es de la suma del “Pointer” y del “Offset”. Sé que aún no entienden, pero intentaré explicarlo lo más fácil.

Bueno…supongamos que tenemos la dirección dinámica donde se guarda el dinero del Counter-Strike, la dirección es 03fbf5c4. Esta dirección es guardada en otra dirección de memoria pero que es estática, por ejemplo, en 03bb546c. O sea, la dirección dinámica donde se almacena el dinero es un número hexadecimal en sí, y este número es almacenado en la dirección 03bb546c, que es una dirección estática, no cambia. Pero la dirección del dinero (que es dinámica) no se almacena tal cual en la dirección estática, sino se le resta algun numero, como por ejemplo, 1CC (este número es llamado Offset, es diferente en todos los programas, pero es estático, nunca cambia). Depués de restarle a la dirección dinámica el Offset, queda un número (llamado Pointer) que es el que realmente se almacena en la dirección estática (en este caso es 03bb546c la dirección estática).

Dirección de memoria donde se guarda el dinero del CS 1.6 (es dinámica la dirección) = 03fbf5c4.
A 03fbf5c4 se le resta 1cc (que es el Offset) y da como resultado 3fbf3f8 (este es el denominado Pointer). Este Pointer es el que se almacena en la dirección de memoria estática.
Ahora, si queremos encontrar la dirección de memoria dinámica que almacena el valor del dinero en CS 1.6, debemos ver que valor esta almacenado en la dirección de memoria estática(03bb546c), en este caso va a ser 3fbf3f8 (que es el Pointer) y sumarle 1cc (que es el Offset). Y nos da como resultado la dirección de memoria dinámica que contiene el valor del dinero!!!

Vamos a Ilustrarlo

Pointer + Offset = Dirección de memoria dinámica.
Pointer se almacena en dirección de memoria estática.
Offset es estático.

Para aclarar dudas, la dirección de memoria del dinero es dinámica porque lo que cambia es el Pointer. Puede ser cualquier número, que sumado al Offset, nos da como resultado la dirección de memoria dinámica donde se almacena el valor que queremos encontrar (que puede ser la vida de nuestro personajes, la fuerza, el dinero, la cantidad de balas que posee, étc).

Esto ha sido una breve explicación. Cualquier duda comuniquensen conmigo o busquen en internet, aunque no hay demasiada explicación sobre esto, pero seguro encuentran algo por los foros (como Foro PortalHacker)

En la próxima publicación veremos como aplicar todo esto en un Cheat creado y programado en C++ por nosotros para el CS 1.6 u otros juegos. Vayan practicando y estudiando..!!

Cheat-Engine: Hackeando videojuegos

Este es el primer tutorial. En este explicaremos como editar un valor en memoria de un juego, en este caso, el buscaminas de Windows. Okey, comencemos! Programas que utilizaremos:
·Cheat Engine que lo pueden descargar desde aquí.
·Buscaminas (winmine.exe) de Windows. Viene por defecto con Windows.

Cheat-Engine

Es una aplicación programada en Delphi, muy útil, que permite la edición de un valor de la memoria de un programa que se está ejecutando. Por ejemplo, estamos jugando Counter-Strike(espero que todos lo conozcan) y nos quedamos sin balas, con esta maravilla podemos editar el valor de una dirección de memoria. Como algunos sabrán, el número de balas que tenemos es un valor, y este valor se guarda en la memoria, concretamente en una dirección de memoria, donde el programa puede acceder a la misma para leer o escribir dicho valor. Con Cheat Engine podemos acceder desde afuera para cambiar el valor de esta dirección de memoria.

Comenzando

Intentaremos congelar el tiempo en el Buscaminas de Windows…
1- Primero exploraremos el buscaminas. Vamos a Inicio>Todos los programas>Juegos>Buscaminas, o sea, ejecutaremos el Buscaminas. Ahora que tenemos el Buscaminas corriendo en nuestra PC podemos ver que al empezar a jugar el tiempo empieza a correr. La pregunta es…Donde se guarda el tiempo que va transcurriendo? La respuesta es…Es un valor, por lo tanto, en una dirección de memoria.
Lo que haremos será acceder a esta dirección con el Cheat Engine y cambiar o congelar el valor!!! No te asustes, es muy sencilo.
2- Instalamos el Cheat Engine. Luego lo ejecutamos y vemos un cartel que habla acerca de un tutorial, hacemos un click en “No”. El programa se ve así:

Ahora sí, a jugar con esos valores!!!! xD. Cerramos el buscaminas y el Cheat Engine que habíamos abierto anteriormente.

Editándonos dentro del juego

Ahora volvemos a ejecutar el Buscaminas, pero no comenzamos a jugar. Ejecutamos el Cheat Engine. Ahora lo que vamos a hacer es abrir el proceso del Buscaminas que ya se está ejecutando, desde el Cheat Engine. Asi que vamos a hacer click en el icono de la computadora que aparece en verde.

Nos aparecera la lista de todos los procesos que se estan ejecutando en nuestra Pc (“Process List”). Bajamos la barra hasta abajo hasta encontrar el proceso winmine.exe ,o sea, es el Buscaminas que se esta corriendo. Y le damos a “Open” (abriremos el procesos dentro del Cheat Engine).

Ahora ya podemos ver en la parte superior del programa que hemos abierto el proceso winmine.exe (Buscaminas) desde el CH (abreviacioón que comenzare a utilizar de ahora en adelante para el Cheat Engine xD). Ahora viene lo mas dificil (no tanto :D), tendremos que buscar la dirección de memoria en donde se almacena el valor del tiempo del Buscaminas para editarlo o congelarlo. Volvemos al Buscaminas que tenemos abierto y vemos que todavia no hemos empezado a jugar, por lo tanto, el valor del tiempo es igual a 0. Entonces donde vemos que dice “Value:” (marcado con rojo en la sgte. imagen) hay un cuadro de texto, ahi escribimos 0, es decir, el valor que tiene el tiempo en el juego actualmente. Y luego le damos a “First Scan” (primer escaneo) y CH buscara en el juego todas las direcciones de memoria que contengan el valor 0 (cero).

Pero..Cual de todas esas direcciones de memoria es la del tiempo??? Bueno..calma, buscar una direccion no es nada facil. Sigamos.
Tenemos demasiadas direcciones. Lo que vamos a hacer es empezar a jugar al Buscaminas, es decir, haremos click en uno de los cuadrados para empezar a buscar minas xD. Listo, ahora el tiempo ha empezado a correr, y obviamente alguna de esas direcciones que tenemos ha empezado a correr al igual que el tiempo en el juego. Lo que ahora haremos sera buscar esa direccion a traves de su valor como lo hicimos anteriormente, entonces, donde dice “Value:” hay un cuadro de texto (donde ingresamos anteriormente el 0), alli vamos a colocar el valor del tiempo actual en el Buscaminas, para esto vamos a ver cuanto lleva el tiempo del juego e ingresaremos un numero mas adelantado para esperar que el tiempo llegue a ese valor y pulsaremos rapidamente “Next Scan” (siguiente escaneo).
Por ej.: El tiempo en el juego va por 25 segundos, lo que haremos en CH es colocar 30 en el casillero y esperaremos a que el tiempo del juego llegue a 30 segundo y cuando lo haga rapidamente presionaremos “Next Scan”.

Lo que hace esto es buscar el valor 30 dentro de todas las direcciones que aparecieron cuando colocamos el 0 para comenzar a escanear. Primero el tiempo estaba detenido, en 0, buscamos ese valor con “First Scan”, nos aparecieron miles de direcciones con ese valor, entre ellas estaba la del tiempo. Luego para despejar las demas empezamos a correr el juego y el tiempo comenzo a correr tambien y colocamos el valor 30 para ser escaneado entre todas esas direcciones que anteriormente nos aparecieron y esperamos que el tiempo en el juego llegue a 30. Le dimos a “Next Scan”, lo que hace esto es buscar un valor entre todas las direcciones de memoria que nos aparecieron antes. Y alli despejamos las demas direcciones y nos quedo solo una, la del tiempo, con su respectivo valor.

Encontramos la dirección de memoria del tiempo con su valor!! Lo logramos, ahora solo nos queda jugar con ella. Es decir, podemos cambiarle su valor o congelarla en el valor actual y no seguira corriendo el tiempo. En el caso del Counter-Strike, podriamos congelar el numero de balas y asi nunca se nos acabarian :D.
Hacemos doble click en la direccion de memoria que contiene el valor del tiempo y abajo nos aparecera la misma. Y si hacemos doble click donde dice “Value” (marcado con amarillo en la imagen anterior) podremos cambiar su valor, el valor de tiempo, poner el tiempo que queramos. O congelar el valor haciendo click en el cuadradito que aparece debajo de “Frozen”….
Como veran es algo muy facil!!!
Perdonen el extenso tutorial, pero quiera que entiendan cada punto, lo que es una direccion de memoria, los valores, étc.
Nota: El Cheat Engine se puede utilizar para una gran (por no decir inmenza) cantidad de juegos, cambiando valores en el juego…Ojo! Algunos valores corresponden a la luminosidad del juegos, la transparencia de las paredes, etc. Podraan hasta crear un cheat para ver a traves de las paredes en el Counter-Strike, o agregarse vida.