Pokémon HeartGold y SoulSilver - pleonex/AiroRom GitHub Wiki
Fue desarrollado por Game Freak en el año 2009. Es de género RPG corresponde a la quinta generación de los juegos de Pokémon. Se lanzó exclusivamente para NDS y se localizó a todos los idiomas de la consola.
Textos
Mismo formato, cifrado y claves que en Pokémon Perla y Diamante. Hasta se mantiene el fallo de seguridad.
Protección por nombre de ficheros. Los primeros textos (¿todos?) están en a/0/2/7.
Fuentes
Mismo formato que en Pokémon Perla y Diamante
Protección por nombre de ficheros. Los primeros textos (¿todos?) están en a/0/1/6. También en pbr/font.arc.
Imágenes
Están cifradas al igual que en Pokémon Perla y Diamante. En este caso aunque las claves son las mismos se empieza a descifrar por el comienzo de los datos en lugar de por el final (¿da igual?).
Audio
No está cifrado, son secuencias (MIDI).
Acceso a ficheros
Este juego se protege poniéndo todos los ficheros con nombres numéricos dentro de carpetas numéricas. La forma que internamente se accede a los ficheros es mediante IDs. De esta forma existe una tabla con todas las rutas a las ficheros. El acceso a esta tabla es mediante un ID, por ejemplo a a/0/2/7 le corresponde 0x1B.
Los desarrolladores posiblemente se facilitaron la tarea creando un archivo genérico como el siguiente
filepaths.h
#define MESSAGE_FILE_ID 0x1B
Sabiendo que hay 10 carpetas y ficheros en cada carpeta. Se comprueba que:
0*9 + 2*10 + 7 = 27 = 0x1B
De forma que el software que más tarde usaron para ofuscar el nombre de los ficheros solo tuvo que coger el ID interno y clasificar los archivos. Si bien no hay rastro del nombre original de esta forma se puede saber de qué arcihvo se está cargando en el juego cuando se llama a la función:
0x0200BAF8: load_file
Argument 0: Unknown
Argument 1: File ID