elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Modificar exe mediante trainer
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Modificar exe mediante trainer  (Leído 12,127 veces)
msrone

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Modificar exe mediante trainer
« en: 23 Octubre 2007, 10:06 am »

Wenas, soy demasiado novato para expresarm correctamente pero voy a intentar explicar mi problema:

La cuestion es que quiero crear un trainer, es decir, quiero crear un programa para que cambie en un determinado momento la memoria del exe del juego y se puedan añadir mas recursos, vidas y tal.

He estado leyendo, y utilizo el tsearch para ver la direccion que me interesa, y ahora no se como puedo escribir el codigo para poder modificar el value de esa direccion cuando a mi me de la gana. He probado a utilizar el trainer maker kit, xro al no tener suficientes conocimientos me kedo blokeado.

Muchas gracias por la ayuda ;)
En línea

x4uth

Desconectado Desconectado

Mensajes: 88


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #1 en: 23 Octubre 2007, 11:36 am »

Lo tipico es hacer el trainer el C++ usando las apis WriteProcessMemory y ReadProcessMemory para leer y escribir, para esto debes tener un handle del proceso que se optiene con OpenProcess para OpenProcess necesita la pid (id del proceso q se puede optener con GetWindowThreadProcessId si tenemos el handle de la ventana

ahi te pongo un ejemplo por si no entendiste bien :/


Código:
/* Esto es un trainer sencillo que congela el tiempo del buscaminas   (by x4uth) */
#include <windows.h>
#include <stdio.h>
#define OFFSET_TIEMPO 0x100579C


int main ()
{
HWND hWnd;
DWORD dwProcessId;
DWORD dwOldProtect;
HANDLE hProcess;
int tiempo;

hWnd = FindWindowA(0, "Buscaminas"); // Conseguimos el handle de la ventana del buscaminas
if(hWnd == NULL) { printf("No se encontro la ventana\n");return FALSE;}


GetWindowThreadProcessId(hWnd, &dwProcessId); // Obtenemos el id del proceso con el handle
if(dwProcessId == NULL) { printf("No se pudo obtener la id del processo\n");return FALSE;}

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId); // Abrimos el proceso
if(hProcess == INVALID_HANDLE_VALUE) { printf("No se pudo abrir el proceso\n");return FALSE;}


ReadProcessMemory(hProcess,(LPVOID)OFFSET_TIEMPO, &tiempo, 4, NULL);  //leemos el tiempo actual (para congelarlo en el numero aunque podemos hacerlo en el numero q queramos)

printf("Se congelara el tiempo en %d\n",tiempo);
for (;;Sleep(1000)) { //entramos en un loop infinito q se ejecuta cada 1 segundo
WriteProcessMemory(hProcess,(LPVOID)OFFSET_TIEMPO, &tiempo, 4, NULL); //ponemos el tiempo a nuestro numero
}

return 0;
}
En línea

msrone

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #2 en: 23 Octubre 2007, 13:34 pm »

Muchisimas gracias por contestar, me resulta un poco dificil todo esto, ya que de C++ no se aun casi nada.

Y si quiero coger un tipo de recurso del juego y subirlo al numero que yo desee como se podria poner?

p.D... si me puedes recomendar algun sitio para ir aprendiendo C++ te estare muy agradecido ;). Muchas gracias
En línea

x4uth

Desconectado Desconectado

Mensajes: 88


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #3 en: 23 Octubre 2007, 13:54 pm »

no entiendo a que te refieres con recurso, ese ejemplo que te puse modifica la memoria  de otro programa (q en este caso es el tiempo q es de 4 bytes), pero siguiendo ese esquema puedes modicar todo lo que este en la memoria del programa ya sea codigo del programa o variables.

para aprender c++ pos no se :/ en esta misma web hay una subforo de c++ , pasate por ahi y pregunta
En línea

msrone

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #4 en: 23 Octubre 2007, 14:07 pm »

Vale perfecto, pues lo unico que tendria que tener en cuenta seria el offset de lo q quiero cambiar del programa. Entonces, si yo quisiera agregar una cantidad sobre alguna otra que este ya en el programa, como por ejemplo añadir 1000 de oro, comida, etc... esto se podria hacer siguiendo tu eskema?


P.D... me puedes decir que programa usas para C++...

Disculpa por tanta pregunta, si te parecen ridiculas, pero siempre e kerido aprender esto y nunca e podido.gracias.
En línea

x4uth

Desconectado Desconectado

Mensajes: 88


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #5 en: 23 Octubre 2007, 14:17 pm »

claro es lo mismo, para el oro por ejemplo, lo primero es poner el offset correcto
Código:
#define OFFSET_TIEMPO 0x100579C  <--- ahi pones el del oro

luego todo igual hasta que lees el oro con
Citar
ReadProcessMemory(hProcess,(LPVOID)OFFSET_TIEMPO, &tiempo, 4, NULL); 
   

ahi tenemos el oro actual en "tiempo"
asi que le sumamos la cantidad que quieres

Código:
tiempo+=10000;
ahi solo te falta escribir ese numero en la memoria


Código:
WriteProcessMemory(hProcess,(LPVOID)OFFSET_TIEMPO, &tiempo, 4, NULL); 

y el bucle for no haria falta pues en este caso queremos aumentar el oro en una cantidad no dejarlo fijo...


pd. si te fijas ni cambie el nombre de tiempo por oro, pues da lo mismo lo q sea, el nombre de la variable es solo el nombre...
   
En línea

msrone

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #6 en: 23 Octubre 2007, 14:26 pm »

Vale perfecto, te e entendido bastante bien.

Mis dudas ahroa es si para determinar un offset por ejemplo del oro, debo de realizar una buskeda en la memoria, con el tsearch por ejemplo viendo donde esta la direccion del oro, y despues como lo paso al offset?

Y la segunda, todo esto puede ponerse dentro de un boton que al pulsar de el resultado de añadir esos 10000 de oro?

estoy utilizando el wxdev-C++ pero no puedo compilar tu codigo xq me da error en el NULL...

gracias
En línea

x4uth

Desconectado Desconectado

Mensajes: 88


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #7 en: 23 Octubre 2007, 14:32 pm »

Vale perfecto, te e entendido bastante bien.

Mis dudas ahroa es si para determinar un offset por ejemplo del oro, debo de realizar una buskeda en la memoria, con el tsearch por ejemplo viendo donde esta la direccion del oro, y despues como lo paso al offset?

la direccion q te da el tsearch es el offset


Y la segunda, todo esto puede ponerse dentro de un boton que al pulsar de el resultado de añadir esos 10000 de oro?
claro...


estoy utilizando el wxdev-C++ pero no puedo compilar tu codigo xq me da error en el NULL...

gracias
no deberia pues el NULL es una constante basica pero bueno pon esto al principio del todo (despues de los includes)
Código:
#define NULL 0
En línea

msrone

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #8 en: 23 Octubre 2007, 14:48 pm »

El problema es que el tsearch me da una direccion, pero esta varia. Como se podria arreglar esto?

No e podido compilar tu codigo me da error, explicame por favor como puedo compilarlo.

gracias
En línea

x4uth

Desconectado Desconectado

Mensajes: 88


Ver Perfil
Re: Modificar exe mediante trainer
« Respuesta #9 en: 23 Octubre 2007, 19:42 pm »

El problema es que el tsearch me da una direccion, pero esta varia. Como se podria arreglar esto?
eso tiene un cierto nivel de complejidad arreglarlo, el tema es que el programa tenga controlada una variable dinamica tiene q tenerla referenciada por un puntero obligatoriamente, este puntero puedes encontrarlo debugando el codigo que modifica dicha direccion y con un poco de suerte ese puntero tendra una direccion fija, la otra opcion es modificar el codigo del programa , por ejemplo el caso del tiempo del buscaminas q se va incrementando cada segundo, para evitar q se incremente bastaria buscar el lugar donde se incrementa , suponiendo que llegue a esta linea
INC EAX  , tenemos en la direccion de memoria un 0x40 q corresponde a esa operacion, si la cambias por un 0x90 tienes un NOP con lo cual no se incrementaria el tiempo. una tercera forma seria buscar una referencia constante en el bloque de memoria pues muchas veces nuestra variable pertence a una clase o otro tipo de estructura que pueden tener partes constantes, en este caso tendrias q contar los bytes de diferencia, y bastaria con buscar la constante y sumar o restar los bytes de diferencias a la direccion obtenida para obtener la direccion q queremos

No e podido compilar tu codigo me da error, explicame por favor como puedo compilarlo.
con Visual C++ 2005 compila perfectament, = si me dices el error te puedo ayudar

En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
que es y para que sirve un trainer
Juegos y Consolas
chipbios 2 6,038 Último mensaje 16 Mayo 2005, 19:29 pm
por chipbios
Ayuda a krear un trainer
Ingeniería Inversa
dualitydark 1 2,133 Último mensaje 4 Febrero 2008, 00:59 am
por tena
Modificar Propiedades de conexion internet mediante c#[SOLUCIONADO]
.NET (C#, VB.NET, ASP)
Pablo Videla 1 7,499 Último mensaje 22 Enero 2010, 05:44 am
por Pablo Videla
Un trainer es un Troyano?¿?¿?¿ « 1 2 3 »
Análisis y Diseño de Malware
beholdthe 27 17,888 Último mensaje 11 Septiembre 2011, 05:46 am
por Milo_EscorpioNN
soccer trainer 3.0
Ingeniería Inversa
quinipilar 6 8,683 Último mensaje 18 Agosto 2011, 05:45 am
por .:UND3R:.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines