Skip to content

Latest commit

 

History

History
69 lines (55 loc) · 6.86 KB

README.md

File metadata and controls

69 lines (55 loc) · 6.86 KB

MSET9

Merci

  • Luigoalma pour son aide en asm dans ID1gen !
  • Aspargas2 (le Chat Noir) pour l'aide asm dans ID1gen aussi !
  • TuxSH pour usr2arm9ldr et quelques bons conseils !
  • ToxicAven pour les améliorations substantielles de mset9.py !
  • Danny8376 pour l'ajout du support macOS !

MSET9 in action

Qu'est-ce que c'est ?

Il s'agit d'un exploit primaire ARM9 pour 3DS qui peut être lancé avec seulement des données de nom de fichier ajoutées à la carte SD insérée.

Comment fonctionne-t-il ?

Dans l'implémentation de FSPXI:EnumerateExtSaveData (appelé par MSET pour analyser 3DS extdata IDs pour la gestion des données), la valeur de retour de l'appel à la fonction interne process9 pour ouvrir un répertoire (lors de l'énumération du contenu du répertoire extdata) n'a pas été vérifiée. Par conséquent, si l'appel échoue, un pointeur non initialisé sur la pile sera utilisé pour un appel de table virtuelle.

Ainsi, un fichier (au lieu d'un dossier attendu) qui commence par 8 chiffres hexagonaux peut faire planter process9 s'il est placé directement dans le répertoire extdata. Il peut se planter de différentes manières en fonction de différences subtiles dans la façon dont l'utilisateur déclenche l'événement de plantage.

Bien qu'il conduise le plus souvent à des déréférences nulles, dans un contexte spécifique, le processus9 saute directement à une chaîne ID1 conservée dans la mémoire de l'ARM9. Il est surprenant de constater que la console 3DS ne se soucie pas des caractères utilisés pour le nom du répertoire ID1 sur la carte SD, puisqu'elle n'exige que 32 caractères. Cela permet à l'attaquant d'insérer des instructions arm dans le nom de fichier unicode ID1 et de prendre le contrôle de l'ARM9, et donc le contrôle total de la 3DS.
Source: 3Dbrew

Que dois-je faire ?

-- Vous avez besoin d'un 3ds 11.4-11.17, toutes régions confondues (probablement, je ne les ai pas tous testés).
-- Un lecteur USB vers SD
-- PC Windows/MAC/Linux (ce système pourrait être étendu à chromeOS et/ou Android à un moment donné, si possible)

Directions

Dans l'archive de la version ou, de préférence, 3DS Hacks Guide- MSET9.

Dépannage

https://3ds.hacks.guide/troubleshooting.html#installing-boot9strap-mset9

FAQ

  • Q : Cela permet d'installer boot9strap et d'écrire sur la carte NAND ? R : Oui ! Qu'est-ce que tu vas faire d'autre avec le contrôle ARM9, a9lh ? pastaCFW ? sketchy tetris clones" :p
  • Q: Ça a l'air dangereux, Zoogie ! A : Oui, c'est un peu ça, mais la scène fait ce genre de choses dangereuses depuis des années. Il suffit de s'asseoir pendant la phase bêta si on est concerné.
  • Q : Que se passe-t-il si je ne désinstalle pas l'exploit une fois que j'ai terminé ? R : Vous aurez des difficultés à lancer les titres précédemment installés, en plus de plantages aléatoires dans FBI et les paramètres du système. Veillez donc à nettoyer l'exploit ! (l'option 4 du menu mset9.py permet de le faire)
  • Q: Comment compiler ? R : Recherchez les offsets fopen/fread dans offsets.txt pour votre firmware et votre modèle de 3ds. Copiez les adresses fopen/fread existantes dans id1gen/id1gen.s avec les adresses que vous avez choisies. En root, lancez build.bat. Prenez la longue chaîne hexagonale dans out/haxID1_output.txt et placez-la dans "encodedId1s" (choisissez-en un) dans MSET9_installer_script/mset9.py. Un fichier ID1 décodé se trouvera également dans out/<32 chars de n'importe quoi>.

(le reste de l'article est plus une simple information que quelque chose d'important)

  • Q : Le fichier qui déclenche l'exploit (002F003A.txt) ressemble à une adresse virtuelle, hein ? R : Il s'agit des caractères ":/", quelque chose que nous ne pouvons pas afficher dans un nom de fichier/dossier classique. Un fait pratique de ce fichier (en plus de déclencher le crash général) est que les 8 premiers caractères de ce nom de fichier hexadécimal sont convertis en un u32 qui existe 0x44 après SP, de sorte que je peux l'utiliser pour ajouter les caractères manquants dans le chemin de fichier de la charge utile "sdmc??b9", et garder le système d'exploitation du PC heureux.
  • Q : Vous avez suggéré dans l'explication du hack ci-dessus que FS_EnumerateExtData est la fonction responsable du crash de MSET/ARM9, pourrait-elle être appelée dans le userland homebrew pour prendre le contrôle d'ARM9 ? R : Peut-être ? J'ai brièvement joué avec cette idée, mais je n'ai pas réussi à trouver un contexte de crash que je pouvais contrôler, contrairement à la méthode pré-userland de MSET9. Peut-être cela pourrait-il être un exercice pour l'utilisateur spécialisé afin d'explorer et d'étoffer cette variante potentielle de MSET9 ! Cela pourrait s'avérer utile par la suite.
    Fait amusant : le fichier hexagonal à 8 chiffres, s'il est laissé dans extdata, fera également planter FBI lorsqu'il sélectionnera l'option "Ext Save Data" dans son menu principal. C'est le seul homebrew que je connaisse qui appelle FS_EnumerateExtData.
  • Q : Pourquoi avez-vous raccourci SafeB9SInstaller.bin en SafeB9S.bin ?
    R : Conserve la norme de nom de fichier 8.3 de FAT qui évite les noms de fichiers longs et permet ainsi des économies d’espace significatives dans la bibliothèque FatFs. Le "B9" est également utilisé pour la même raison, bien qu’il ne soit pas lié aux FatFs. La faible empreinte de code est d’une importance primordiale partout dans cet exploit.
  • Q : Pourquoi cela ne fonctionne-t-il que sur les versions 11.4+?
    R : Il fonctionne en fait 3.0+, mais ces anciennes entreprises n’ont pas besoin d’être prises en charge en raison du grand guide utilisant d’autres exploits pour cette gamme.
  • Q : Que s’est-il passé sur la version 3.0 pour que mset9 fonctionne ?
    R : Sur le refactor d’entreprise natif 3.0, Nintendo a introduit une régression qui permet à l’exploit de fonctionner (un retour de fonction non coché).
  • Q : Pourquoi est-il difficile de prendre en charge certains systèmes d’exploitation non 3DS ?
    R : Parce qu’ils n’aiment pas la folie funky unicode :
    �﫿餑䠇䚅敩ꄈ∁䬅䞘䙨䙙꫿ᰗ䙃䰃䞠䞸退ࠊꁱࠅ캙ࠄsdmc退ࠊb9
    ( ͡° ͜ʖ ͡°)

Autres remerciements

Il s’agit de dépôts contenant des binaires homebrew inclus dans l’archive de publication. Un grand merci aux auteurs.
https://github.com/LumaTeam/Luma3DS
https://github.com/d0k3/GodMode9
https://github.com/d0k3/SafeB9SInstaller (renommé SafeB9S.bin)
https://github.com/devkitPro/3ds-hbmenu
https://github.com/SciresM/boot9strap
https://github.com/Steveice10/FBI