[Tutorial] Usar Cheat Engine para modificar juegos + inyección de código

Iniciado por Mad Antrax, 1 Febrero 2013, 11:46 AM

0 Miembros y 1 Visitante están viendo este tema.

xavieeee

Buenas,

He seguido viendo ejemplos y por fin he conseguido hacer algo con CE

El problema que tenia es que no era capaz de encontrar la dirección estática de las variables que quería. Lo he solucionado con el siguiente script para auto assemble.
Con este código cambio el valor de una variable a 100, sin importar el cambio de dirección.

[ENABLE]
alloc(stack1,1024)
label(originalcode)
label(exit)
label(returnhere)

stack1:
mov [esi+000000E0],#100
originalcode:
//mov [esi+000000E0],eax

exit:
jmp returnhere

"ClientRuntime.dll"+93600D:
jmp stack1
nop
returnhere:





[DISABLE]
dealloc(stack1)
"ClientRuntime.dll"+93600D:
mov [esi+000000E0],eax


Este esto son los datos de memory viewer  que hay que extraer para elaborarlo analizando la dirección desde find out what writes to this address
ClientRuntime.dll+93600D - 89 86 E0000000        - mov [esi+000000E0],eax

Este es el manual que segui:
https://www.youtube.com/watch?v=Ov37X9Ldn44

Funciona medio bien, me explico, la variable que analizo, no solo cambia cuando es escrita por el proceso que encuentro, entonces en algunos momentos del juego el scrip deja de ser efectivo 100%
He intentado crear el mismo script para las instrucciones que encuentro en find out what accesses to this address, ya que el count de estos aumenta cada segundo pero cada vez que intento activar el script el juego se cierra.

Estos son los dos procesos con los que intento hacer el script y el juego se cierra:
ClientRuntime.dll+935C25 - 81 3A 40420F00        - cmp [edx],000F4240
ClientRuntime.dll+3C18A7 - FF 30                 - push [eax]

No se si es que escribo mal el código ya que la  estructura no es igual o por otra cosa.


Cualquier ayuda sera agradecida.


Un saludo,

aquamoon

Quiero saber si se puede hackear Eden Eternal con este metodo?? ayuda plsss

Mad Antrax

Cita de: xavieeee en 23 Junio 2015, 22:15 PM
Buenas,

He seguido viendo ejemplos y por fin he conseguido hacer algo con CE

El problema que tenia es que no era capaz de encontrar la dirección estática de las variables que quería. Lo he solucionado con el siguiente script para auto assemble.
Con este código cambio el valor de una variable a 100, sin importar el cambio de dirección.

[ENABLE]
alloc(stack1,1024)
label(originalcode)
label(exit)
label(returnhere)

stack1:
mov [esi+000000E0],#100
originalcode:
//mov [esi+000000E0],eax

exit:
jmp returnhere

"ClientRuntime.dll"+93600D:
jmp stack1
nop
returnhere:





[DISABLE]
dealloc(stack1)
"ClientRuntime.dll"+93600D:
mov [esi+000000E0],eax


Este esto son los datos de memory viewer  que hay que extraer para elaborarlo analizando la dirección desde find out what writes to this address
ClientRuntime.dll+93600D - 89 86 E0000000        - mov [esi+000000E0],eax

Este es el manual que segui:
https://www.youtube.com/watch?v=Ov37X9Ldn44

Funciona medio bien, me explico, la variable que analizo, no solo cambia cuando es escrita por el proceso que encuentro, entonces en algunos momentos del juego el scrip deja de ser efectivo 100%
He intentado crear el mismo script para las instrucciones que encuentro en find out what accesses to this address, ya que el count de estos aumenta cada segundo pero cada vez que intento activar el script el juego se cierra.

Estos son los dos procesos con los que intento hacer el script y el juego se cierra:
ClientRuntime.dll+935C25 - 81 3A 40420F00        - cmp [edx],000F4240
ClientRuntime.dll+3C18A7 - FF 30                 - push [eax]

No se si es que escribo mal el código ya que la  estructura no es igual o por otra cosa.


Cualquier ayuda sera agradecida.


Un saludo,


Hola, me alegra leer éste tipo de cosas, veo que has avanzado bastante. Respecto a tu última pregunta... los otros opcodes que has encontrado (ClientRuntime.dll+935C25 - 81 3A 40420F00        - cmp [edx],000F4240 & ClientRuntime.dll+3C18A7 - FF 30                 - push [eax]) seguramente sean sharedcode. Es decir:

La instrucción cmp [edx],000F4240 debe acceder o modificar tu variable y alguna otra variable adicional, por eso cuando inyectas el autoassemble en ese opcode también cambias el valor a otra zona de memoria y por eso crashea. Sigue leyendo el tutorial y aprende como disseccionar los sharedcodes :)

Si tienes dudas me preguntas :)
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

xavieeee

Buenas,

He encontrado tu manual que habla de shared codes, lo he entendido todo, pero no encuentro las instrucciones para lo que quiero hacer.
Te lo comento a ver si me puedes orientar un poco.

En mi juego cuando comienzo una batalla hay puede haber de 2 a 9 jugadores y ademas se pueden disputar varias batallas al mismo tiempo.

En cualquier caso yo lo único que quiero hacer es dividir el valor de la vida de todos los players x una variable que depende de cada batalla. Me explico, battalla 1 nivel 50, quiero que la vida de todos los palyers se divida por 50, batalla 2 nivel 75, quiero que la vida de todos los players se divida por 75.

Esta es la instrucción que accede a  la vida de todos los players que están en las batallas.  ClientRuntime.dll+935C25
Cuando visualizo la ventana "find out what addresses this instruction accesses" se van añadiendo todas las vidas de los jugadores a medida que voy abriendo batallas.

Llegados a este punto no se como continuar y peor aún, no se que buscar para realizar lo que quiero hacer.

Muchas gracias por tu ayuda.

Un saludo,

Mad Antrax

Cita de: xavieeee en  4 Julio 2015, 04:01 AM
Buenas,

He encontrado tu manual que habla de shared codes, lo he entendido todo, pero no encuentro las instrucciones para lo que quiero hacer.
Te lo comento a ver si me puedes orientar un poco.

En mi juego cuando comienzo una batalla hay puede haber de 2 a 9 jugadores y ademas se pueden disputar varias batallas al mismo tiempo.

En cualquier caso yo lo único que quiero hacer es dividir el valor de la vida de todos los players x una variable que depende de cada batalla. Me explico, battalla 1 nivel 50, quiero que la vida de todos los palyers se divida por 50, batalla 2 nivel 75, quiero que la vida de todos los players se divida por 75.

Esta es la instrucción que accede a  la vida de todos los players que están en las batallas.  ClientRuntime.dll+935C25
Cuando visualizo la ventana "find out what addresses this instruction accesses" se van añadiendo todas las vidas de los jugadores a medida que voy abriendo batallas.

Llegados a este punto no se como continuar y peor aún, no se que buscar para realizar lo que quiero hacer.

Muchas gracias por tu ayuda.

Un saludo,

Bien, al menos ya tienes una tercera parte del shared code resuelta, ahora tienes que continuar. FIjate la instrucción del opcode ClientRuntime.dll+935C25, Imagina que es algo parecdo a mov [esi+CA],ebx

despues de hacer un "find out what addresses this instruction accesses", pulsa Ctrl+R (show registers) en cada dirección, copia el valor de la pointer base (en mi ejemplo sería el valor de ESI), luego agrupa las direcciones similares por grupos en el disseccionador de estructuras.

Si tienes dudas, dejame un mensaje y te miro de ayudar por TeamViewer.

Saludos y suerte
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

Adelotrenton234

Estuvo muy bueno el tutorial, gracias. Muy bien explicado. :D

Pero quisiera saber si en vez de inyectar un código que haga que se incremente el dinero [add aex, (cantidad en hex)] quisiera que fuese congelado. ¿Qué instrucción debería de ocupar para hacerlo?

Takeshy

Hola, muy buenas, me he leido un poco todo el tema y las replicas que tiene este hilo (sobre todo al principio, con ejercicios y pruebas de otros users)

Me surge una pregunta, como se puede modificar un trainer que ya esta en .exe
Lei mucho que decian que la mayoria de juegos en facebook no se puede y me quedo claro que ciertas cosas (local) si se puede, pero en este caso FARMVILLE y FARMVILLE 2 (este ultimo es el caso) son muy explotados ultimamente con este trainer!!
http://www.iyiblogcu.net/farmville-2-new-trainer-hile-programi-ve-kullanimi/

Lo que me pregunto es como modificarlo? ya que a muchos se les puede hacer una pasada que una cosecha te de 300 rabanos (o lo que estes plantando) pero a otros, (en mi caso) con 100 me bastan, y tambien porque al generar 300 cosechas hace que el juego se tarde en generar esa cantidad, el trainer tiene otras opciones que con solo apretar un boton se automatizan, supongo ahi ya son los scripts presonalizados que aqui han explicao...

Bueno no me quiero alargar (aunque ya lo hice creo), disculpas, la pregunta es esa como modificar internamente ese trainer y volverlo a hacer funcional ahh y de paso trabajar una version en español, Gracias!

PD: Me ha gustado todo el trabajo que ha realizado en este post desde sus inicios, yo no entiendo mucho, solo algunas cositas y he manejado el cheat para hacer cambios de codigos (reemplazar un codigo por otro) para la farmville que de hecho es lo que mas usamos en ese juego, los cambios de codigos y aumentar ciertos indicadores basicos..

Gracias MadAntrax por este post desde el 2013  ;-)
Feliz dia!

Mad Antrax

Cita de: Takeshy en 20 Julio 2015, 01:33 AM
Hola, muy buenas, me he leido un poco todo el tema y las replicas que tiene este hilo (sobre todo al principio, con ejercicios y pruebas de otros users)

Me surge una pregunta, como se puede modificar un trainer que ya esta en .exe
Lei mucho que decian que la mayoria de juegos en facebook no se puede y me quedo claro que ciertas cosas (local) si se puede, pero en este caso FARMVILLE y FARMVILLE 2 (este ultimo es el caso) son muy explotados ultimamente con este trainer!!
http://www.iyiblogcu.net/farmville-2-new-trainer-hile-programi-ve-kullanimi/

Lo que me pregunto es como modificarlo? ya que a muchos se les puede hacer una pasada que una cosecha te de 300 rabanos (o lo que estes plantando) pero a otros, (en mi caso) con 100 me bastan, y tambien porque al generar 300 cosechas hace que el juego se tarde en generar esa cantidad, el trainer tiene otras opciones que con solo apretar un boton se automatizan, supongo ahi ya son los scripts presonalizados que aqui han explicao...

Bueno no me quiero alargar (aunque ya lo hice creo), disculpas, la pregunta es esa como modificar internamente ese trainer y volverlo a hacer funcional ahh y de paso trabajar una version en español, Gracias!

PD: Me ha gustado todo el trabajo que ha realizado en este post desde sus inicios, yo no entiendo mucho, solo algunas cositas y he manejado el cheat para hacer cambios de codigos (reemplazar un codigo por otro) para la farmville que de hecho es lo que mas usamos en ese juego, los cambios de codigos y aumentar ciertos indicadores basicos..

Gracias MadAntrax por este post desde el 2013  ;-)
Feliz dia!

Hola, vayamos por partes.

Para modificar un trainer ya compilado deberás hacerlo como cualquier otra aplicación ya compilada; descompilar, desensamblar, analizar el código y recompilar de nuevo. Es una tarea bastante compleja sobretodo si se pretende hacer sin conocimientos de ingeniería inversa. Yo te recomiendo que en lugar de eso, intentes crear tu mismo el trainer, ya que será más sencillo. No tengo demasiado interés en juegos tipo flash/facebook, así que poco podré ayudarte, pero los que aquí se ha explicado debería bastar al menos para que puedas lograr "hackear" algo.

Otro tema que me viene a la cabeza es... es muy probable que ese trainer de farmville no se base en la edición/injección de memoria... quizás se trate de un trainer que envía paquetes TCP modificados al server para lograr el hack (no he analizado ni el juego ni el trainer, pero podría ser una opción), en cualquier caso te recomiendo que trates de crear el trainer por ti mismo.

Saludos
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

scillablade

Me gustaria preguntar algo, pasa algo curioso, estoy tratando de encontrar valores en el Cheat Engine 6.4 de un juego llamado Redident Evil Remake para Game Cube, jugado en el emulador Dolphin, y no puedo hayar los valores de memoria adecuados, pero sin embargo usando el mismo administrador de trucos del Emulador encuentro una posicion de memoria, que el mismo administrador de trucos codifica como un valor de 8 bits, es decir 1 byte e incluso cuando trato de ingresar manualmente la direccion de memoria arrojada por el administrador de trucos al Cheat Engine, no me deja trabajar con eso.

La direccion del Administrador de Trucos es 0x022a2aa 0x0b 11/11 entiendo que el valor siguiente a la direccion de memoria es el valor que contiene en hexadecimal y el siguiente en decimal, pero si lo ingreso en Cheat Engine y no refleja dicho valor..... quizas esta en el tipo de datos, 8bits son 1byte, pero asi no es como los busca el administrador de trucos, trabajaria en el administrador de trucos, pero lamentablemente en las versiones que he probado del emulador (de la 4.0.2 en adelante, betas y todo) no funciona el administrador de trucos del emulador y no he hayado foro alguno donde se hable de eso exepto para indicar como agregar los codigos de AR.

Cualquier ayuda la agradezco, gracias

Mad Antrax

Cita de: scillablade en 29 Agosto 2015, 07:15 AM
Me gustaria preguntar algo, pasa algo curioso, estoy tratando de encontrar valores en el Cheat Engine 6.4 de un juego llamado Redident Evil Remake para Game Cube, jugado en el emulador Dolphin, y no puedo hayar los valores de memoria adecuados, pero sin embargo usando el mismo administrador de trucos del Emulador encuentro una posicion de memoria, que el mismo administrador de trucos codifica como un valor de 8 bits, es decir 1 byte e incluso cuando trato de ingresar manualmente la direccion de memoria arrojada por el administrador de trucos al Cheat Engine, no me deja trabajar con eso.

La direccion del Administrador de Trucos es 0x022a2aa 0x0b 11/11 entiendo que el valor siguiente a la direccion de memoria es el valor que contiene en hexadecimal y el siguiente en decimal, pero si lo ingreso en Cheat Engine y no refleja dicho valor..... quizas esta en el tipo de datos, 8bits son 1byte, pero asi no es como los busca el administrador de trucos, trabajaria en el administrador de trucos, pero lamentablemente en las versiones que he probado del emulador (de la 4.0.2 en adelante, betas y todo) no funciona el administrador de trucos del emulador y no he hayado foro alguno donde se hable de eso exepto para indicar como agregar los codigos de AR.

Cualquier ayuda la agradezco, gracias

El tema de emuladores es un mundo a parte. Lo voy a explicar de una manera que se pueda entender... Cuando ejecutamos un juego o una room en un emulador sucede "algo parecido" al ejecutar una máquina virtual de vmware o virtualbox. Se crea y se reserva una zona de tu memoria ram física para ser usada en tu juego. Te pongo un ejemplo:

Imaginemos que tu PC físico tiene las siguientes posiciones ram:

Inicio 0x000
Fin 0xFFF

Cuando ejecutas un emulador, lo que sucede es que se reserva una zona de ram, suponiendo que se reserva la zona 0x100 hasta 0x500. Dentro de esa zona, para el juego emulado es como si tuviera la siguiente ram:

Inicio 0x000 (emulada) = 0x100 (real)
Fin 0x0400 (emulada) = 0x500 (real)

Por eso, cuando encuentras una dirección de memoria en el emulador jamás se corresponderá con la dirección ram "real" que podrás detectar con Cheat Engine. Espero que se haya entendido, no es fácil explicarlo de forma escrita jaja.

Para solucionarlo tienes 2 opciones; Utilizar el administrador de cheats integrado en el propio emulador o actuvar la función MEM_MAPPED:



De ésta forma, CE podrá escanear la memoria mappeada (por ejemplo en ficheros físicos utilizados por vmware o en secciones de memoria utilizados por los emuladores).

Pruebalo y nos cuentas, pero ya te aviso que una dirección encontrada en el emulador jamás se corresponderá en la ram física por lo que te he explicado
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.