miércoles, 5 de marzo de 2014

Tutorial - Cheat Engine: Introducción


Tutorial sobre Cheat Engine


Hola a todos. Aquí empieza el primer tutorial del blog, y primer tutorial sobre Cheat Engine, un escáner de memoria gratuíto, que nos ayudará a hackear juegos y programas, crackearlos, y muchas otras utilidades.



Para comenzar, hay que conseguir el programa. Cheat Engine (en adelante CE), es software libre, y lo podemos conseguir desde la web original: http://www.cheatengine.org .

Una vez descargado e instalado, abrimos el ejecutable, Cheat Engine.exe. (En la carpeta donde lo hayamos instalado, también trae un tutorial práctico, Tutorial-i386.exe (así se llama en mi versión), con el que podréis practicar.

Cheat Engine
Cheat Engine



Una vez abierto, nos encontramos con la pantalla principal.

Dado que en este tutorial nos centraremos en lo básico de Cheat Engine, vamos a pasar de algunas de sus utilidades, que ya verémos más adelante.

Cheat Engine nos permitirá ver y modificar la memoria de los procesos. Nos permitirá escanear direcciónes de memoria (addresses) sabiendo el valor que contiene, nos permitirá guardar tablas de direcciónes, y muchas otras cosas.







Veamos las partes de Cheat Engine, y sus utilidades:


Cheat Engine

En primer lugar, hay que "abrir" un proceso, el proceso que deseémos escanear, modificar, debugguear, etc.

Dándole al icono del monitor, de la parte superior izquierda de la ventana, elegiremos el proceso que queremos abrir. En esa misma zona, tenemos un par de botones más: abrir y guardar tablas. Los archivos de tabla guardan las direcciónes de memoria que hemos obtenido.
Sobre la barra de progreso, tenemos el nombre del proceso abierto.

Cheat Engine
Una de las utilidades más importantes del CE, es la posibilidad de escanear la memoria de un proceso en busca de valores (que podemos buscar en forma decimal o hexadecimal).

Dándole al botón de "New Scan", CE hará la primera búsqueda del valor que hemos introducido, por toda la memoria del proceso, y la almacenará en la tabla de la izquierda, que veremos más adelante. Para la primera búsqueda, podemos elegir diferentes tipos de escaneos, tales como "Unknown Value", o "Exact Value"; y el tipo de dato a buscar, 4 bytes, float, texto, etc.
Con el botón de "Next Scan", lo que hacemos es buscar o comparar, según el "Scan Type" seleccionado. A diferencia del primer escaneo, este busca sobre los resultados del escaneo anterior. Se usa, para ver si los valores de las direcciones almacenadas han cambiado.
Con "Undo Scan", volvemos a las direcciones guardadas en el escaner anterior.

Cheat Engine
En la tabla de la izquierda, donde se almacenan las direcciones, también se pueden ver, prácticamente a tiempo real, el valor de esa dirección, junto al valor que tenía en el último escaner.
Cabe decir, que las direcciones son mostradas en hexadecimal. Recomiendo encarecidamente aprender hexadecimal, al menos de forma básica, y binario, además de saber pasar valores de decimal a hexadecimal y viceversa. También podrá ayudar aprender octal. No es absolutamente necesario nada de esto, pero en niveles más avanzados, puede ser muy importante.

Tras seleccionar una (o varias) direcciones, podemos darle a la flecha roja cerca de la esquina inferior derecha de la tabla, para almacenarlas en la tabla inferior, que veremos en unos instantes. También podemos eliminarlas de la tabla y otras opciones dándole click derecho sobre la dirección.

Cheat Engine
A la derecha, sobre la tabla inferior, está el botón "Add Address Manually", con el que podemos añadir una dirección, aportando además el tipo de esa dirección, y una descripcción optativa.
Es importante ver, que en memoria, una dirección no tiene un tipo de dato definido. El tipo es solo la interpretación que hacemos del valor que contiene dicha dirección. Por ejemplo, el tipo "1 byte" llega desde 0 hasta 255 (0xFF), mientras que el tipo "2 bytes", tiene desde 0 hasta 65535 (0xFFFF).
Aprobecho para decir, que poner "0x" antes de un valor, suele significar que es un valor hexadecimal. Por tanto, 0x10 será igual a 16 decimal.
Otra opción que podemos escoger, es que la dirección sea un puntero. Esto es, la dirección apunta a otra dirección. Y el valor mostrado, es el de la dirección apuntada. Esto ya es más avanzado, y no tocaré el tema ahora.

Cheat Engine
La tabla inferior, es donde almacenaremos las direcciones que queramos observar. Ésta es la tabla que guardamos o cargamos en los archivos de tabla de Cheat Engine, de los que hemos hablado antes.
Las direcciónes tienen:

  • Dirección.
  • Tipo.
  • Valor. Éste lo podemos modificar dándole doble click.
  • Descripción. Se la colocas tú.
  • Casilla "Active": Si marcamos esta casilla, el valor de la dirección se quedará estático, y no cambiará. Esto es relativamente falso, ya que en realidad cuando cambia es modificado a su valor "original". Pero se puede interpretar como que no cambia.
El botón rojo que está sobre la tabla, sirve para eliminar todas las direcciones: vaciar la tabla.
A parte de los valores que podemos cambiar de las direcciones, dándole click derecho en una de ellas, tenemos muchas más opciones.

Cheat Engine
A la derecha, sobre el botón "Add Address Manually", tenemos las casillas "Unrandomizer" y "Enable Speedhack".
La primera, sirve para que el proceso no genere números aleatorios. No siempre funciona, depende mucho del proceso. No os recomiendo usar esta función.
La segunda, sirve para establecer el "Speedhack", que viene a ser, aumentar la velocidad con la que ocurren las cosas en el proceso. Al marcarla, aparecerán un par de elementos: el primero, nos permite establecer la "nueva velocidad" del proceso. 1 es la normal. 2, es el doble de rápido. 0.5, la mitad. Con el botón "Apply", establecemos el Speedhack. Acordaros de pulsarlo, o no hará nada.
Este Speedhack es bastante fiable. Suele funcionar bastante bien. Pero no es el tema de estos tutoriales.

Hasta aquí, hemos visto lo básico del Cheat Engine. Quedan aún multitud de opciones, que ya se irán viendo. En próximos tutoriales, pondremos lo visto en práctica. Hasta ese momento, puedes ir probando con juegos o programas. Por ejemplo, buscar el valor de los puntos que tengas en el Solitario.

¡Nos vemos en la siguiente parte!

2 comentarios:

  1. Hola:

    ¿Por qué si usas .net como el C# no te coge las variables?

    Las cosas hecho en C++ bajo Win32 si hace lo que tienen que hacer.

    Saludos.

    ResponderEliminar
    Respuestas
    1. Sí es cierto que va a ser diferente entre una aplicación .NET (o Java, por ejemplo), y una compilada. Pero bueno, igualmente deberías poder. Depende también del programa con el que pruebes, claro. Si estás buscando texto, prueba también marcando la casilla "Unicode". Asegúrate también de que el tipo de dato que buscas es el correcto.

      Eliminar