Bueno, aquí está la tercera y última parte de mi tutorial, ésta parte va a ser algo extensa ya que intentaré hablar sobre muchos temas a la vez, espero que se pueda entender todo. Para ello utilizareoms un nuevo "juego" a modo de ejemplo llamado
MoneyBag:
DOWNLOAD MONEYBAG: http://www.mediafire.com/?hat2ts8d3por4a7- Inyección de código (creación de script's en Auto Assemble)
- Creación de un Trainer funcional
- Dissect Window
- Modificar código Ensamblador
Al finalizar os daré un ejemplo real, usaremos un videojuego real y os enseñaré como "hackearlo" y crear un
Trainer funcional.
Primero de todo nos descargamos el nuevo juego llamado
MoneyBag, lo he programado yo mismo usando
VB6, el juego es muy sencillo y simula una función muy típica en cualquier juego:
El dinero. He intentado programarlo de la forma más sencilla posible.
El juego empieza con
1750 monedas, el único botón que hay sirve para gastar el dinero, cada vez que lo pulses
gastará 5 monedas. Nuestro principal objetivo será modificar el programa para que el dinero aumente en lugar de decrecer cada vez que pulsemos el botón (inyección de código).
Bueno, empezaremos con lo más sencillo, abrir el juego y
CE, buscar la dirección que almacena el dinero. Como pista os diré que el dinero es del tipo
byte-2, pero si no estáis seguros podéis configurar la búsqueda en
All, os dejo un pantallazo:
Como podéis observar, ya he encontrado la dirección correcta y la he pasado a la parte inferior, he cambiado la descripción para no equivocarme. Una vez que tenéis la dirección en la parte inferior, podéis cambiar el valor manualmente haciendo click con el ratón y apretando la tecla "
Enter", el valor cambiado se verá reflejado automáticamente en el juego.
Ahora hazemos click derecho en la dirección y seleccionamos "
Find out what writes to this address", aceptamos el mensaje de advertencia y se nos abrirá la ventana del debugger, dicha ventana estará en blanco
Volvemos al juego y pulsamos "
Gastar Dinero", el dinero decrecerá y en nuestra ventana aparecerá la sección de código que ha modificado nuestra dirección llamada "
DINERO"
00402C10 - 0F80 D6000000 - jo moneybag_tutorial.exe+2CEC
00402C16 - 66 3B C7 - cmp ax,di
00402C19 - 66 89 46 34 - mov [esi+34],ax <<
00402C1D - 7F 04 - jg moneybag_tutorial.exe+2C23
00402C1F - 66 89 7E 34 - mov [esi+34],di
EAX=000006CC
EBX=0000000A
ECX=0012000A
EDX=00000003
ESI=00615F20
EDI=00000000
ESP=0012F4F0
EBP=0012F5A4
EIP=00402C1DComo podemos observar, el código mueve el valor
ax=6CC a la variable (ésto ya lo vimos en la parte 2), ahora lo que haremos es pulsar el botón "
Show Dissambler", se nos abrirá la ventana
Memory View:
Aquí empieza lo serio (y divertido) de
Cheat Engine, de forma automática,
CE nos muestra la zóna que ha modificado nuestro dinero
mov [esi+34],ax. Vamos directamente a
Tools/Auto Assemble (puedes pulsar
Ctrl+A para ir más rápido) y se abrirá la ventana de creación de script's en
Auto Assemble (a partir de ahora lo llamaré
AA):
La ventana está en blanco, pero por suerte
CE tiene un sistema de plantillas que nos evitará escribir el script, usaremos 2 plantillas: La de inyección de código y la de Cheat Table
- Template Cheat Table: Nos añade las secciones [ENABLE] y [DISABLE] para la creación de un script
- Template Code Inject: Nos añade el código original para poder ser modificado (inyectado)
Para usar las plantillas correctamente has de añadir primero una y luego la otra,
en el mismo orden que te indico, no lo hagas al revés! Empezamos con el menú:
Template/Cheat Table framework code, aparecerá ésto:
Una vez que tenemos el
Cheat Table puesto, añadimos la última plantilla:
Template/Code Injection. Nos aparecerá un mensaje:
Ésta ventana nos pregunta la dirección del salto, aceptamos el valor que nos muestra por defecto: pulsamos
Ok y el código se completa:
Una vez que ya tenemos las 2 plantillas insertadas, guardaremos el script en nuestro
CE, para ello pulsamos el menú:
File/Assign to current cheat table y cerramos la ventana de "
Auto Asemble",
NO pulses el botón "Execute", simplemente cierra la ventana pulsando la [X], vuelve a la ventana principal de
CE, debería estar así:
Se ha creado una nueva entrada en la parte interior que contiene nuestro
AA script, hazemos doble-click encima de
<script> para abrir la ventana del
AA y poder modificarlo:
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
originalcode:
mov [esi+34],ax
jg moneybag_tutorial.exe+2C23
exit:
jmp returnhere
"moneybag_tutorial.exe"+2C19:
jmp newmem
nop
returnhere:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"moneybag_tutorial.exe"+2C19:
mov [esi+34],ax
jg moneybag_tutorial.exe+2C23
//Alt: db 66 89 46 34 7F 04La primera parte de [ENABLE] será el código que se ejecute cuendo activemos el script, cuando desactivemos el script se ejecutará la sección [DISABLE] que contiene el código original, así que nos centraremos siempre en modificar la sección [ENABLE], en mi caso he realizado el siguiente cambio:
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
originalcode:
add ax,A
mov [esi+34],ax
jg moneybag_tutorial.exe+2C23
exit:
jmp returnhere
"moneybag_tutorial.exe"+2C19:
jmp newmem
nop
returnhere:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"moneybag_tutorial.exe"+2C19:
mov [esi+34],ax
jg moneybag_tutorial.exe+2C23
//Alt: db 66 89 46 34 7F 04Como puedes observar, he añadido un
add ax,A justo antes del
mov, eso hará que el dinero aumente en 5 en lugar de disminuir. Recuerda que cuando pulsamos el botón, el programa resta 5 y lo muestra, con mi modificación el programa restará 5, luego sumará 10 y en total es como si sumase 5
Pulsamos
OK para aceptar y cerrar la ventana del
AA y volver a la ventana del
CE, marcamos el script para activarlo y volvemos al "juego", pulsamos el botón de "
Gastar Dinero" y verás como nuestro código se ha inyectado correctamente:
El programa detecta si el dinero aumenta y lo muestra en
rojo, eso significa que lo has hecho bien. Si deshabilitas el script,
CE ejecutará la sección [DISABLE] que contiene el código original, de tal modo que el dinero irá decreciendo. Con un simple click puedes inyectar el
add ax,A de una forma MUY sencilla y practica.
Ahora vamos al siguiente paso, creación de un
trainer. Un
trainer es un programa ejecutable que permite hacer trampas o "hacks" sobre un juego de forma automática, normalmente con el uso de
hotkeys.
CE tiene un sistema para generar trainers de forma sencilla, lo primero es tener el script en
AA funcionando correctamente. En la ventana principal de
CE pulsamos menú:
File/Generate generic trainer lua script from tableLa primera ventana es para crear el
trainer y la segunda nos muestra la
GUI del trainer, pulsamos "
Add Hotkey" en la primera ventana para añadir una tecla automática a nuestro
AA script. Nos pedirá que seleccionemos el item de nuestra table que queremos "trabajar", así que seleccionamos el "
Auto Assemble script"
Al pulsar nos aparece la ventana del
Hotkey:
En el primer recuadro pulsamos directamente la tecla que queremos usar, en mi caso la letra "
Q", abajo seleccionamos la acción que realizará la letra "
Q" así que lo dejamos en "
Toggle script", en la descripción ponemos por ejemplo: "
Hackear Dinero"
Pulsamos "
OK" para volver a la ventana anterior, aquí podemos personalizar un poco el
trainer, poniendo una foto, personalizar el título, mensaje del "About", etc... te dejo que inspecciones. Si eres programador y te manejas con el
IDE puedes probar a usar la opción "
Design userinterface manually" (solo para expertos), una vez finalizado pulsamos en "
Generate Trainer (EXE)" e indicamos el nombre y ubicación de nuestro
trainer, aparecerá la siguiente ventana:
Aquí lo único que debéis saber es la diferencia entre crear el trainer
Gigantic o
Tiny, la versión
Gigantic ocupará bastante (unos 3 MB) y la
Tiny ocupara unos pocos bytes (50 KB), la diferencia será que para la versión
tiny, el usuario necesitará tener instalado
CE en su PC, la
gigantic es completamente
stand-alone. En nuestro caso nos da igual, así que puedes usar
Tiny si te apetece. Una vez generado, puedes cerrar por completo el
CE y el juego, ya tendrás tu trainer:
Para probarlo, abre de nuevo el juego
MoneyBag, y con el trainer ejecutado, pulsa tu tecla de hotkey "
Q", verás como el trainer se ilumina indicando que el script se ha inyectado, prueba a usar el
MoneyBag y verás que el dinero aumenta!! Vuelve a pulsar "
Q" para descativar el script y el juego volverá a la normalidad.
Con un poco de programaciones se pueden crear trainers muy vistosos como hacen los principales grupos Paradox, Theta, BlackxXx, etc...
Éste lo creé yo usando CE + Visual Basic 6, pero aquí ya entraríamos en temas de programación y no lo voy a explicar en éste sub-foro