[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 2 Visitantes están viendo este tema.

gonzalo57

a medio me perdi en la 2 parte y en el 3 ya bff. imposible para mi  :-(
@echo off
title Gonzalo57
color 5a
echo Estoy aprendiendo Batch :3
echo.
pause
cls
echo un saludo elhacker.net :)
pause > nul

Mad Antrax

Cita de: gonzalo57 en 14 Febrero 2013, 15:48 PM
a medio me perdi en la 2 parte y en el 3 ya bff. imposible para mi  :-(


Exactamente en que parte te perdiste? Quizás pueda ayudarte
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

[NelSito*]

Ahora entiendo un poco mas esa funcion ^^! lo que pasa que yo años atras jugaba MapleStory un juego muy peculiar y divertido en aquellos tiempos diseñado en 2D, al buscar addys en la memoria pues comenze encontrando un Unlimited Attk, consistes en saltar el limite de ataques que te da el juego que era "99" hits.

Ejemplo:

http://foro.elhacker.net/ingenieria_inversa/tutorial_hallar_pointers_offset_con_ce_mhs5-t342767.0.html

Ojo que aqui realizo usando otra herramienta para hacerlo mas facil y comprensivo.

Volviendo a mi pregunta, en el script ejemplo que muestras señala "FTLGame.exe"+B133F: pero si yo lo cambio por el addy se me ocurre 00123456: ¿vendria hacer lo mismo? ¿el debugger lo leeria normal? ¿Ahora hay scripts que incluyen pointers y multipointers? podrias explicarme un poco mas sobre ello porfavor.

Ejemplo del script del unlimited attk que incluye pointers.

[enable]
alloc(UnlimitedAttk, 512)
label(dontReset)

UnlimitedAttk:
push ecx
mov ecx,[997EDC] //Direccion del Unlimited Attk
cmp [ecx+2250], 61 // Unlimited Attk Offset | 99 Ataques
jle dontReset
dec [ecx+E50] //Item X | Viene hacer un puntero que resetea el conteo de los ataques moviendose para cualquier lado
dontReset:
pop ecx
cmp eax,edi
mov [ebp-20],eax
ret
005B9343: // AOB del Addy 3B C7 89 45 E0 74 5F FF B3 B0 03 00 00 8D 83 A8
call UnlimitedAttk

[disable]
005B9343:
cmp eax,edi
mov [ebp-20],eax
dealloc(UnlimitedAttk, 512)

Mad Antrax

Exactamente no entiendo tu pregunta :( Que es lo que quieres hacer?

El tema de pointers o multi-level pointers no he hablado en el tutorial. No me gusta trabajar con ellos ya que son algo confusos, puedes realizar cualquier hack sin recurrir a los pointers, incluso en direcciones dinámicas
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

[NelSito*]

Disculpa si no formule bien mi pregunta, pero quiero saber si al crear el script se agregan los pointers automaticamente y hablo de direcciones estaticas.

La otra pregunta era que si FTLGame.exe"+B133F: lo reemplazo por el addy que deberia de ser que es "00123456" CE leeria igual el script.

Mad Antrax

Cita de: [NelSito*] en 14 Febrero 2013, 19:01 PM
Disculpa si no formule bien mi pregunta, pero quiero saber si al crear el script se agregan los pointers automaticamente y hablo de direcciones estaticas.

La otra pregunta era que si FTLGame.exe"+B133F: lo reemplazo por el addy que deberia de ser que es "00123456" CE leeria igual el script.

Cuando generas un script usando los pasos descritos en la parte 3, se agrega todo automáticamente, no tienes que escribir nada. Te lo explico usando el ejemplo del tutorial 3:


Como puedes ver, el debugger de CE me muestra la instrucción que modifica mi dirección donde almaceno el dinero, dicha instrucción es moneybag_tutorial.exe"+2C19 (mira la imagen). Al añadir las plantillas, CE escribe automáticamente el siguiente código:

[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 04


Lo que está en negrita es la primera línea que se ejecutará, justamente es la dirección donde tengo mi instrucción mágica mov [esi+34],ax. Si quieres remplazar la dirección del salto puedes usar direcciones no relativas, para ello suma la BASE con la dirección: 40400+2C19 = moneybag_tutorial.exe+2C19, así que supongo que CE lo leerá igual, pero no estoy seguro, deberías probarlo.
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

gonzalo57

En el debugger, lo de darle aqui:
Find out what writes to this address
@echo off
title Gonzalo57
color 5a
echo Estoy aprendiendo Batch :3
echo.
pause
cls
echo un saludo elhacker.net :)
pause > nul

MeTaD

Hermanito, una pregunta, la dirección de memoria cambia en cada ejecución cierto? como se podría identificar automáticamente la dirección después de haber cambiado?

Mad Antrax

#28
Cita de: MeTaD en 17 Febrero 2013, 03:08 AM
Hermanito, una pregunta, la dirección de memoria cambia en cada ejecución cierto? como se podría identificar automáticamente la dirección después de haber cambiado?

Muy buena pregunta. Hay dos formas para hacer eso:

- Utilizar pointers (no lo he explicado)
- Utilizar Auto-Assemble Scripts (Explicado en el paso 2 y 3)

Volviendo al ejemplo del paso 3 MoneyBag



Se puede encontrar de forma fácil el pointer que almacena la dirección dinámica del Dinero. De igual forma se puede hacer un AA script para incrementar el dinero. Éstas 2 formas de trabajar con CE funcionarán siempre, incluso después de cerrar y volver a ejecutar el proceso:



Puedes ver en la imagen que los pointers se identifican por P->000000. Te dejo mi tabla de CE para el ejemplo de MoneyBag, podrás abrirla sin problema y verás como el Pointer y el AA script funciona siempre:

http://www.mediafire.com/?d51sd1qc3l0jiic

______________________________________________

Si lo necesitáis, puedo escribir un tutorial para buscar pointers
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

MeTaD

Amigo, ¿cuando dices pointer es lo mismo que decir puntero?, Te agradacería inmensamente que escribieras el tutorial para buscar pointers...
Este mismo tutorial lo he probado con un programa que yo mismo he creado en C# y funciona de manera simple... Existe un int con valor inicial de 0 y dos botones: uno sima 1 y el otro resta 1:

¿Podrías por favor revisarlo y contestarme una pregunta?
Después de pulsar rápidamente el boton de suma (Cerca del valor 70 ~ 120) su espacio en la memoria cambia... ¿Por qué?

Anexo el programa y el código fuente para que puedas revisarlo
https://mega.co.nz/#!2F1SDYSQ!YqhHzX72VGTfC1jdoAxY9SqWvoZNvFjq53G6COIJfvM


También creé éste programa que es un "trainer" para mi "juego", el problema radica en que tengo que buscar el address cada vez que la memoria cambie, lo cual evidentemente no es algo bueno, porque cual sería el sentido del "Trainer" asi aún tengo que buscar la dirección manualmente y ya estando en el CE con la dirección sería preferible modificarla de una vez mediante el CE... por ende el trainer no tendría sentido...

Aquí está uina captura de pantalla:


Anexo el programa y su código fuente:
Citarhttps://mega.co.nz/#!uVVi1aqL!fLV_S27WlEgBhw7dLeq1ORt4iuZCWJdBKeaBBWLhomE