Tema destacado: Grupo de acebook de elhacker.net
Autor
|
Tema: [TUTORIAL]Creación de trainers con OllyDBG y Cheat engine (Leído 3,160 veces)
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Muy buen tutorial, explica claramente. Agrego que con CE también es posible realizar una inyección de código sin necesidad de utilizar OllyDBG, una vez que tengamos el valor de las vidas en la lista, presionamos con el secundario sobre el valor y buscamos la opción “Find out what accesses this address”, los mostrara al igual que OllyDBG una lista con las direcciones que acceden al valor.
efectivamente pero preferí realizarlo de manera más manual pero más segura. Saludos
|
|
|
|
|
En línea
|
|
|
|
$Edu$
Conectado
Mensajes: 1.409
|
Ya entendi el tutorial y todo lo que me explicaste por privado UND3R los otros dias. Pero como siempre tengo otras dudas mas especificas que la puede contestar el que sepa, no necesariamente vos.
La duda es.. que el trainer lo que hace es modificar esta address ahora: 0041E844 , la de la instruccion, para cambiarla por otra instruccion que quieramos, en este caso solo la invertimos. Pero esa address porque no cambia nunca? asi como cambiaba la address del valor. Es porque una address esta dentro del ejecutable y la otra fuera? o que?
Es decir.. vieron como lo del funcionamiento de la IAT? algo asi se hace para que siempre que leamos la direccion 0041E844 en realidad estamos leyendo otra en la memoria RAM?
Otro ejemplo seria de que la mayoria de los programas empiezan en su OEP en el address 00401000, pero no esta haciendo referencia a la memoria RAM porque sino cuando cargo 2 programas en el Olly me dicen q los 2 empiezan en esa address, cosa q no seria posible..
Espero que alguien me entienda xD
Iba a crear un tema a parte sobre esto pero si pueden contestarme aca le queda la respuesta a otro que venga por este tema..
Yo he leido sobre esto pero no he entendido bien aun lo que es la ImageBase y que es un Offset, no llego a entenderlo bien aun, me cuesta horrores esto jaja.
|
|
|
|
|
En línea
|
Estado en el MSN: 
|
|
|
Иōҳ
Desconectado
Mensajes: 454
|
Hola Edu, haber si te resuelvo las dudas.... La duda es.. que el trainer lo que hace es modificar esta address ahora: 0041E844 , la de la instruccion, para cambiarla por otra instruccion que quieramos, en este caso solo la invertimos. Pero esa address porque no cambia nunca? asi como cambiaba la address del valor. Es porque una address esta dentro del ejecutable y la otra fuera? o que?
Es decir.. vieron como lo del funcionamiento de la IAT? algo asi se hace para que siempre que leamos la direccion 0041E844 en realidad estamos leyendo otra en la memoria RAM?
Eso depende si la dirección que haces referencia es una estática o dinámica, si es dinámica necesitas encontrar el BasePointer que hace referencia a tu address dinámica, en ocasiones pueden haber muchos punteros de punteros, o multilevelpointer como lo llama el CheatEngine (buen nombre por cierto). Como sabes que es estática o no?, pues mi experiencia en el gamehacking de hace años (estoy en retiro momentaneo del gamehacking ojo! xD) me dice que todo esto depende, primero el game usa librerías, entonces como se cargan estas librerías?, cuál es la ImageBase de ellas?, aveces son programas de tal manera que la ImageBase sea fija y así al cargarlas las direcciones de esa librearía sean estáticas. Ejemplo: DLL1 ImageBase = 03500000h DLL2 ImageBase = 03600000h DLL3 ImageBase = 03700000h . . . DLLn ImageBase = 0XX00000h Pero no siempre se cumple, entonces en ese casi las direcciones serían "dinámicas". Es algo que se crea en juego?, un stage o una misión por ejemplo?, pues es dinámica en la gran mayoría de los casos pero como siempre puede haber excepciones. Otro ejemplo seria de que la mayoria de los programas empiezan en su OEP en el address 00401000, pero no esta haciendo referencia a la memoria RAM porque sino cuando cargo 2 programas en el Olly me dicen q los 2 empiezan en esa address, cosa q no seria posible..
Nop, en los sistemas de 32 bits hay 4gb de direccionamiento en MEMORIA (ojo, no significa que ese sea su peso en disco), 2gb asignados a usermode, y los otros 2gb a kernel, cada proceso tiene un ÚNICO espacio de memoria, un ejemplo es que en memoria de tu target en la dirección ficticia 0B4DC0D3h tienes la vida de tu personaje, en tu trainer NO puedes hacer esto mov [0B4DC0D3h] , -1 Por que estás haciendo refencia a tu trainer no al target. Recuerda que el modelo de memoria NO es FLAT, como en ms-dos. Saludos, Nox.
|
|
|
|
« Última modificación: 19 Mayo 2012, 05:47 por Иōҳ »
|
En línea
|
|
|
|
$Edu$
Conectado
Mensajes: 1.409
|
Creo que le has dado en tu ultima frase "Recuerda que el modelo de memoria NO es FLAT, como en ms-dos". Lo demas no lo entendi bien pero es algo que aprendere luego, yo por ahora quiero saber lo basico basico y con tu frase me hizo pensar distinto sobre la RAM.
A ver, ya vengo voy a ver el libro que estoy leyendo como es que dice algo ahi...xD ya vine jajajaja, no entiendo bien lo que pasa. Pero pone la RAM como un edificio y cada piso tiene una altura, lo que seria el tamaño u offset. Algo asi:
RAM
FFFF
2000
1000
0000
Yo entiendo a la RAM como eso, como un edificio empezando desde la address 0000 hasta FFFF por ejemplo, entonces pienso que cada programa se carga en el lugar que entre, que no este ocupado, por ejemplo a partir del address 2000, y entonces pensaba que esa tendria que ser la ImageBase y luego entonces cuando en ese programa cargado se ve en el olly algo como:
2100 Add BX... 2200 MOV ...
En el medio de 2100 y 2200 estan los offsets, que serian los que se muestran en el Dump por columnas.
Pero se arruina todo lo que pensaba, al ver que la mayoria de los programas tienen la misma ImageBase, por lo que entonces no se cumple lo que digo, porque significaria que cargan en la misma direccion de la RAM y no se puede...
Pero.. tal vez eso de que la memoria RAM no es FLAT, quiere decir que no es asi como tenia pensado que era y entonces espero que me puedan explicar, asi de la misma forma que intente yo recien, solo que esta bien me diran como es de verdad xD
|
|
|
|
|
En línea
|
Estado en el MSN: 
|
|
|
Иōҳ
Desconectado
Mensajes: 454
|
Creo que aquí está tu respuesta: Nop, en los sistemas de 32 bits hay 4gb de direccionamiento en MEMORIA (ojo, no significa que ese sea su peso en disco), 2gb asignados a usermode, y los otros 2gb a kernel, cada proceso tiene un ÚNICO espacio de memoria, un ejemplo es que en memoria de tu target en la dirección ficticia 0B4DC0D3h tienes la vida de tu personaje, en tu trainer NO puedes hacer esto
mov [0B4DC0D3h] , -1
Por que estás haciendo refencia a tu trainer no al target.
Recuerda que el modelo de memoria NO es FLAT, como en ms-dos.
Si no entiendes alguna parte dímelo y te lo explico mejor, el libro que estás leyendo cuando fue editado? no será en sistemas de 16bits? cuando el modelo de memoria ERA FLAT? Saludos, Nox.
|
|
|
|
|
En línea
|
|
|
|
$Edu$
Conectado
Mensajes: 1.409
|
Esque habla de todos los tipos, de real mode, de protected mode y virtual mode. Pero no le entiendo porque no le encuentro logica, pero a ver.. lo que tu dices entonces es que la RAM al no ser FLAT (plano no?) significa que habra muchos edificios como el que puse no? Cuando se carga un programa, donde se mete en la RAM?
Tipo imaginando de la forma esta:
RAM
----- Programa 1 ----- Programa 2 ----- Programa 3 ------
Donde cada programa es un proceso nuevo, y todos arrancan desde el address 0000 hasta FFFF (para dar un ejemplo, no se a cuantos llegan, los q sean 4gb en hexadecimal no?)
Entonces el Trainer esta configurado para que modifique el address 40156F por ejemplo pero indicando que se refiere a la del proceso del juego que se indico. Ya que sino modificaria a cualquier otro proceso abierto q tenga la misma address (cosa que tendra).
Ahora si entendi? esque es lo mas logico que se me ocurre ahora.
|
|
|
|
|
En línea
|
Estado en el MSN: 
|
|
|
Иōҳ
Desconectado
Mensajes: 454
|
Ahí vas pero te estás confundiendo los tipos de modos http://computacion.cs.cinvestav.mx/~ameneses/pub/tesis/ltesis/node29.htmlhttp://es.wikipedia.org/wiki/Modo_protegidohttp://es.wikipedia.org/wiki/Modo_realDonde cada programa es un proceso nuevo, y todos arrancan desde el address 0000 hasta FFFF (para dar un ejemplo, no se a cuantos llegan, los q sean 4gb en hexadecimal no?)
Nop, en 32 bits sería 00000000h ... 7FFFFFFFh, eso son los 2gb de direccionamiento en memoria para modo usuario (las app de escritorio que haces en vb, corren en este nivel de privilegios). Los otros 2gb son para modo kernel. Entonces el Trainer esta configurado para que modifique el address 40156F por ejemplo pero indicando que se refiere a la del proceso del juego que se indico. Ya que sino modificaria a cualquier otro proceso abierto q tenga la misma address (cosa que tendra).
Ahora si entendi? esque es lo mas logico que se me ocurre ahora.
Si tu quieres modificar la diercción 40156F del game, pero tu trainer haces esto: mov dword ptr [40156Fh], -1 NO estás modificando la dirección de cualquier proceso, estás modificando la dirección 40156F que pertenece a tu trainer. Para modificar la dirección 40156F de otro proceso se usa la API WriteProcessMemory. WriteProcessMemory ( hProcesoAModificar, 40156F, &lpbuffer, nSize, NULL)
|
|
|
|
|
En línea
|
|
|
|
$Edu$
Conectado
Mensajes: 1.409
|
Lo del trainer, es como dice el tutorial, le indico el address del juego a modificar con el value que indique, que este sera la nueva instruccion en hexadecimal. Eso lo tengo claro, la cosa es lo de la RAM.
Ya creo que le entendi, ahora q me dijiste eso de que no es plana. Pero vamos por parte..solamente contestame esto por ahora:
La memoria RAM seria un listado de address, desde 00000000h hasta el tamaño de la RAM supongamos que de 4GB. A lo que cada programa se carga a la RAM creando un espacio de 2GB de reserva cada uno? como es posible, si ejecuto 3 programas ya consume todo.
Sacame esa duda y luego sigo con otras cosas xD Gracias Nox! un viernes de noche me estas ayudando, sos un grande!
|
|
|
|
|
En línea
|
Estado en el MSN: 
|
|
|
Иōҳ
Desconectado
Mensajes: 454
|
Sobre la memoria RAM especificamente no sé que decirte no tengo mucha información sobre eso, voy a tratar de buscar, pero el tema de segmentación parrafos, etc, ya no es preocupante en los sistemas de 32 bits.
Jeje, ahora estás confundiendo con los términos, son 4gb de direccionamiento (2^32), 2gb de DIRECCIONAMIENTO en memoria son para modo usuario, es decir que las direcciones 00000000 ... 7FFFFFFFh equivalen a 2gb.
|
|
|
|
|
En línea
|
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.830
I'Love...!¡.
|
mmm OllyDBG no es necesario... el propio Cheat Engine tiene la opción de detectar desde que direccion se edito el offset X... Solo hay que darle click secundario al elemento en-listado y en la opción:    En la ultima ventana inclusive puedo inyectar código ASM, dll, o con lo que le haya al ASM generar directamente un trainer. Dulces Lunas!¡.
|
|
|
|
« Última modificación: 19 Mayo 2012, 17:13 por BlackZeroX (Astaroth) »
|
En línea
|
|
|
|
$Edu$
Conectado
Mensajes: 1.409
|
Sobre la memoria RAM especificamente no sé que decirte no tengo mucha información sobre eso, voy a tratar de buscar, pero el tema de segmentación parrafos, etc, ya no es preocupante en los sistemas de 32 bits.
Jeje, ahora estás confundiendo con los términos, son 4gb de direccionamiento (2^32), 2gb de DIRECCIONAMIENTO en memoria son para modo usuario, es decir que las direcciones 00000000 ... 7FFFFFFFh equivalen a 2gb.
Yo pregunto, no tienes porque saberlo, todos aprendemos algo nuevo siempre jeje. Tal vez viene alguien a explicarme bien esto. Lo de los 4gb lo dije por dar un ejemplo en la memoria RAM, yo digo porque.. a que te referis con 2gb de direccionamiento en memoria? Tal vez creo un tema nuevo para debatir todo esto no?
|
|
|
|
|
En línea
|
Estado en el MSN: 
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
mmm OllyDBG no es necesario... el propio Cheat Engine tiene la opción de detectar desde que direccion se edito el offset X... Solo hay que darle click secundario al elemento en-listado y en la opción:    En la ultima ventana inclusive puedo inyectar código ASM, dll, o con lo que le haya al ASM generar directamente un trainer. Dulces Lunas!¡. Efectivamente, cuando hacía el tutorial (año atrás) sabía que se podía hacer directamente con Cheat Engine, pero de todas maneras siempre me ha gustado irme por el camino un poco más difícil que es justo el que más te enseña, saludos
|
|
|
|
|
En línea
|
|
|
|
|
| Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cheat Engine
Juegos y Consolas
|
UTU
|
1
|
1,086
|
12 Marzo 2006, 20:47
por SmopuiM
|
|
|
Cheat engine V5.3
Juegos y Consolas
|
yukigon
|
0
|
2,517
|
22 Marzo 2008, 04:36
por yukigon
|
|
|
Uso del cheat engine
Dudas Generales
|
kamaleon25
|
1
|
1,268
|
27 Junio 2008, 04:02
por Hocker
|
|
|
Cheat Engine + Tutorial
Juegos y Consolas
|
deivid95
|
2
|
2,280
|
13 Diciembre 2009, 15:34
por deivid95
|
|
|
cheat engine
Juegos y Consolas
|
CaZ4d0R
|
3
|
2,343
|
6 Agosto 2010, 14:04
por Castiblanco
|
|