Aqui os dejo el 2º Paso del tutorial de cheat engine.
Recuerda nesecitaras el juego del paso 1º para seguir.
En éste paso nos centraremos en encontrar un valor "desconocido". En la parte n1 queríamos trucar el tiempo, el propio juego lo mostraba de forma numérica por pantalla y era MUY sencillo encontrar el valor al poder usar búsquedas exactas. Aquí nos centraremos en buscar el valor de tu vida (barra de color rojo),
como puedes observar, el juego no muestra el valor de tu vida de forma
numérica, así que no sabemos si tenemos 10 puntos de vida, 100, 1000 o
cualquier otro valor interno. ¿Como se hace? Muy fácil:
1. Asegúrate de pausar el tiempo (o de hackearlo usando el paso 1)
2. Familiarízate con el juego, utiliza los botones para alterar el valor de tu vida
3. Carga CE, abre el proceso Game_tut.exe (ver tutorial n1)
4. Configura CE de la siguiente forma
La explicación es sencilla. Usaremos Unknown initial value en Scan Type cuando queremos buscar una dirección cuyo valor desconocemos o es invisible. En Value Type marcamos byte-2, ya que os expliqué que Visual Basic 6.0 utiliza direcciones de 2 bytes para trabajar. La mayoría de los juegos y programas utilizan direcciones de byte-4. Pulsamos First Scan, en mi caso CE devuelve 2,8 millones de direcciones.
El siguiente paso es volver al juego, pulsamos el botón Recibir Daño un par de veces, hasta que veamos que la barra de vida roja empieza a decrecer, en ese momento cambiamos el Scan Type de CE a Decreased Value y pulsamos Next Scan
Lo que hemos hecho con ésta acción es decirle a CE que de las 2,8 millones de direcciones encontradas en la primera búsqueda, nos muestre solo las que han decrecido (entre esas direcciones seguro que estará nuestra salud). En mi caso las direcciones encontradas bajan hasta 5180. Ahora hay que volver al juego, recibir algo de daño y pulsar Next Scan con la opción Decreased Value, cada vez que repitas esta acción, el número de direcciones encontradas por CE irá disminuyendo. Para ser más efectivo puedes probar lo siguiente:
Pulsa el botón Usar poción HP y en CE cambia el tipo por Increased Value,
ésto buscará las direcciones que hayan aumentado, reduciendo mucho la
búsqueda. Puedes ir jugando con el botón de recibir daño o usar poción y
usar búsquedas en Increased o Decreased.
Si
lo haces bien, encontrarás unas 3 o 4 direcciones, cuando tienes
poquitas direcciones puedes probar a modificar una de ellas y ver si
realmente has acertado. En el caso de éste juego, la variable de "vida"
es un valor comprendido entre 0 y 1000, así que en el caso de la foto es
el valor 584 (001D1026), los
otros valores son variables internas que utiliza el control gráfico de
la barra roja. Hacemos doble click en la dirección para mandarla abajo,
cambiamos la descripción para poder identificarla sin problema y
cambiamos su valor a 1000 haciendo doble click en value, volvemos al juego y pulsamos a recibir daño para comprobar si funciona.
Como verás, la vida vuelve a 1000 y sigue decreciendo. Si quisieras "trucar" la vida puedes marcar la casilla como ya vimos en el tutorial n1 con el tiempo, haz la prueba, marca la casilla para hacer freeze a la variable y vuelve a desmarcarla.
Ahora te enseñaré a usar el Debugger para trabajar con una dirección encontrada. Hacemos click derecho en la variable y pulsamos "Find out what writes to this address"
Aparecerá un mensaje de advertencia, básicamente nos avisa que el debugger de CE se acoplará al proceso, pulsamos YES y aparecerá la ventana del debugger
A simple vista el debugger parece simple e inútil, pero no lo subestimes, es MUY poderoso Éste debugger funciona un tanto diferente, ya que solo debuggea la dirección de memoria que hemos pulsado,
ignorando cualquier otra zona de código que se ejecute, así que
volvemos al juego y pulsamos en recibir daño, inmediatamente en el
debugger a parecerá lo siguiente:
Aquí aparecen varias caso, las explicaré paso a paso. En la parte superior, aparece la dirección que se ha ejecutado 72A35F52, los bytes que se han ejecutado 66 86 01 y su traducción en ASM instructions mov [ecx],ax.
A la izquierda del todo hay un contador que indica el número de veces
que se ha ejecutado dicha instrucción, en mi caso he pulsado el botón de
recibir daño 6 veces. En la parte inferior aparece un detalle de las instrucciones ASM ejecutadas (la instrucción exacta aparece señalada bajo <<) y el estado de los registros EAX, EBX, ECX, etc...
Si pulsamos doble click en la instrucción de la ventana superior (o marcamos la instrucción y pulsamos en More Information)
aparece el mismo detalle en una ventana, dicha ventana acepta
copy/paste para tomar notas. Ademas debajo del botón nos "traduce" al
inglés lo que hace dicha instrucción, en éste caso mov es un copy memory
Vamos a investigar que nos ha devuelto CE, os copio el resultado de mi debugger:
72A35F49 - 8B 4C 24 04 - mov ecx,[esp+04]
72A35F4D - 66 8B 44 24 08 - mov ax,[esp+08]
72A35F52 - 66 89 01 - mov [ecx],ax <<
72A35F55 - 33 C0 - xor eax,eax
72A35F57 - C2 0800 - ret 0008
EAX=72A101F2
EBX=72A1A274
ECX=001D1026
EDX=00000209
ESI=004144E8
EDI=001D0FF0
ESP=0012F3C4
EBP=0012F49C
EIP=72A35F55
Bueno, lo que ha ejecutado en un mov [ecx],ax mirando los registros, ECX es 001D1026, es la dirección de mi vida! Lo que hace la instrucción es copiar un valor en dicha dirección, el valor es ax pero... ¿que es ax? Si miramos el registro EAX=72A101F2, AX es la parte del final 1F2, en resumen:
mov [ecx],ax mueve 1F2 (498) a la dirección de la vida, realmente el debugger nos ha mostrado EXACTAMENTE la instrucción correcta que escribe en nuestra vida. Ahora lo que podemos hacer es nopear la
instrucción, CE permite hacer ésta tarea de forma muy fácil. Marcamos
la instrucción en la ventana del debugger y pulsamos en Replace.
Para ser un poco ordenados, escribimos lo que hace nuestro replace: Invencible
Y ahora cerramos el debugger (pulsamos en Stop y luego Close). Volvemos al juego y pulsamos en recibir daño, verás que la vida no se reduce. Si quieres deshabilitar el truco de Invencible pulsa en Advanced Options (está situado en la parte inferior del CE)
Haciendo click derecho en Invencible, podrás restaurar el código original o volverlo a nopear.
Quieres aprender? Pues sigue leyendo !!
lunes, 10 de marzo de 2014
Cheat Engine
Hoy vamos a ver un programa para escanear la memoria y editor hexadecimal (no sirve de nada en programas tipo cliente-servidor)
Os dejo un juego programado en VB6 para aprender mejor su funcionamiento (creditos a mad antrax de la pagina web http://foro.elhacker.net)
El juego
Cheat Engine
1. Primero abrimos el juego y cargamos la partida, a la derecha tendréis vuestra salud y magia, así como el tiempo del juego. A la izquierda vuestra mochila de objetos (vacía) y abajo los controles del juego. En la parte central aparecen los eventos, a modo de información.
2. Abrimos CE y pulsamos el primer botón situado en la esquina superior izquierda, es para abrir el proceso que queremos debuggear o trucar. Está remarcado con un recuadro coloreado.
2. Ahora aparece una ventanita mostrando los procesos en ejecución, por norma general, los procesos abiertos en último lugar a parecen al final del listado. Buscamos el nombre del juego y hacemos doble-click (OPEN)
3. Ahora ya tenemos el proceso abierto, volvemos al juego y empezaremos a "trucar". Nos vamos a centrar en el tiempo. Abajo tienes un botón para poder pausar el juego, esto facilita un poco las cosas. Pulsamos pausa y miramos que valor tenemos en el tiempo, en mi caso lo he pausado en 81
4. Vamos a la ventana del CE, en la parte central hay 3 recuadros, son los más importantes y ahí especificaremos la búsqueda que queremos realizar. Empezaremos poniendo:
Value: 81
Scan Type: Exact Value
Value Type: All
En "Value" ponemos el valor de la variable que queremos modificar/trucar. En mi caso es 81, ya que es el valor que hay en el juego. Como he puesto pausa, el tiempo no decrece y por eso es más fácil buscarlo.
En "Scan Type" ponemos "Exact Value", ya que en mi caso conocemos el valor exacto que queremos buscar (81). Si por casualidad quisieramos buscar un valor desconocido usaríamos "Unknow initial value" (este ejemplo lo veremos al hackear la saludo o maná del jugador, más adelante)
En "Value Type" ponemos "All". Normalmente el 90% de los juegos usan variables de tipo 4-byte, es lo más común, pero en mi juego de ejemplo, las variables son de 2-byte. Por eso, si tienes dudas y no sabes que valor tiene una variable, lo mejor es poner All y CE buscará todas las posibilidades.
Pulsamos el botón FIRST SCAN
CE hará una búsqueda muy rápida y me mostrará TODAS LAS DIRECCIONES DE MEMORIA que contengan en valor exacto 81, en mi caso han salido 438 direcciones. Que significa eso?
Esas 438 direcciones contienen el valor 81 en su interior, lo que significa que 1 de esas 438 será la dirección encargada de almacenar el tiempo del juego. La verdad que 438 son demasiadas así que deberíamos reducir ese número, como lo hacemos? Muy fácil.
1. Quita la pausa en el juego y deja que el valor siga decreciendo, en mi caso dejo que llegue hasta 79 y pulso de nuevo pausa para dejarlo ahí quieto.
2. Volvemos al CE (sin cerrar nada) y cambiamos los valores:
Value: Quitamos el 81 y ponemos 79 (en tu caso por el valor que salga en tu pantalla)
Scan Type: Exact Value (Al ser un número conocido, ponemos un valor exacto)
Value type: All
Y ahora pulsamos el segundo botón que pone: NEXT SCAN. Ojo y no pulses NEW SCAN, ya que borrarías las anteriores 438 direcciones encontradas y tendrías que empezar de nuevo:
En mi caso CE ha devuelto solo 2 direcciones encontradas
60EAFC:1
60EAFC:2
Los número de :1 y :2 significan el tipo de dirección, es decir de 1-byte y de 2-byte. Si nos fijamos es la misma dirección de memoria solo que nos da la posibilidad de trabajar con 1-byte o 2-bytes. Hacemos doble click sobre 60EAFC:2 para mandar la dirección encontrada a la parte inferior.
Ahora que tenemos la dirección en la parte inferior hacemos doble click en su valor, se nos abrirá una ventanita donde podemos cambiar el valor de la dirección, ponemos 99 y damos aceptar. Hacemos lo mismo en la descripción y ponemos la palabra "TIEMPO" (ésto es solo a nivel interno y nos ayudará a ser más ordenados). Por ultimo marcamos la casilla. Lo que hace esta casilla es forzar a que esa dirección contenga SIEMPRE ese valor:
Así es como debería quedar, ahora vuelve al juego y quita la pausa, verás como el tiempo ya no decrece, se queda congelado en un mismo valor. Posiblemente te aparezca 98, eso es debido a que el juego coge el valor (99) le resta -1 y lo muestra, pero CE vuelve a escribir 99 consiguiendo un Cheat/Truco de tiempo ilimitado
Os dejo un juego programado en VB6 para aprender mejor su funcionamiento (creditos a mad antrax de la pagina web http://foro.elhacker.net)
El juego
Cheat Engine
1. Primero abrimos el juego y cargamos la partida, a la derecha tendréis vuestra salud y magia, así como el tiempo del juego. A la izquierda vuestra mochila de objetos (vacía) y abajo los controles del juego. En la parte central aparecen los eventos, a modo de información.
2. Abrimos CE y pulsamos el primer botón situado en la esquina superior izquierda, es para abrir el proceso que queremos debuggear o trucar. Está remarcado con un recuadro coloreado.
2. Ahora aparece una ventanita mostrando los procesos en ejecución, por norma general, los procesos abiertos en último lugar a parecen al final del listado. Buscamos el nombre del juego y hacemos doble-click (OPEN)
3. Ahora ya tenemos el proceso abierto, volvemos al juego y empezaremos a "trucar". Nos vamos a centrar en el tiempo. Abajo tienes un botón para poder pausar el juego, esto facilita un poco las cosas. Pulsamos pausa y miramos que valor tenemos en el tiempo, en mi caso lo he pausado en 81
4. Vamos a la ventana del CE, en la parte central hay 3 recuadros, son los más importantes y ahí especificaremos la búsqueda que queremos realizar. Empezaremos poniendo:
Value: 81
Scan Type: Exact Value
Value Type: All
En "Value" ponemos el valor de la variable que queremos modificar/trucar. En mi caso es 81, ya que es el valor que hay en el juego. Como he puesto pausa, el tiempo no decrece y por eso es más fácil buscarlo.
En "Scan Type" ponemos "Exact Value", ya que en mi caso conocemos el valor exacto que queremos buscar (81). Si por casualidad quisieramos buscar un valor desconocido usaríamos "Unknow initial value" (este ejemplo lo veremos al hackear la saludo o maná del jugador, más adelante)
En "Value Type" ponemos "All". Normalmente el 90% de los juegos usan variables de tipo 4-byte, es lo más común, pero en mi juego de ejemplo, las variables son de 2-byte. Por eso, si tienes dudas y no sabes que valor tiene una variable, lo mejor es poner All y CE buscará todas las posibilidades.
Pulsamos el botón FIRST SCAN
CE hará una búsqueda muy rápida y me mostrará TODAS LAS DIRECCIONES DE MEMORIA que contengan en valor exacto 81, en mi caso han salido 438 direcciones. Que significa eso?
Esas 438 direcciones contienen el valor 81 en su interior, lo que significa que 1 de esas 438 será la dirección encargada de almacenar el tiempo del juego. La verdad que 438 son demasiadas así que deberíamos reducir ese número, como lo hacemos? Muy fácil.
1. Quita la pausa en el juego y deja que el valor siga decreciendo, en mi caso dejo que llegue hasta 79 y pulso de nuevo pausa para dejarlo ahí quieto.
2. Volvemos al CE (sin cerrar nada) y cambiamos los valores:
Value: Quitamos el 81 y ponemos 79 (en tu caso por el valor que salga en tu pantalla)
Scan Type: Exact Value (Al ser un número conocido, ponemos un valor exacto)
Value type: All
Y ahora pulsamos el segundo botón que pone: NEXT SCAN. Ojo y no pulses NEW SCAN, ya que borrarías las anteriores 438 direcciones encontradas y tendrías que empezar de nuevo:
En mi caso CE ha devuelto solo 2 direcciones encontradas
60EAFC:1
60EAFC:2
Los número de :1 y :2 significan el tipo de dirección, es decir de 1-byte y de 2-byte. Si nos fijamos es la misma dirección de memoria solo que nos da la posibilidad de trabajar con 1-byte o 2-bytes. Hacemos doble click sobre 60EAFC:2 para mandar la dirección encontrada a la parte inferior.
Ahora que tenemos la dirección en la parte inferior hacemos doble click en su valor, se nos abrirá una ventanita donde podemos cambiar el valor de la dirección, ponemos 99 y damos aceptar. Hacemos lo mismo en la descripción y ponemos la palabra "TIEMPO" (ésto es solo a nivel interno y nos ayudará a ser más ordenados). Por ultimo marcamos la casilla. Lo que hace esta casilla es forzar a que esa dirección contenga SIEMPRE ese valor:
Así es como debería quedar, ahora vuelve al juego y quita la pausa, verás como el tiempo ya no decrece, se queda congelado en un mismo valor. Posiblemente te aparezca 98, eso es debido a que el juego coge el valor (99) le resta -1 y lo muestra, pero CE vuelve a escribir 99 consiguiendo un Cheat/Truco de tiempo ilimitado
domingo, 9 de marzo de 2014
Empezando
Hola y muy buenas a tod@s y bienvenidos a este blog.
Voy a explicar un poco que es lo que voy a ir publicando en este blog.
1º-Publicare programas de muchos tipos y enseñare a utilizarlos (escaner de memoria, editores hexadecimales, etc...)
2º-Como no resolvere las dudas que tengan los lectores del blog.
3º-Publicare retos informaticos para que os vayais superando a vosotros mismos.
4º-Y muchas mas cosas que os estaran esperando.
Y recordad, lo que hagais con la informacion de este blog sera bajo vuestra responsabilidad.
Hasta la proxima entrada.
Voy a explicar un poco que es lo que voy a ir publicando en este blog.
1º-Publicare programas de muchos tipos y enseñare a utilizarlos (escaner de memoria, editores hexadecimales, etc...)
2º-Como no resolvere las dudas que tengan los lectores del blog.
3º-Publicare retos informaticos para que os vayais superando a vosotros mismos.
4º-Y muchas mas cosas que os estaran esperando.
Y recordad, lo que hagais con la informacion de este blog sera bajo vuestra responsabilidad.
Hasta la proxima entrada.
Suscribirse a:
Comentarios (Atom)