Attention, ce payload n'a pas été testé sur un grand nombre de consoles, bien que j'ai pu le tester sur une console Erista et une OLED les retours seront grandement appréciés, pour l'instant n'effectuez pas d'actions avancées ou pouvant impacter dangereusement votre console si vous n'êtes pas capable de réparer manuellement, vous êtes donc comme d'habitude seul responsable de vos actes.
Trois semaines de travail (et encore de nands/emunands logiciellement flinguées par mes divers tests) après la première release de mon nouveau projet, LockSmith-RCM, qui est un payload multi-fonctions, je vous propose la version 0.10.0 de celui-ci.
Ce payload combine les fonctions des payloads Lockpick-RCM, ProdinfoGen, Incognito, DowngradeFixer et FusesCheck mais pas uniquement, il permet aussi de faire un dump/restauration de PRODINFO et une vérification/corrections des hashes de celui-ci, un dump du firmware de la nand, un reset de la nand, du contrôle parental, de débricker avec un package EmmcHacGen placé dans le dossier "cdj_package_files" (avec ou sans suppression de données et beaucoup, beaucoup, beaucoup plus rapidement que mon script équivalent via mon Ultimate-Switch-Hack-Script et TegraExplorer sur les consoles Mariko) et encore bien d'autres choses.
Et se n'est pas terminé, contrairement à tous les payloads sur lesquels il est basé celui-ci fonctionne sur une plus large quantité de configurations, notamment d'anciennes configurations basées sur des puces utilisant Spacecraft qui pouvaient poser des problèmes dès qu'on souhaitait travailler sur ou avec la nand (emunand ou sysnand qu'importe). Bien sûr le payload peut travailler sur la sysnand, sur l'emunand d'Atmosphere mais aussi sur les emunands basées sur la variable "emupath" dans les configs de Hekate (fonction qui n'a pas été testée), dans le cas de plusieurs emunands configurées correctement sur la SD un choix devrait pouvoir se faire pour sélectionner l'emunand sur laquelle travailler. Il peut aussi, comme TegraExplorer, utiliser un fichier de clés pour charger les clés à utiliser pour déchiffrer les nands, pratique si par exemple vous utilisez une nand d'une autre console que vous auriez besoin de débricker.
Et attendez ne partez pas, la plupart des fonctions du payload peuvent aussi être exécutées automatiquement juste en plaçant des fichiers sur la SD qui feront office de flags, dans ce cas le payload exécutera les fonctions selon les fichiers trouvés puis affichera un log récapitulant les actions effectuées et enregistrera ce log sur la SD.
Changelog 0.10.0:
Bref si vous voulez en savoir plus allez voir le readme sur le Github du projet, vous y trouverez tous les détails du fonctionnement de ce payload et pour télécharger le payload c'est par ici.
Pour ceux étant encore là après tant de lecture (bravo et merci à vous) j'ai aussi besoin de vos avis. En effet je souhaite implémenter le contrôle du payload avec les joycons (fonction dispensable) et surtout le dump des sauvegardes des jeux sur la nand (un peu comme JKSV même si sera bien moins précis à cause de l'environnement limité d'un payload). Mais voilà, ces fonctions prennent trop de place pour la taille restante dans le payload et je ne pense pas être capable de mettre en place un système de module comme NYX dans Hekate. Donc selon vous, surtout parmi ces fonctions lesquelles vous semblent inutiles:
Si vous appréciez mon travail vous pouvez me faire une donation via ce lien si vous avez un compte Paypal (n'engendre pas de frais de transaction) ou via ce lien si vous n'avez pas de compte Paypal et n'hésitez pas à faire vos retours car j'en manque sérieusement.
Wii System Menu Extractor & Normalizer
Un outil avancé de reverse engineering, écrit en Rust, conçu pour extraire, décompresser et normaliser autant de ressources que possible du Menu Système de la Wii vers des formats standards et ouverts (glTF, PNG, JSON, WAV).
Il peut également — bien que ce ne soit pas son objectif principal — extraire et convertir des fichiers de certains jeux Wii.
1. Accès aux données (moteurs d’extraction)
- ASH (.ash) : Machine virtuelle Huffman/LZ77 personnalisée et intégrée, permettant une décompression bit-par-bit exacte.
- LZ77 (.LZ, .lz7) : Prise en charge complète des variantes 0x10, avec détection robuste.
- Yaz0 (.szs) : Décompresseur LZSS haute performance pour les archives de chaînes.
- Archives standards (.app, .arc, .zip) : Extraction complète des arborescences U8 et ZIP.
- Conteneurs NW4R (.brres, .breft) : Extraction des sous-fichiers par scan heuristique de signatures.
2. Normalisation des ressources (qualité musée)
Graphismes (pixel-perfect)
- TEX0 / TPL / BTI → PNG : Décodage GX complet.
- Amélioration unique : stratégie « White-Alpha » pour la gestion des formats à intensité (I4, IA4), garantissant des éléments d’interface sans artefacts noirs.
Prise en charge complète de RGBA8 (planaire) et CMPR (Wii BC1/DXT1).
- Gestion des palettes (PLT0) : Application automatique aux textures indexées (CI4 / CI8).
Interface (dépendante de l’UI)
- BRLYT → JSON : Reconstruction de l’arbre de scène hiérarchique complexe.
- BRLAN → JSON : Extraction des courbes d’animation.
Modèles 3D
- MDL0 → glTF 2.0 : Export de la géométrie complète (versions v1 à v11).
Typographie
- BRFNT → JSON & PNG : Décodage bit-par-bit exact, incluant le tuilage spécifique Wii 8×4 utilisé par les polices (Rodin).
Extraction des métriques de glyphes (CWDH) et des tables Unicode (CMAP).
Audio & musique
- BWAV → WAV : Prise en charge des fichiers du Menu Système.
- RWAV / RWSD / RBNK → WAV : Décodage DSP-ADPCM matériel 16 bits.
- BRSEQ → MIDI & JSON : Séquences musicales (travail encore en cours).
Reverse engineering
- SEL → JSON : Prise en charge des fichiers binaires (Static Executable Linker).
Récupération du chemin de build d’origine (.elf) et de la table complète des symboles (noms internes des fonctions).
UTILISATION
Build
cargo build --releaseExécution
./target/release/wii_system_menu_extractor <CHEMIN_DU_DOSSIER_OU_FICHIER_TITLE>Le programme traite les fichiers de manière idempotente : il détecte les extractions déjà effectuées et ne traite que les nouveaux fichiers ou ceux modifiés.
Lancer le programme directement (sans terminal) dans le répertoire courant produit le même effet sur son contenu, même sans sortie graphique.
Il n’existe pas encore de version officielle ni de numéro de version. Le programme est toujours en développement, mais il est fonctionnel et suffisamment efficace pour la majorité des usages.
APPIMAGE
Un script de build AppImage est fourni dans le dossier scripts.
Une AppImage prête à l’emploi est également disponible dans le dossier packages.
Le programme a été compilé sous Debian 13 et nécessite au minimum les versions de certaines bibliothèques incluses dans cette distribution de référence.
En conséquence, cette AppImage devrait fonctionner sur toutes les distributions Linux à jour.
ETAT DU SUPPORT (CIBLES)
Format : TEX0 / TPL
Normalisation : PNG
Statut : Ultra-fidélité (White-Alpha)
Format : BRLYT / BRLAN
Normalisation : JSON
Statut : 100 % (structure arborescente)
Format : BRFNT
Normalisation : PNG + JSON
Statut : Pixel-perfect (Rodin tuilé)
Format : SEL
Normalisation : JSON
Statut : Symboles et chemin ELF
Format : BWAV / RWAV
Normalisation : WAV
Statut : Bit-perfect
Format : MDL0
Normalisation : glTF 2.0
Statut : Géométrie et UV
Format : BMG
Normalisation : JSON
Statut : Multilingue
GLOSSAIRE DES FORMATS ET JSON NORMALISES
Archives et compression
ASH / LZ77 / Yaz0
Formats de compression propriétaires.
Normalisation : décompression vers les fichiers originaux (.arc, .brres).
U8 / ARC / APP
Archives de fichiers non compressées.
Normalisation : extraction dans des sous-dossiers _extracted.
Graphismes et typographie
TPL / TEX0 / BTI (textures Wii) vers PNG.
Stockage tuilé GX. Les formats IA4 et IA8 sont normalisés via la stratégie White-Alpha pour l’interface.
BRFNT (police binaire) vers atlas PNG et JSON.
Le JSON contient les métriques (hauteur, ligne de base) et le mapping Unicode (code vers index de glyphe).
Champs JSON : ascent (hauteur au-dessus de la ligne de base), widths (largeur par glyphe).
Interface et animation
BRLYT (layout) vers JSON.
Stocke l’arbre hiérarchique de l’interface (panes).
Le champ root contient la pile de panes avec le nom, les positions x/y/z, l’échelle, la rotation et les enfants hiérarchiques.
BRLAN (animation de layout) vers JSON.
Contient les séquences d’animation appliquées aux panes BRLYT.
Champs JSON : animations (cibles), keyframes avec time (frame) et property (valeur).
Audio
RWAV / BWAV vers WAV.
Fichiers audio bruts, souvent en DSP-ADPCM (compression matérielle 4 bits) ou PCM16.
BRSAR / RWSD vers WAV et JSON.
Le JSON liste les sons et leurs propriétés (volume, pitch).
Reverse engineering
SEL (table des symboles) vers JSON.
Contient les métadonnées de linkage du code Wii, souvent présentes dans les fichiers .app.
Champs JSON : internal_path (chemin d’origine sur le PC du développeur Nintendo), symbols (liste complète des noms de fonctions C++ récupérées).
BMG (Message Group) vers JSON.
Table de textes localisés.
Champ JSON : messages associe un identifiant numérique à la chaîne traduite.
LICENCE
GNU General Public License version 3 (GPL 3) – Tikilou
LIENS
AppImage :
https://github.com/T...x86_64.AppImage
Dépôt GitHub :
https://github.com/T...ctor-Normalizer
PS: Ce projet fait partie d’un projet “Museum” beaucoup plus vaste.
C’est encore en développement.
L’approche est volontairement alignée avec celle de Valve sur la préservation et l’accès aux contenus.