Visor de Pokemons Diamante/Perla (Posible futuro proyecto) AYUDA con HEX en el SAVE!

Hola, estamos pensando en crear en un futuro no muy lejano un visor de pokemons para diamante/perla y actualmente necesitamos algo de ayuda con los datos de la partida guardada.

Hemos descubierto que los pokemon de esta versión de DS están formados por 136 bytes (frente a los 80 bytes por los que estaban formados en las ediciones inmediatamente anteriores) y que su primera palabra larga (4bytes), que está sin encriptar, parece ser el Identificador del Pokemon, y la segunda (también sin encriptar) es el checksum. El resto... no se por donde cogerlo...

También sabemos más o menos obtener toda la información una vez desencriptado, pero ahí está el problema:

¿Alguien sabe o conoce alguna guía donde espliquen la manera de ver los pokemon en hexadecimal directamente de los saves de Diamante/Perla? Por mucho que lo he intentado no he conseguido hayar el metodo de encriptación que utilizan.

0x1CFF4 <- es la dirección de la posición 1 de la caja 18 (es donde hago las pruebas, por si a alguien le interesa)

Si alguién tiene algo de información al respecto y quiere compartirla, le estaríamos agradecidos.

(Voy a poner aquí los programas en el principal)

NeoArk escribió:Edito: He creado un programa para extraer los pokemon encriptados de la partida, visualizarlos y salvarlos en ficheros. Es más comodo así que tener que andar recorriendo la partida con un editor hexadecimal cada vez que se quiere buscar algo.

PokeLab_0.25 (Linux)

PokeLab_0.19 (Windows) <- Gracias a Christian por la compilación

(ATENCIÓN: La versión de windows muestra las palabras dobles invertidas, por problemas con la funcion htonl.


La versión 0.25 desencripta y exporta en formato .bin y .pkm compatible con pokesav.
te aseguro que si supiera algo de programacion estaria encantado de ayudar en lo que fuese.

pero no se nada de nada. kiero aprender!!!1 [amor]
Demasiado tarde, que el juego lleva meses:
http://www18.atwiki.jp/pokeanalyze/pages/10.html para toda la información en japonés y http://pokesav.umimi.com/ para el programa que la implementa.
Busca traducciones, que se han hecho.
Yo me aventure a traducirlo (Mas bien a complementar y perfeccionar la traduccion)Traduccion Pokesav hecha por mi...
Y aunque por ahi meti la pata con un item,no saber como se llaman todas las ciudades y no conocer que rayos son los items de "underground" creo que es lo mas avanzado (en nuestro idioma) que encontraremos por aqui respecto al juego ahorita..
P.D. Si deveras te piensas meter de lleno con el save ¿Porque no mejor en vez de hacer esto mejor hacemos un "estabilizador de Checksum" para manosearle los datos al save? (conozco algunos datos que el pokesave no controla)
greatfire, conocemos esta web desde hace tiempo y parte de la información de la web ha sido de gran ayuda para el proyecto.
Sin embargo, no hemos encontrado en ella nada sobre el metodo de encriptación que utilizan para los pokemon en el save, que es lo que necesitamos saber.

Lo único que hayamos sobre ese tema es que:
"$08-$87は複雑に暗号化されている" ($80-$87 wa fukuzatsu ni angouka sareteiru).
Que quiere decir que los bytes desde el 0x80 hasta el 0x87 estan encriptados de forma compleja, pero eso ya lo suponiamos y no dicen nada sobre como desencriptarlo.

No se si es que esa información no la han publicado en la web o si es que no la hemos visto en ella... si fuese esto último, ¿te importaría facilitarnosla?

Dr. Katts, creo que un "estabilizador de checksum" sí que existía ya, un segundo que mire...
aquí (creo que era esto)

De todas formas nuestra intención no es editar la partida, solo leerla.
Yo ahorita llevo algo de informacion propia (puede ser de utilidad)...
Una manera de ver el "Como" es usando el pokesav ir cambiando poco a poco datos para irlos localizando y determinar donde y que hace cada parte del save..Pero si te puedo ayudar adelante!!
P.d Acabe con mas dudas de las que comence ya que no se ni pio de japones....(la traduccion lo saque comparando datos del juego)
Dr Katts, ya hemos intentado eso, pero al estar encriptado es imposible descubrir nada de esa manera, por que a poco que cambies un solo dato, se modifica todo. mira, por ejemplo...

voy a subir una imagen de un hexdump de dos zubats exactamente iguales (solo que el segundo tiene un punto más de ataque que el primero) y verás que solo coinciden en la primera palabra larga (4 bytes) que esta sin encriptar.

Imagen

(Los zubats son lo que he sombreado en color rojo)
Creo que como no conozcamos el metodo de encriptación no conseguiremos nada...

Aquí dejo un txt con lo que hemos podido descubrir de momento, haciendo cosas similares a como se hacía en rubi/zafiro/.../esmeralda y comparando datos con los desencriptados que muestra el pokesav:

información

A ver si entre todos conseguimos sacar algo... :)
Creo que ya te estoy empezando a entender..ya que mi objetivo era otro (nombres,ataques y otro tipo de cosas) osea sacar datos para que la maquina no tuviera registrados y de ahi hacer que los hiciera funcionar (osea sacar datos "Basura" pero que funcionan) y como tu bien haces mencion estan encriptados pero algo que note (todavia no lo pruebo) parece ser que la clave son los primeros bits ya que mi conclusion actual es que ese es el que marca como se esta encriptando..Voy a hacer pruebas con el archivo que me mandaste ya que parece ser que solo se enfoca a una parte del save...
No entiendo muy bien lo que quieres decir en la primera parte de tu mensaje, pero sí, tienes razón en que probablemente esa primera palabra larga tenga que ver con la clave de encriptación (En Ruby/Zafiro/.../Esmeralda la clave de encriptación era una clave Xor que se conseguía "Xoreando" los inversos de las dos primeras palabras largas (aunque ahora que lo pienso, eso era en la memoria, no en la partida)) pero aquí parece ser mucho mas complicado que en las ediciones anteriores.

No parece ser un Xor, ya que codifica de maneras distintas datos iguales, y el hecho de que modificar un simple dato cambie casi todo, me hace pensar que el checksum quizá también tiene algo que ver en la clave, pero no se... no estoy muy puesto en temas de criptografía y esto son suposiciones mias.

La imagen esa que publique, sí, se centra solo en una parte del save, concretamente el principio de la caja 18 (que es donde tengo almacenados los pkmn con los que estoy haciendo las pruebas).

Edito: Cuando digo Checksum, me refiero al individual de cada pokemon (los 2 ultimos bytes de la segunda palabra larga), no al global de la partida.

Si consigues descubrir algo... aquí estamos :)
pero ahora mismo que se puede modificar en el pokemon perla y diamante (me refiero a datos que estén sin encriptación)
Pues ahora mismo se pueden modificar muchas cosas gracias a (o por culpa de) un programa llamado PokeSav, cuyo creador al parecer conoce el metodo de encriptación.

Yo esto lo veo muy chungo... lo ideal sería que el japonés que creó el PokeSav, revelase la información, pero parece ser que no ha dicho nada...

¿Habrá por aquí algun hacker que pueda descubrir como funciona el PokeSav leyendolo en hexadecimal?...

UN PROGRESO IMPORTANTE:

Hemos descubierto que si aplicamos el algoritmo de encriptación sobre un pokemon encriptado, se desencriptan las diez primeras palabras largas encriptadas. Por tanto el algortimo de encriptación y desencriptación para estas diez es el mismo.
La frecuencia de cada ataque es el numero de MasPP usados, de 0 a 3

38 bit0 - bit4 Valor Individual de PS
38 bit5 - bit7 $39 bit0 - bit1 Valor Individual de Ataque
39 bit2 - bit6 Valor Individual de Defensa
39 bit7 $3A bit0 - bit3 Valor Individual de Velocidad
3A bit4 - bit7 $3B bit0 Valor Individual de Ataque Especial
3B bit1 - bit5 Valor Individual de Defensa Especial
Los valores individuales van del 0 al 31, por eso sólo ocupan 5 bits cada uno.

3B bit 6 = 0 es un pokemon, 1 = es un huevo
3B bit 7 = 0 el nombre es el original 1= tiene apodo
En GBA esta palabra es conocida como Estructura D1, excepto que el bit 7 codificaba la habilidad, no el uso de apodo.

3C-3D-3E-3F Cintas de Concurso y Especiales Antiguas, codificadas en D2. No incluye la Obediencia.

40 aparte del genero incluye la forma de unown, minotmuchi/minomadam, karanakushi/toritodon y Deoxys. Y si fue mediante evento.

52 y 53 son terminales para nombres japoneses

5F codifica el juego originario

68 a 77 es el nombre del EO y, de nuevo, 72 y 73 son terminales para nombres japoneses.

de 78 a 7A la fecha es cuando se recibio un huevo, mientras que de 7B a 7D la fecha es de nacimiento, captura o intercambio de un pokemon.
7E y 7F codifican donde se recibio el huevo y 80 y 81 donde se abrio/capturo
84 codifica el nivel original, pero hay que añadirle 80h para algo referente a la madre.
greatfire, gracias por tu respuesta pero eso no es lo que buscamos, quiza no me explicase bien, a ver....

Esa información que has mostrado, es sobre los fichero .pkm que genera el PokeSav, es decir: es la información del pokemon, una vez desencriptada.

Lo que necesitamos es la manera de desencriptarla directamente desde la partida guardada (La clave o el algoritmo). Para que podamos llegar manualmente desde el propio pokemon encriptado en la partida, al pokemon desencriptado cuyos datos esta ves sí coinciden con lo que acabas de mostrar ahi, ¿sabes lo que quiero decir?

Mira, la columna de la izquierda es un Zubat encriptado, la de la derecha sin encriptar (desencriptado con pokesav)

3A90A3CE 3A90A3CE
00003F96 00003F96
E861FC15 29000000
D4BF093A 2022B7A9
9E0B9221 D8000000
DE073291 57270001
8E6F8C66 00000000
8CE69B0D 00000000
E0393148 00000000
5264A58D 00000000
84FC0A09 8D003000
... ...

La columna de la izquierda es tal y como están los datos en la partida, lo que necesitamos es la forma de poder pasar de una a otra, por que de la forma desencriptada de la derecha, se puede leer el pokemon fácilmente, de la forma que has indicado en tu post anterior.

Edito: He creado un programa para extraer los pokemon encriptados de la partida, visualizarlos y salvarlos en ficheros. Es más comodo así que tener que andar recorriendo la partida con un editor hexadecimal cada vez que se quiere buscar algo.

(VERSIONES ANTIGUAS, LAS ÚLTIMAS EN EL POST PRINCIPAL)

PokeLab_0.20 (Linux)

PokeLab_0.19 (Windows) <- Gracias a Christian por la compilación

(La versión de windows muestra las palabras dobles invertidas, por problemas con la funcion htonl.
Que cracks! seguir así esto avanza! [ok] [beer] [beer] [beer]
¿Alguién ha conseguido algo? ¿Alguna novedad?

Nosotros ahora estamos de examenes, así que iremos un poco más lento con el tema.
Hay un chico ingles que afirma haber conseguido romper la encriptación (parece muy de fiar), he intentado ponerme en contacto con él pero de momento no he obtenido respuesta :(

Edito: Muy buenas noticias! He obtenido respuesta!
Pika escribió:i wanted to release something along these lines during Christmas but well it got delayed and i am currently quite busy my current estimate would be mid to end feb.

Traducción: Quería liberar algo durante las navidades pero bueno... me retrasé y ahora mismo estoy algo ocupado. Estimo que será a mediados o finales de febrero.

Así que habrá que esperar hasta entonces para continuar con esto! :)
14 respuestas