Autor
|
Tema: [Tutorial] Usar Cheat Engine para modificar juegos + inyección de código (Leído 431,261 veces)
|
apuromafo CLS
|
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
Mensajes: 9
|
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
|
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
Mensajes: 9
|
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
|
|
|
En línea
|
|
|
|
Mad Antrax
|
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 Esas juegos usan tecnologia Game Shield, además son juegos online (server side) así que no lograrás nada
|
|
|
En línea
|
No hago hacks/cheats para juegos Online. Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
|
|
|
gonzalo57
Desconectado
Mensajes: 74
|
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
|
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
|
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
Mensajes: 12
|
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
|
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 FESi 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 //========================================= // 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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Modificar imagen de cheat engine?
Ingeniería Inversa
|
.:UND3R:.
|
6
|
6,954
|
13 Octubre 2012, 06:53 am
por Weeken
|
|
|
modificar juego con cheat engine
Juegos y Consolas
|
kalvin52
|
0
|
7,834
|
5 Diciembre 2012, 08:17 am
por kalvin52
|
|
|
[TUTORIAL] Cheat Engine nivel avanzado. Tutorial completo
« 1 2 ... 7 8 »
Ingeniería Inversa
|
Mad Antrax
|
74
|
117,527
|
23 Mayo 2022, 05:27 am
por enthimir
|
|
|
Proyecto inyección de código Superstackporker con Cheat Engine
Ingeniería Inversa
|
xavieeee
|
0
|
2,546
|
9 Julio 2015, 13:04 pm
por xavieeee
|
|
|
[Tutorial] Inyección de código en C++, Cheat Engine y OllyDBG
Ingeniería Inversa
|
Carlos D. Alvarez
|
3
|
5,691
|
13 Noviembre 2015, 16:03 pm
por Kaxperday
|
|