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


 


Tema destacado: ¿Usas Skype? Protégete de los Skype Resolver


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: Shaddy, karmany, .:UND3R:., MCKSys Argentina)
| | |-+  [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 28 Ir Abajo Respuesta Imprimir
Autor Tema: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código  (Leído 210,546 veces)
apuromafo


Desconectado Desconectado

Mensajes: 1.199



Ver Perfil WWW
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #10 en: 12 Febrero 2013, 06:56 »

yo siempre leo el foro..realmente esta bien los aportes ||MadAntrax||, cuidate y disfruta las vacaciones en caso que aun queden dias libres

saludos Apuromafo
En línea

Apuromafo
POLLITOXD

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #11 en: 12 Febrero 2013, 17:36 »

Holas  soy pollito  tengo un problema q pasa
cuando le doy  "Find out what writes to this address"
se cierra el juego no es el juego q pusistes es otro
como podria en caso como sacar las andress pointer offzet....
En línea

Mad Antrax
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.161


Cheats y Trainers para todos!


Ver Perfil WWW
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #12 en: 12 Febrero 2013, 19:30 »

Holas  soy pollito  tengo un problema q pasa
cuando le doy  "Find out what writes to this address"
se cierra el juego no es el juego q pusistes es otro
como podria en caso como sacar las andress pointer offzet....

Buenas, lo que te ocurre es que el juego que estás tratando de debuggear tiene protecciones anti-debugg, al lanzar el debugger interno de CE se cierra por protección.

Que juego estás tratando de hackear?
En línea

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

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #13 en: 13 Febrero 2013, 04:18 »

Umm bueno ai alguna otra forma se sacar el andress  o pointer
estatico  q no se por debuger aver si me pordrian orientar
en algo toy provando con dos juegos el mu heroes mu sanluis
y gunbound   :P :o  :silbar:
En línea

Mad Antrax
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.161


Cheats y Trainers para todos!


Ver Perfil WWW
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #14 en: 13 Febrero 2013, 13:58 »

Umm bueno ai alguna otra forma se sacar el andress  o pointer
estatico  q no se por debuger aver si me pordrian orientar
en algo toy provando con dos juegos el mu heroes mu sanluis
y gunbound   :P :o  :silbar:

Esas juegos usan tecnologia Game Shield, además son juegos online (server side) así que no lograrás nada :D
En línea

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

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #15 en: 13 Febrero 2013, 15:09 »

Mad mira hace tiempo jugaba a un juego llamado BoomBang y se me ocurrio entrar y probar para ponerme mucho dinero, y lo consegui lo que pasa esque siempre que me pongo dinero en un juego tan solo es visual, en realidad es como si no tuviera nada. Igual me ocurre en el juego Plants Vs Zombies.
Espero que me resuelvas la duda
En línea

@echo off
title Gonzalo57
color 5a
echo Estoy aprendiendo Batch :3
echo.
pause
cls
echo un saludo elhacker.net :)
pause > nul
Mad Antrax
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.161


Cheats y Trainers para todos!


Ver Perfil WWW
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #16 en: 13 Febrero 2013, 15:33 »

Mad mira hace tiempo jugaba a un juego llamado BoomBang y se me ocurrio entrar y probar para ponerme mucho dinero, y lo consegui lo que pasa esque siempre que me pongo dinero en un juego tan solo es visual, en realidad es como si no tuviera nada. Igual me ocurre en el juego Plants Vs Zombies.
Espero que me resuelvas la duda

Bueno, eso que te ocurre puede ser por varios motivos. Te explico:

Imaginate que soy programador de un juego, en el juego tienes monedas (o dinero), de forma interna el juego almacena el valor de tu dinero así

VariableDinero = 50 * 10 = 500

Tú en el juego verás de forma gráfica que tienes 500 monedas, pero en realidad el juego almacena el valor 50 y lo multiplica por 10 para mostrarlo. Cuando uses CE para buscar 500 jamás te saldrá bien, ya que de forma interna, la variable de 500 monedas se almacena de una forma distinta. Eso sería un método de protección para evitar éste tipo de trampas. Lo mejor es usar búsquedas en Increased o Decreased para no fallar.

Por cierto, el Plant vs Zombi lo conseguí hackear con CE, no es complicado, que versión estás jugando tú? Yo lo tengo para Steam, si quieres te puedo ayudar.
En línea

No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
Mad Antrax
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.161


Cheats y Trainers para todos!


Ver Perfil WWW
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #17 en: 13 Febrero 2013, 20:30 »

Ya he terminado la parte 3 del tutorial, creo que no me he dejado nada. Inyección de código y creación de script's en Auto-Assemble. Si hay algo mal o que no se entienda avisad!!

Está posteado en el reply #3 de la primera página
En línea

No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
[NelSito*]

Desconectado Desconectado

Mensajes: 12



Ver Perfil
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #18 en: 14 Febrero 2013, 03:50 »

Te felicito y agradezco por tomarte el tiempo por enseñar partes de un debugger como es el CE, tengo muy claro todo lo unico que aun no aprendia era la parte de crear scripts en AA, ahora que lo se me gustaria saber ya que hablastes del alloc y label, podrias decirme en que casos o para que sirve el registersymbol y un ejemplo para que asi los demas tambien puedan entenderlo.

Gracias.
En línea

Mad Antrax
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.161


Cheats y Trainers para todos!


Ver Perfil WWW
Re: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código
« Respuesta #19 en: 14 Febrero 2013, 08:36 »

Te felicito y agradezco por tomarte el tiempo por enseñar partes de un debugger como es el CE, tengo muy claro todo lo unico que aun no aprendia era la parte de crear scripts en AA, ahora que lo se me gustaria saber ya que hablastes del alloc y label, podrias decirme en que casos o para que sirve el registersymbol y un ejemplo para que asi los demas tambien puedan entenderlo.

Gracias.

alloc es para indicar a CE cuanto espacio en memoria necesitas para tu script, normalmente con 2kbytes tienes espacio suficiente paa inyectar tu código.
label sirve para utilizar una palabra como si fuera una dirección de memoria, te dejo un ejemplo:

[ENABLE]
alloc(InfiniteHull,2048)
label(SkipDmg)
label(return)

"FTLGame.exe"+B133F:
jmp InfiniteHull
nop
return:

InfiniteHull:
cmp [eax+04],0
je SkipDmg
fistp dword ptr [eax+38]
db D9 6D FE
jmp return
SkipDmg:
mov [eax+38],1E
db D9 6D FE
jmp return

[DISABLE]
dealloc(newmem)
"FTLGame.exe"+B133F:
fistp dword ptr [eax+38]
db D9 6D FE


Si lees el código desde arriba verás que empiezo con un jmp InfiniteHull (mi primer label). Comparo la estructura [eax+4] con un je SkipDmg (mi segundo label). Es un claro ejemplo de uso de labels, éste script AA comprueba el registro [eax+4] para determinar si es un enemigo o un amigo, si es un amigo el valor será 0 y lanzo el código de evitar daño, si es un enemigo ejecuto el código original para aplicar daño. Así de sencillo.

RegisterSymbol es algo más avanzado, sirve para registrar una palabra como variable interna. A efectos prácticos será tratada como una dirección de memoria más y podrás trabajarla con CE, te dejo un ejemplo inventado:

En algunos casos, los videojuegos utilizan direcciones estáticas donde almacenan sus variables, dichas direcciones nunca varían y las puedes utilizar para hacer "hacks". Imagínate que tenemos un juego llamado "game.exe" y que en la dirección de memoria BCA64 el registro EAX contiene las videas de tu personaje, podrías hacer lo siguiente:

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048) //2kb should be enough
label(exit)
alloc(y_addr,4)
registersymbol(y_addr)


"game.exe"+BCA64:
jmp newmem
jmp exit
nop

newmem:
mov [y_addr],eax

exit:

[DISABLE]
...
dealloc(y_addr)
unregistersymbol(y_addr)


Aquí lo que hemos hecho es saltar a la dirección de memoria BCA64 y guardar en nuestro símbolo y_addr el valor de EAX que contiene las vidas. A partir de aquí el símbolo y_addr podrá ser utilizado en cualquier ventana del CE, incluso en otros script's. Es otra forma de trabajar, pero yo lo veo algo complicado. Si te interesa el tema de las funciones en AA te dejo las que hay (en inglés)

There are 3 special commands you can give it, ALLOC , LABEL and FULLACCESS. With LABEL you can give a address a name by declaring it before you use it. ALLOC is basicaly the same as LABEL but allocates some memory for you.
Usage:
LABEL(labelname) //Enables the word labelname to be used as a address
ALLOC(allocname,sizeinbytes, preferedregion OPTIONAL) //same as label, but allocates the memory it points to itself
DEALLOC(allocname) //Deallocates a block of memory allocated with alloc. It always gets executed last, no matter where it is positioned in the code, and only actually frees the memory when all allocations have been freed.  only usable in a script designed as cheattable. (e.g used for the disable cheat)
FULLACCESS(address,size)  //makes a memory region at the specified address and at least "size" bytes readable, writable and executable

REGISTERSYMBOL(symboname) //adds the symbol to the userdefined symbol list so cheattables and the memory browser can use that name instead of a address (The symbol has to be declared in the script when using it)
UNREGISTERSYMBOL(symbolname) //removes the symbol from the userdefined symbol list. It won't give a error if it isn't found


DEFINE(name,whatever) :Will replace all tokens with the specified name with the text of whatever
INCLUDE(filename) :includes another auto assembler file at that spot
LOADBINARY(address,filename) :Will load a binary file at the specified address
CREATETHREAD(address) :Will spawn a thread in the process at the specified address
LOADLIBRARY(filename) :Will inject the specified dll into the target process
READMEM(address,size) :Will write the addresses at address at the location this instruction is placed


GLOBALALLOC(name,size) : Will allocate a certain amount of memory and registers the specified name. Using GlobalAlloc in other scripts will then not allocate the memory again, but reuse the already existing memory. (Or allocate it anyhow if found it was not allocated yet)


ASSERT(address, array of byte) : Will check the memory address for the given address. If the memory is not what is defined by the array of byte given, the auto assemble script will not execute.
AOBSCAN(name, array of byte) : Will scan the memory for the given array of byte (Wildcards are supported) and replaces all tokens with the specified name with the address the array of byte was found. If it's not found, the auto assemble script will not execute


Value notation:
Normally everything is written as hexadecimal in auto assembler, but there are ways to override this so you can input decimal values, and even floating point values.
for example, a integer value of 100 can be written in hex as 64, but you can also write it as #100, or as (int)100
for floating point value like 100.1 you can use (float)100.1


Y por si te interesa, te dejo un AA script de un juego real, el script es bastante extenso, por suerte está bien escrito y comentado, quizás aprendas algo de él :D

//=========================================
// Majesty 2 - The Fantasy Kingdom Sim
// Game Version  : 1.0.0.0
// Script Version: 1.0
// CE Version    : 5.5
// Gold, GodMode
// 08-Oct-2009
//=========================================

[ENABLE]
alloc(MyCode,1024)

//=========================================
// Declaration section
label(_MonGold)
label(_BackMG)
label(_ExitMG)
label(_GodMode)
label(_BackGM)
label(_ExitGM)
label(_GodM0)
label(pGold)
label(fMinGold)
label(iEnableMG)
label(iEnableGM)

registersymbol(MyCode)
registersymbol(pGold)
registersymbol(fMinGold)
registersymbol(iEnableMG)
registersymbol(iEnableGM)

//=========================================
// Hacking Points
Game.dll+1d7d07:
 jmp _MonGold
 nop
_BackMG:

Game.dll+20ff5e:
 jmp _GodMode
_BackGM:

MyCode:
//=========================================
_MonGold:
 push eax
  
 mov [pGold],ecx              // Save ptr for further use
  
 cmp dword ptr [iEnableMG],0
 je _ExitMG                   // Jump if feature is disabled
  
 mov eax,[fMinGold]           // Get minimum gold value
 cmp eax,[ecx+00040474]       // Current value >= minimum?
 jle _ExitMG                  // Jump if true
  
 mov [ecx+00040474],eax       // Make current value = minimum
 mov [ecx+04],eax             // Make current value = minimum (display)

_ExitMG:
 pop eax
 fld dword ptr [ecx+00040474] // Original code
 jmp _BackMG                  // Back to main code

//=========================================
_GodMode:
 push ebx
 mov ebx,ecx
  
 cmp dword ptr [iEnableGM],0
 je _GodM0                    // Jump if feature is disabled

 mov ecx,[ecx+14]             // Get ptr Level 1
 or ecx,ecx                   // Valid pointer?
 jz _GodM0                    // Jump if false

 mov ecx,[ecx+000000a0]       // Get ptr Level 2
 or ecx,ecx                   // Valid pointer?
 jz _GodM0                    // Jump if false

 mov ecx,[ecx+00000014]       // Get ptr Level 3
 or ecx,ecx                   // Valid pointer?
 jz _GodM0                    // Jump if false
  
 mov ecx,[ecx+000000A4]       // Get ptr Level 4
 cmp ecx,07000000             // Valid pointer?
 jle _GodM0                   // Jump if false

 mov ecx,[ecx+00000024]       // Get ptr to owner
 cmp ecx,[pGold]              // Player´s unit?
 jne _GodM0                   // Jump if false

 fld dword ptr [ebx+24]       // Get Maximum HP
 jmp _ExitGM  

_GodM0:
 fld dword ptr [eax]          // Original code

_ExitGM:
 mov ecx,ebx
 pop ebx
  
 fstp dword ptr [ecx+1c]      // Original code
 jmp _BackGM                  // Back to main code

//=========================================
// Variables
iEnableMG:
 dd 1
iEnableGM:
 dd 1
pGold:
 dd 0
fMinGold:
 dd 461c4000                  // 10000

//=========================================
// Original Codes
[DISABLE]
Game.dll+1d7d07:
 fld dword ptr [ecx+00040474]

Game.dll+20ff5e:
 fld dword ptr [eax]
 fstp dword ptr [ecx+1c]

dealloc(MyCode)
unregistersymbol(MyCode)
unregistersymbol(pGold)
unregistersymbol(fMinGold)
unregistersymbol(iEnableMG)
unregistersymbol(iEnableGM)
En línea

No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 28 Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines