¡Hola, bienvenido al foro de las noches Skyperas!

Entra con tu login, o registrate y disfruta con gente que tiene tus mismas aficiones.
Noches Skyperas
RegístrateBuscarFAQFavoritosMiembrosGruposConéctate
Noches Skyperas » Emuladores
Tutorial de Hackeo de memoria genérico (códigos de trucos)

Responder Página 1 de 1
Tema creado por gadesx - Vie 12 May 2017 20:24 - 114 lecturas
Autor Mensaje
gadesx
Vanguardia
Vanguardia


Reg.: 03 Ene 2017
starstarstarstarstar

Mensajes: 90
Género: Masculino

Agradeció: 0 posts
Le agradecieron: 16 posts


#1 Escribió el primer mensaje de este tema Vie 12 May 2017 20:24 - Tutorial de Hackeo de memoria genérico (códigos de trucos) Responder citando
Este es un tutorial que puse en elotrolado en 2007 sobre como crear codigos
de trucos en juegos.
Espero que os sirva

------------------------
¿Qué tiene de bueno aprender a trucar un juego?

Pasarte el juego sin complicaciones, facilitarte otras labores (por ejemplo si eres un traductor y no te apetece revisar un rpg con batallas cada 2 pasos) o simplemente quieres explorar parte del juego que está oculto, como ejemplo los modos debug (para los programadores del juego)

Este tutorial quiero que sea generico, es decir que te valdrá para cualquier sistema que use este tipo de codigos.

Cuando termine el tutorial, os pondré algunos trucos que
he sacado a lo largo del tiempo.
-----------------------------------------

Mientras juegas a un juego se van manejando variables, una variable
es un valor que varia (como su nombre indica) segun un estado.
por ejemplo, en super mario el tiempo, o el numero de monedas.

Pues bien un codigo, lo que hace es modificar esa variable
que está en la ram.

¿Y como encontramos esa variable entre miles y miles?
Pues facilmente, descontando.

Hay 2 tipos de busquedas normalmente, unas son por valor conocido
y otras por valor desconocido.
Los de valor conocido son mucho mas rapidos de buscar que desconocidos.

Valor conocido
Como el ejemplo de antes, tenemos el mario y tenemos
5 monedas, asi que con el buscador ponemos valor conocido
y ponemos 5 y le damos a buscar.
Eso lo que hara es que todas las variables que no tengan 5
se descarten.
Suponiendo que aun hay muchas variables en la lista,
volvemos al juego y cogemos otra moneda,
volvemos al menu con las variables y ponemos 6.

Si se han restado y solo queda 1 o 2 codigos, pruebalos
(si puedes copiando antes los mismos en un papel por lo que pueda pasar)
Si lo has hecho bien y los has activado, al coger nuevas monedas
siempre tendrás la misma cantidad.

¡Bien tu primer hackeo lo has conseguio!

Valor Desconocido
La busqueda con el valor desconocido permite sacar codigos que no
sabemos el valor exacto que tienen, como por ejemplo
en el mario cuando le dan un toque, el momento en que está "transparente"

Para ello (poniendo de ejemplo el mario tambien), cogemos y
le damos a iniciar busqueda desconocida, ahora nos dejamos tocar con un enemigo (estando antes con mario en grande por supuesto :p)
y en el momento que esta parpadeando, vamos al menu de busqueda
rapidamente y ponemos el valor es diferente.
volvemos al juego, cuando mario este de nuevo normal, vamos de nuevo
al menu de busqueda y ponemos el valor es diferente.

Asi sucesivamente hasta dar con el codigo, intentad no equivocaros
si poneis que el valor es diferente y en verdad es igual, porque si no
el codigo que buscamos tambien se descontará.

Ahora os cuento los diferentes tipos de busqueda por desconocido.
(los mas esenciales)

-El valor es mayor que el anterior
-El valor es menor que el anterior
-El valor es igual
-El valor es desconocido/diferente al anterior

Otro ejemplo, estamos con el resident evil, queremos energia infinita,
asi que le damos a iniciar busqueda, nos dejamos que nos muerda un zombi hasta que baje a "precaucion", ahora vamos al menu de busqueda
y ponemos "el valor es MENOR" (logico no?) ya que hemos perdido energia.
Ahora en el juego nos tomamos una hierba verde (no penseis mal xD) y recuperamos la salud, por lo tanto ahora el valor es MAYOR.

y cada vez que cambie de estado habria que ir descontando,
a veces pasa que cuesta que se descuenten, eso es porque ese valor
es muy tipico entre la "galeria de variables" por eso es recomendable
usar tambien valor igual a veces,
se da el caso en juegos que quizas tu quieres sacar el codigo de tiempo infinito y está cambiando y estás descontando poniendo el valor es diferente, y al final te salen unos 10 codigos, y uno es del tiempo
y los demas son para controlar los canales de sonido XD

eso es porque al igual que el valor del tiempo está siendo diferente
cada segundo, la musica que suena tambien lo puede ser.

Valores de los Codigos
Este punto es bastante importante, aqui explico como trabajan
los valores de las variables, porque va en hexadecimal.

Los numeros que pongo abajo con FF, quiere decir que esos se pueden
cambiar, mas abajo pongo cuanto es cada con los mas valores mas usados.
Los valores de un codigo van segun los bytes:
1 byte (255 max valor) (usado por game boy y sistemas 8 bits)
ejemplo: 01FF0000 (8 digitos)
2 byte (65535 max valor) (usado por sistemas de 32 bits como psx)
80000000-FFFF

(los que hayan visto juegos como pokemon de gb, y alguien les haya enseñao un pokemon de nivel 255, y les decia que al subirlos un nivel volvia a 0 ya saben porque pasa, jeje)

Los codigos trabajan en Hexadecimal, el hexadecimal
al diferencia del sistema decimal, van del 0 a la F.
Es decir.
Hex - Decimal
0 - 0
1 - 1
2 - 2
3 - 3
4 - 4
5 - 5
6 - 6
7 - 7
8 - 8
9 - 9
A - 10
B - 11
C - 12
D - 13
E - 14
F - 15
10 - 16

etc
etc

Ahora os contaré los valores mas usados: (me acuerdo de memoria jeje)
Hex-Decimal
63-99
64-100
FF-255
03E7-999
270F-9999
FFFF-65535

Estos son los valores que mas se suelen usar

ejemplos:
si sacamos un codigo de mucha exp tras batalla para un rpg, se suele usar
al final FFFF que nos dará lo maximo posible.

si trucamos el tiempo del mario, le pondriamos 03E7 y tendriamos
el tiempo siempre a 999.

-----------------------------------------------------------
¿Qué herramientas uso para empezar?

Recomiendo empezar con el emulador Zsnes, es facil para
empezar, luego puedes probar con el Psx Emulation Cheater (pec) + Epsxe, pulsando ctrl+H durante el juego te sale el menú y puedes buscar codigos, tambien puedes hacerlo solo con tu psx, con Xplorer FX (creo que es dificil de encontrar hoy dia)
y tambien puede probar con algun Xploder de GB, que son bastante faciles de usar

------------------------------------------------------------
Ejemplos de como sacar algunos codigos - Para finalizar el tutorial :)

- Llevar a Aeris o Sephiroth en Final Fantasy 7
Bueno esto no es tan dificil como parece (a mi), simplemente
en el menu inicias una busqueda, y cambias el orden de los personajes.
y usas valor desconocido, cambiando entre unos y otros.
Hay que darse cuenta que en FF7 muchos valores van dobles,
es decir, de los 4 digitos de valor, 2 de ellos se reparten, es decir que
puede que del codigo cada par indique una posicion/personaje:

80000000-0102
                 |   \
                cloud barret
por ejemplo

hallando el codigo, cambiando esos pares de digitos,
podremos tener a los personajes que están registrados en la
base de datos del juego segun la pusieron los programadores.

si en el codigo ponemos de valor 0101, quiere decir que tendremos
a cloud en la primera y segunda posicion lol,
si ponemos 0202, tendremos dos barrets, aunque claro, si no hay
un cloud o tifa en el grupo seguramente se cuelge ya que
ellos no estan programados para andar como personajes en el mapa del mundo (tampoco lo sé seguro al 100% si alguien lo sabe lo podría comentar)

es algo similar a lo que pasa con el codigo de items del mismo juego.
2 valores indican el objeto, y los otros dos la cantidad del mismo :)
y el valor de la posicion es el anterior a los 4 digitos cambiados x 2
os sonará paranoico lo que os cuento XD

- Selector de Enemigos en Batalla para Final Fantasy 6 (PS1)
Si pensamos en como puede estar creado el juego, nos daremos
cuenta que no están los enemigos solo registraos como 1, sino como
grupos, es decir que en batalla te pueden salir 2 ratas+ 1 robot
o 1 rata + 1 robot, cada uno de ellos es decidido con una variable
que cambia de valor, cada valor representa a un grupo.

El metodo de buscar es el siguiente:
Inicia batalla en el mapa del mundo por ejemplo, pon iniciar busqueda,
entra en otra batalla, si el grupo de enemigos es el mismo pon el valor es igual, entra en batallas contra enemigos diferentes y ve poniendo el valor es diferente para ir descontando.
Se puede hacer muy dificil descontar AVISO.

Por ello tienes que tener un poco de ingenio, y atreverte en momentos
por ejemplo, luchas contra 1 rata + robot, y pones el valor es diferente, luego te vas a una zona donde salen enemigos del FINAL (en el mapa del mundo) y luchas contra un dinosaurio, y pones el VALOR ES MAYOR.
En la mayoria de juegos de RPG en las bases de datos de los mismos
suelen poner los enemigos del juego mas avanzado en un valor mas alto,
aunque claro, esto no sirve siempre, puede variar segun el juego, y si
el valor de los codigos no va en base 00XX, si usa tambien los dos
valores antes de las XX esto que he mencionao del valor es mayor no
servirá...

--------------------------------------------------
Términos que se suelen usar:

Freeze
Freeze (congelar) es como le llaman en algunas herramientas
a dejar un codigo sin que se modifique, vamos, "ON" todo el rato

Set
Set es como llamo yo (y los del MAME) a la accion de activar
y de desactivar un codigo seguidamente, para que éste no cause
un problema.
Es el ejemplo de un codigo para entrar en un modo debug, si
no se hace Set, no podrás entrar a otras salas de la misma, ya
que el codigo hace que siempre te mande a la misma habitacion.

Joker commands
Estos son códigos modificados que se usan sobre todo en PS1 y PS2
que con una combinación de botones mientras juegas puedes activarlos
o desactivarlos, para hacerlos hay que mirar antes en internet
qué codigos afectan a que botones y demás.

Master code
Esto lo vi por primera vez en GBA y no se cuantos sistemas
lo usan, el master code es una serie de codigos que
desbloquean el juego para que los codigos de trucos funciones,
como para desprotegerlo.


- Usar valores de más de 65535 en PS1
Para mas de 2 bytes en PSX (segun pec, 4bytes),
esto me salió de casualidad, yo al aprender
trasteando pues te pasan estas cosas asi jeje.

Ejemplo de un codigo:

801354D4-FFFF

Este codigo tiene 4 valores, FFFF que son 65535 en decimal,
pero supongamos que en un RPG trucamos el dinero, y queremos
tener mas de 65535 porque no nos alcanza para comprar algunas
armas.

Pues el numero anterior a los 4 valores le sumamos un 1.
se quedaria asi

801354D5-FFFF

Ahora tendriamos unos 2 millones 700 mil+
una barbaridad vamos (segun pec mas de 2 mil millones), yo recomiendo que a la hora de subir el valor
le resteis un poco a las FFFF y la pongais en E000 o algo asi
por si puede dar algun problema.

Valores relacionados (PSX y otros sistemas)
Esto tambien lo he desarrollado yo con el tiempo,
resulta que en muchos juegos los valores estan muy cercanos.

si sacamos el codigo de HP infinito de un RPG, podemos
probar a el numero anterior a los 4 valores, sumarle 2
y es probable que obtengas el codigo de energia total es decir,
tendras el codigo de

HP 9999/9999
| \
Energia inf - Energia total

asi como otras muchas variaciones, recuerda, que teniendo
un codigo de un aspecto visible del juego, cambiando valores
de 2 en 2 como he dicho antes (hacia arriba o hacia abajo)
te pueden salir cosas muy interesantes.

Como anecdota, yo llegé con esto hasta a tener en el Tony Hawk 2 al patinador sin cabeza
y con ésta en la rodilla XD

--------------------------------------------------
Bueno el tutorial yo lo veo completo,
os dejo esta parida como colofón xd

[youtube]https://www.youtube.com/watch?v=uTEXAqs4Spo[/youtube]

Dar gracias al autor por este mensaje 2 usuarios agradecieron este mensaje: JordiAlba, Jorenob
Subir ^
Stick&Pad
Vanguardia
Vanguardia


Reg.: 19 Mar 2017
starstarstarstar

Mensajes: 182
Género: Masculino
Andalucía

Agradeció: 22 posts
Le agradecieron: 18 posts


#2 Sab 13 May 2017 11:11 - Asunto Responder citando
Menudo hacketa estás hecho!  Laughing

A mí todo eso de los valores y los códigos hexadecimales me suena a coreano, pero seguro que hay alguien que le puede sacar provecho al tutorial, así que gracias por compartirlo! :)

Sobre el vídeo: "¿Carretera? A donde vamos no necesitamos carreteras..."  descojone

Dar gracias al autor por este mensaje
Subir ^
Chixpy
Vanguardia
Vanguardia


Reg.: 08 Ene 2017
starstarstarstarstar

Mensajes: 135
Género: Masculino
Castilla y León

Agradeció: 7 posts
Le agradecieron: 13 posts


#3 Sab 13 May 2017 13:01 - Re: Asunto Responder citando
Stick&Pad escribió :
Menudo hacketa estás hecho!  Laughing

A mí todo eso de los valores y los códigos hexadecimales me suena a coreano, pero seguro que hay alguien que le puede sacar provecho al tutorial, así que gracias por compartirlo! :)


Bueno, realmente no hay que saber programar para buscar valores en la memoria con programas buscadores, de hecho están bastante "humanizados" permitiendo buscar en decimal directamente los valores en caso de valor conocido.

Tan solo añadir que en el caso de valor conocido a veces acabas con varias posiciones que cambian exactamente igual porque el valor está repetido (uno el valor real usado en memoria y otro el usado para mostrar en pantalla, por ejemplo). Incluso algunos además de buscar el valor especificado, simultáneamente también lo hace con el anterior y posterior (por ejemplo, aunque se muestre "Lives 3 " puede que internamente esté guardado como 2) y te muestra dichas posiciones de memoria también.

El hexadecimal no deja de ser una representación corta de lo que realmente se cuece y con solo entender los conceptos de cómo funciona la búsqueda suele ser más que suficiente para hacer pruebas y tener éxito.


Posiblemente sea de bastante ayuda conocer los "tipos" de datos numéricos "estándar" y sus rangos (byte, word*, entero, largo, flotante, etc.) y si puede que tengan signo.

Luego un poco más avanzado sería conocer como realmente los maneja la arquitectura, por ejemplo el Endianness, formato de negativos y el tamaño de su palabra (y su posible alineación en la memoria que simplifica las cosas). Y aun así los buscadores de trucos se encargan habitualmente de esas cosas (si es específico para la plataforma). Por eso a veces el Cheat Engine, que es para Windows, a veces no funciona como era de esperar con los emuladores si la plataforma que emulan difiere de los Intel, a no ser que se le indique específicamente.

----

Y apuntar una cosa...

La PSX usa palabras de 4 bytes, mientras que la SNES/MD/etc sí que son 2 bytes. Pero nada impide a la SNES manejar valores de más de 65535 ni a la PSX de 4.294.967.295 (puede que soporten operaciones con números de 2 o 4 palabras nativamente).

En el truco del dinero que has puesto de ejemplo, el fallo fue buscar un "word" (2 bytes sin signo) en vez de un entero de 4 bytes (con posibilidad de que tenga signo):

Como la PSX es little-endian, la posición para completar el número es la siguiente; mientras que otros sistemas puede ser el anterior. Y por tanto solo modificas los 2 primeros bytes de un valor que se guarda en 4:

FFFF0000 = 65.535

Al añadir FFFF también en la siguiente posición de memoria te queda**:

FFFFFF00 = 16.777.215

Esto es independientemente de lo que se realmente muestre la pantalla o el efecto que produzca. Puede estar limitado por otros medios.

De esto se deduce, siempre que "la siguiente posición de memoria" sea el siguiente byte sea cierto, que para maximizar un valor de 4 bytes no hay que sumarle 1, sino 2 y ponerlo en FFFF. Y dependiendo si se interpreta con signo o no el resultado es 2.147.483.647 o 4.294.967.295.

Otras posibilidades: Es que el número se interprete como que tiene 3 bytes, pero si que es raro, raro, raaaaaroooo de cojones. O que realmente sea un coma flotante (decimal) y eso es un mundo para dar de comer aparte...

----

*: Word puede referirse a 2 bytes sin signo o al tamaño de la palabra de la arquitectura. A mi, personalmente, me gusta diferenciar dichos conceptos usando word al tipo de datos (2 bytes) y palabra para el tamaño natural usado por el sistema.
**: Desconozco realmente si en la PSX "la siguiente posición de memoria" significa el siguiente byte o el siguiente word (aunque esto último me extrañaría muy mucho, es posible que el trainer lo interprete así).

Dar gracias al autor por este mensaje
Subir ^
gadesx
Vanguardia
Vanguardia


Reg.: 03 Ene 2017
starstarstarstarstar

Mensajes: 90
Género: Masculino

Agradeció: 0 posts
Le agradecieron: 16 posts


#4 Escribió el primer mensaje de este tema Sab 13 May 2017 16:09 - Asunto Responder citando
@Chixpy
Cita:
aunque se muestre "Lives 3 " puede que internamente esté guardado como 2

Si, es verdad, me ha pasado muchas veces, depende del juego y si salen
0 resultados me toca probar con comparaciones de mayor-menor.

Cita:
Tan solo añadir que en el caso de valor conocido a veces acabas con varias posiciones que cambian exactamente igual porque el valor está repetido (uno el valor real usado en memoria y otro el usado para mostrar en pantalla, por ejemplo).

tambien me ha pasado muchisimas veces, y suelo dejar ambos

Sobre los codigos de psx es que el tema es que en memoria no se ven como dices,
así que entenderlo de otra forma es complicado.
Al verlo desde un cartucho en la propia consola como el Xplorer fx, game hunters, etc

Se ven así, de lo que sacas que los 4 numeros de la derecha son valores, y era todo en hexadecimal
801C0E54-0120

Lo de los 3 bytes es la forma que encontre para tener dinero en los juegos de 999.999 o más

La snes si que maneja valores mas altos como dices, por ejemplo en el Lufia 2 puedes
tener 9.999.999 de oro aunque no me he puesto a mirar como se hace.

Yo prefiero trabajar en decimal y a unas malas si toca poner valores en hex ni lo pienso,
lo convierto con la calculadora de windows  Cool

@Stick&Pad
No es nada complicado, la forma mas facil es con el zsnes con el cheat searcher que lleva,
suele ser seguir los pasos de busqueda y se consigue facilmente.
En la psx tenia 10-11 años, pocos juegos y el Xplorer fx para chetar,
los gran turismo eran de mis mejores pasatiempos para esto, modificando los
valores de suspension y tal mas del limite tambien conseguia que fuesen a dos ruedas,

y con el gran turismo 4 de ps2 hay uno de velocidad que es un descojone tambien
aunque en estos al ir rapido el coche no hace eso de "acelerar a 800, retroceder a 800 y volar" xdd
https://youtu.be/svmypzPUCBE?t=50s

Dar gracias al autor por este mensaje
Subir ^
gadesx
Vanguardia
Vanguardia


Reg.: 03 Ene 2017
starstarstarstarstar

Mensajes: 90
Género: Masculino

Agradeció: 0 posts
Le agradecieron: 16 posts


#5 Escribió el primer mensaje de este tema Vie 02 Jun 2017 13:13 - Asunto Responder citando
Tambien tendria que contar un poco de como editar roms, las que se pueden sin mucho problema  Mr. Green
[ Aquí va una imagen (hay que estar registrado para verla) ]

Dar gracias al autor por este mensaje
Subir ^
Mostrar mensajes anteriores:    
Responder Página 1 de 1
Horas en GMT + 2
Ir a: 

NO puedes: crear mensajes/responder temas/editar tus mensajes/borrar tus mensajes/votar en encuestas -> Regístrate/Conéctate
Volver a Emuladores