Montrez quel artiste vous êtes grâce à Nintendo DS Art Academy Extractor

J'ai créé ce petit utilitaire en m'amusant avec le jeu Art Academy sur Nintendo DS. J'étais frustré de ne pas avoir la possibilité d'exporter mes "oeuvres d'art", j'ai donc décidé de porter un regard hexadécimal sur la sauvegarde du jeu, espérant pouvoir localiser quelques fichiers NCGR, NCLR et NSCR pouvant être mes créations. Je fus surpris de découvrir des blocks de données EXIF, me menant à des entêtes JPG! Tant de travail économisé. Les images de la galerie sont sauvegardés en tant que jpeg avec leurs vignettes, avec du exif 2.2 contenant leur date/heure de création, et "Nintendo DS" en tant que modèle d'appareil photo (et oui).

Voici comment le logiciel fonctionne:

  • Faites glisser votre sauvegarde sur le fichier .exe, ou bien lancez ce dernier pour afficher un dialogue d'ouverture de fichier.
  • Celui-ci va parcourir la sauvegarde, cherchant pour du jpeg.
  • Il va garder uniquement les plus grands (512x384 px) en laissant les aperçus.
  • Puis va les enregistrer sous %mes images%\Art Academy\%exif_date%.jpg

Téléchargement

v1.1

NDS Art Academy Extractor 1.1.exe

  • Option d'archivage de la sauvegarde en cours dans Mes Images\Art Academy\archived savegames

v1.0

NDS Art Academy Extractor 1.0.exe

Un peu de code

Voici comment je m'y prend pour parcourir les octets de la savegame à la recherche de fichiers JPEG (en C#):

byte[] saveBytes = File.ReadAllBytes(save);

bool foundHeader = false;
int startIndex = 0;
for(int i = 0; i < saveBytes.Length; i++)
{
    if (saveBytes[i] == 0xFF && saveBytes[i + 1] == 0xD9 && foundHeader == true)
    {
        int length = i - startIndex + 1;
        var imageBytes = saveBytes.Skip(startIndex).Take(length+1).ToArray();

        //Do stuff with your imageBytes here, such as File.WriteAllBytes(startIndex+".jpg", imageBytes);

        foundHeader = false;
    }
    if (saveBytes[i] == 0xFF && saveBytes[i + 1] == 0xD8)
    {
        startIndex = i;
        foundHeader = true;
    }
}

Extra: Rom Forensics

Après avoir décompressé la rom, j'ai été surpris de voir les ressources graphiques encodées en jpg, png ou encore tga. C'est plaisant de voir les développeurs utilisant des standards au lieu des formats propriétaires de big N, ce qui leur a probablement permis d'économiser du temps étant donné le nombre de graphiques nécessaires. Ceux-ci semblaient avoir quelque humour, comme le démontre le nom "Ninty_logo" pour le logo de démarrage Nintendo. Il en fallait peu pour faire ma journée.

Aussi, les crédits sont stockés dans un .txt brut. Je n'ai pas pris plus le temps d'explorer les binaires, mais il doit y avoir d'autres choses intéressantes là dedans.

Article précédent Article suivant