Tutoriel - Redimensionner la partition USER d'un dump de NAND (pour emuMMC Atmosphère)
Introduction:
Ce tutoriel va intéresser les amateurs de l'emuMMC intégré dernièrement au CFW Atmosphère. En effet, vous avez maintenant la possibilité sur AMS de lancer une NAND "alternatif" stockée sur votre carte SD (au lieu d'utiliser celle sur la puce mémoire de votre switch appellé sysNAND). Le redimensionnement de la partition USER (qui contient vos données utilisateur) est utile dans le cas d'un emuMMC/emuNAND pour récupérer une partie du stockage perdu (en moyenne 20Go), en effet il est inutile d'avoir un emuMMC de 32Go puisque vous installez tous vos jeux dans la SD et le dossier Nintendo.
Pré-requis:
- Un ordinateur sous Windows, macOS ou Linux
- Avoir Python3 sur sa machine
- Un dump de NAND (splitté ou non) réalisable très facilement avec Hekate, il vous faudra à la fin les fichiers BOOT0 BOOT1 et RAWNAND.BIN (ou RAWNAND.BIN.00, RAWNAND.BIN.01... dans le cas d'un dump splitté)
- Votre fichier prod.keys contenant vos BIS KEY 3 (permettant de decrypter la partition USER) que vous pouvez obtenir via le payload LockpickRCM
Etape 1 - Préparation des fichiers:
Nous allons commencer par fusionner les fichiers du dump de NAND en un seul fichier nommé emummc.bin.
Dans le cas d'un dump non-splitté:
cat BOOT0 BOOT1 rawnand.bin > emummc.bin # Sur macOS ou Linux copy /b BOOT0+BOOT1+rawnand.bin emummc.bin # Sur Windows
Dans le cas d'un dump splitté:
cat BOOT0 BOOT1 rawnand.bin.* > emummc.bin # Sur macOS ou Linux copy /b BOOT0+BOOT1+rawnand.bin.* emummc.bin # Sur Windows
Nous nous retrouvons maintenant en possession de notre fichier emummc.bin
Etape 1B - Uniquement utilisateur macOS
Cette étape vous est destine uniquement si vous êtes un utilisateur de macOS. Merci à @shadow_shd pour les précisions.
Installer mbedtls via Homebrew (brew)
brew install mbedtls
Si vous n'avez pas le gestionnaire de paquet Homebrew sur votre installation macOS, ça s'installe très facilement avec:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubus.../master/install)"
Etape 2 - Récupération du script:
1) Télécharger le script sur https://gist.github....75f2720a1e5e486, sur la page cliquez sur Download ZIP afin de récupérer une archive contenant le script resize-user.py
2) Installer la dépendance mbedtls avec PIP pour que le script puisse fonctionner:
python3 -m pip install -U python-mbedtls # Sur macOS ou Linux py -3 -m pip install -U python-mbedtls # Sur Windows
Etape 2 - Récupération du script:
1) Télécharger le script sur https://gist.github....75f2720a1e5e486, sur la page cliquez sur Download ZIP afin de récupérer une archive contenant le script resize-user.py
2) Installer la dépendance mbedtls avec PIP pour que le script puisse fonctionner:
python3 -m pip install -U python-mbedtls # Sur macOS ou Linux py -3 -m pip install -U python-mbedtls # Sur Windows
Etape 3 - Redimensionner la partition USER:
Placez-vous dans le dossier contenant le script resize-user.py et mettez dans le même dossier vos fichiers emummc.bin et prod.keys. Exécuter la commande ci-dessous:
python3 resize_user.py emummc.bin <nouvelle taille de la partition en GiB> prod.keys
Le fichier est automatiquement redimensionné, si vous indiquez une taille invalide le script la refusera, ne spécifiez pas l'unité G après votre taille donnez uniquement un nombre.
Si vous comptez réaliser un emuMMC sur Atmosphère en mode partition caché, vous pouvez vous arrêtez ici et écrire le fichier emummc.bin sur la partition de votre carte SD.
Si vous voulez récupérer les fichiers de votre dump BOOT0 BOOT1 et rawnand.bin afin de réaliser un emuMMC en mode fichier ou quelque chose d'autre. Vous pouvez passer à l'étape 4.
(OPTIONNELLE) Etape 4 - Extraire le BOOT0 BOOT1 & rawnand.bin à partir d'un emummc.bin:
Pour se faire nous allons utiliser la commande DD de Linux et macOS, si vous êtes sur Windows vous pouvez récupérer le binaire de DD à cette adresse: http://www.chrysocome.net/dd
Ensuite utilisez les commandes ci-dessous:
dd bs=1c count=4194304 if=emummc.bin of=boot0.bin dd bs=1c skip=4194304 count=4194304 if=emummc.bin of=boot1.bin dd bs=1c skip=8388609 if=emummc.bin of=rawnand.bin
Merci à shadow256 pour les commandes même si elles sont très longues, en l'attente d'une nouvelle façon de faire
Terminé, vous avez redimensionné votre dump, vous pouvez aller le tester Dans ce tutoriel je l'ai réduit de environ 10Go mais on aurait pu très largement viser plus haut. De cette façon on récupéré une grande partie de l'espace du dump.
Salut,
Je suis sur macOS Mojave et pour que l'installation de python-mbedtls réussisse sans erreur il faut au préalable installer mbedtls via la commande :
brew install mbedtls
Sinon on tombe systématiquement sur l'erreur :
'mbedtls/platform_util.h' file not found
Lors de l'installation de la dépendance python-mbedtls.
Pour installer Homebrew ouvrir un terminal et entrer la commande :
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Merci pour ce tuto qui me sera très utile ; il est en effet inutile d'avoir une partition User de 32 Go qui ne servira à rien
Edit :
Pour l'étape 4 optionnelle, sous macOS la bonne syntaxe des commandes est :
dd bs=1 count=4194304 if=emummc.bin of=boot0.bin:) dd bs=1 skip=4194304 count=4194304 if=emummc.bin of=boot1.bin dd bs=1 skip=8388609 if=emummc.bin of=rawnand.bin
La dernière commande peut nécessiter un temps important, pour une taille réduite à 10 Go il a fallu environ 14 heures à mon Mac Mini 2014 SSD pour créer le fichier rawnand.bin
Salut,
Je suis sur macOS Mojave et pour que l'installation de python-mbedtls réussisse sans erreur il faut au préalable installer mbedtls via la commande :
brew install mbedtls
Sinon on tombe systématiquement sur l'erreur :
'mbedtls/platform_util.h' file not found
Lors de l'installation de la dépendance python-mbedtls.
Pour installer Homebrew ouvrir un terminal et entrer la commande :
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubus.../master/install)"
Merci pour ce tuto qui me sera très utile ; il est en effet inutile d'avoir une partition User de 32 Go qui ne servira à rien
Edit :
Pour l'étape 4 optionnelle, sous macOS la bonne syntaxe des commandes est :
dd bs=1 count=4194304 if=emummc.bin of=boot0.bin:)
dd bs=1 skip=4194304 count=4194304 if=emummc.bin of=boot1.bin
dd bs=1 skip=8388609 if=emummc.bin of=rawnand.bin
La dernière commande peut nécessiter un temps important, pour une taille réduite à 10 Go il a fallu environ 14 heures à mon Mac Mini 2014 SSD pour créer le fichier rawnand.bin
Bonjour et tout d'abord un énorme merci pour ce tuto ! J'aimerai savoir comment écrire le fichier emummc.bin sur la partition de ma carte SD ? Désolé je débute dans le hack switch..
Merci !!
Bonjour et tout d'abord un énorme merci pour ce tuto ! J'aimerai savoir comment écrire le fichier emummc.bin sur la partition de ma carte SD ? Désolé je débute dans le hack switch..
Merci !!
Pareil, comment? on dois repartitionner à la taille souhaité du fichier auparavant? merci!
Salut,
Merci pour le travail du script, le concept est très intéressant (dommage qu'il soit en python + module only)...
Regrettablement le "tuto" est minimaliste et la plupart qui s'intéresseront à ce super script seront dans l'incapacité de l'utiliser, ce qui est vraiment dommage par rapport au travail de codage fourni.
Pour y remédier : ça fait plusieurs heures que je travail sur une explication détaillée pouvant satisfaire un néophyte .
Si tout est OK concernant Linux et MAC, malheureusement il en est tout autre pour Windows et après plusieurs jours de test, (sauf erreur de ma part) : ton mini-tuto est erroné et il n'est pas possible d'utiliser ce script sous Windows !
(Dans le cas contraire, vu le temps passé à étudier la question, je serai ravie de comprendre mon erreur si une solution existe réellement).
// Erreur à la fin du tuto :
dd bs=1 skip=8388609 if=emummc.bin of=rawnand.bin
la bonne valeur c'est 8388608 pas 8388609
// Pour linux :
1) On pourrait ajouter au tuto les commandes que l'on peut utiliser dans le terminal :
sudo su apt update apt install python3 apt install python3-pip apt upgrade python3-pip pip3 install --upgrade pip pip3 install --upgrade setuptools pip3 install -U python-mbedtls python3 resize-user.py emummc.bin X prod.keys
2) Ou passer par une install wheel (.whl)
https://pypi.org/pro...-mbedtls/#files
ou
https://pypi.org/sim...python-mbedtls/
pip install wheel pip install ./{path}/x.whl
----------
// Pour Windows : FAIL
Pour ceux qui ne souhaite pas lire le détail de tous les tests, en bref : il m'a été impossible "d'installer" (compiler) mbedtls => erreur PEP 517.
Avec du recul (après tous les tests et la possibilité 2 de la partie Linux), on peux même constater qu'aucun wheel mbedtls win, n'est disponible.
Alors avant que certain se lance dans l'aventure et évite de perdre leurs temps voici tous les tests déjà effectué :
1) Win 7 pro x64 (arium) + python-3.7.5-amd64
a) Requirement :
- Pour utiliser (compiler) des modules python sous windows ce n'est pas si simple et un certain nombre de chose sont nécessaires, notamment des SDK windows et Redistributable visual studio.
Note : Sans installer tout cela l'erreur "Visual c++ 14.0 manquant apparaîtra."
Plus d'info ici :
https://www.scivisio...-c-14-required/
ou ici :
https://wiki.python....WindowsCompiler
Avec "l'évolution" (encore et toujours plus de maj), le cloud et la grande mode des web-installer il est parfois pas aisé de trouvé d'ancienne version compatible avec ce que vous souhaitez... (par défaut on nous fait télécharger une usine à gaz version 2019 et qui s'avère pas totalement compatible et incomplète ...)
Les downloaders peuvent être trouvé ainsi :
Microsoft Visual C++ 2015 Redistributable Update 3 :
http://download.micr..._redist.x64.exe
http://download.micr..._redist.x86.exe
Visual Studio (C++ Builds Tools) + SDK windows 8.1 (compatible win7) : Microsoft Build Tools 2015 Update 3
http://download.micr...dtools_full.exe
Note : prévoir 3Go
ou
https://visualstudio...lder-downloads/
Onglet "Redistribuables et gen tool"
Personnellement je n'ai pas vu de différence, mais certains devs préconisent que le chemin du compilateur (cl.exe) doit être ajouter les la variables d'environnement "path".
Par exemple : "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin".
1b) Installation :
Installer "Microsoft .NET Framework 4.5"
Installer "Microsoft Visual C++ 2015 Redistributable Update 3"
installer "C++ Builds Tools" + "SDK windows 8.1" via "visual studio"
Téléchargement de python (Par exemple : python-3.7.5-amd64) :
https://www.python.org/downloads/
C'est parti :
py -3 -m pip install --upgrade pip py -3 -m pip install --upgrade setuptools py -3 -m pip install -U python-mbedtls
Fail ! => Building wheel for python-mbedtls (PEP 517) ... error
Mode binary peut-être ?
pip install --only-binary :all: mbedtls
Fail ! => ERROR: Could not find a version that satisfies the requirement mbedtls (from versions: none)
c) Mince cela ne fonctionne pas (après toutes ces heures passé à trouver le nécessaire...)
C'est peut-être python ?
Go désinstall / install ...
Test avec :
python-2.7.16.amd64
python-3.4
python-3.6.6-amd64
python-3.7.5
python-3.7.5-amd64
python-3.8.0
python-3.8.0-amd64
=> idem
d) peut-être visual studio ?
go réinstall pack complet ce coup là (et pas juste C++ + SDK)
=> idem
----------
2) Win 7 MSDN + MAJ
Bon c'est peut-etre l'OS qui n'est pas optimal...
Go install win7 MSDN (+ x python)
=> idem
----------
3) Win 10
Peut-être win7 qui n'est plus pris en charge ?
Go install win10 pro x64
Attention : les packages requis ne sont pas les mêmes :
"Microsoft .NET Framework 4.7.2" + "KB4480955"
Visual Studio 2019 + SDK windows 10 :
https://aka.ms/vs/16..._buildtools.exe
Note : un 1er téléchargement de 1 Mo pour récupérer le downloader
un 2eme téléchargement de 71 Mo pour récupérer le (gros) web-installer
Puis auto-décompression de 175 Mo (dans "C:\Program Files (x86)\Microsoft Visual Studio\Installer")
Et enfin lancement du sélectionneur de téléchargement...
Il y a possibilité de télécharger le pack complet :
cmd (dans le dossier ou à été télécharger vs_buildtools.exe) :
vs_BuildTools --layout c:\VSLayout --lang fr-FR
Attention le pack fait 18 Go !
Une fois le tout (enfin) installé....
=> idem même erreur !
Je pense avoir fait le tour de la question...
Pour ma part et sauf preuves contraire le module mbedtls n'est pas compatible windows, et par conséquent le script non plus... et nécessite donc une modification du tuto.
Voici une des erreurs principale complète :
C:\Windows\System32>py -3 -m pip install -U python-mbedtls Collecting python-mbedtls Using cached https://files.pythonhosted.org/packages/ed/e4/0d2e61fca4132aea46c93df5e995df3058327935bc6048e738db3663c777/python-mbedtls-0.18.3.tar.gz Installing build dependencies ... done Getting requirements to build wheel ... done Installing backend dependencies ... done Preparing wheel metadata ... done Collecting certifi Using cached https://files.pythonhosted.org/packages/18/b0/8146a4f8dd402f60744fa380bc73ca47303cccf8b9190fd16a827281eac2/certifi-2019.9.11-py2.py3-none-any.whl Building wheels for collected packages: python-mbedtls Building wheel for python-mbedtls (PEP 517) ... error ERROR: Command errored out with exit status 1: command: 'C:\Python37\python.exe' 'C:\Python37\lib\site-packages\pip\_vendor\pep517\_in_process.py' build_wheel 'C:\Users\UTILIS~1\AppData\Local\Temp\tmp6xtwuo2c' cwd: C:\Users\UTILIS~1\AppData\Local\Temp\pip-install-qt2ftj94\python-mbedtls Complete output (37 lines): running bdist_wheel running build running build_py creating build-3.7.5 creating build-3.7.5\lib.win-amd64-3.7 creating build-3.7.5\lib.win-amd64-3.7\mbedtls copying src\mbedtls\hash.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls copying src\mbedtls\hmac.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls copying src\mbedtls\secrets.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls copying src\mbedtls\__init__.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls creating build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\AES.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\ARC4.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\ARIA.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\Blowfish.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\Camellia.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\CHACHA20.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\DES.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\DES3.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\DES3dbl.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher copying src\mbedtls\cipher\__init__.py -> build-3.7.5\lib.win-amd64-3.7\mbedtls\cipher running build_ext cythoning src\mbedtls\exceptions.pyx to build-3.7.5\temp.win-amd64-3.7\Release\pyrex\mbedtls\exceptions.c creating build-3.7.5\temp.win-amd64-3.7 creating build-3.7.5\temp.win-amd64-3.7\Release creating build-3.7.5\temp.win-amd64-3.7\Release\pyrex creating build-3.7.5\temp.win-amd64-3.7\Release\pyrex\mbedtls building 'mbedtls.exceptions' extension creating build-3.7.5\temp.win-amd64-3.7\Release\build-3.7.5 creating build-3.7.5\temp.win-amd64-3.7\Release\build-3.7.5\temp.win-amd64-3.7 creating build-3.7.5\temp.win-amd64-3.7\Release\build-3.7.5\temp.win-amd64-3.7\Release creating build-3.7.5\temp.win-amd64-3.7\Release\build-3.7.5\temp.win-amd64-3.7\Release\pyrex creating build-3.7.5\temp.win-amd64-3.7\Release\build-3.7.5\temp.win-amd64-3.7\Release\pyrex\mbedtls C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Python37\include -IC:\Python37\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" /Tcbuild-3.7.5\temp.win-amd64-3.7\Release\pyrex\mbedtls\exceptions.c /Fobuild-3.7.5\temp.win-amd64-3.7\Release\build-3.7.5\temp.win-amd64-3.7\Release\pyrex\mbedtls\exceptions.obj exceptions.c build-3.7.5\temp.win-amd64-3.7\Release\pyrex\mbedtls\exceptions.c(596): fatal error C1083: Impossible d'ouvrir le fichier includeÿ: 'mbedtls/error.h'ÿ: No such file or directory error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.23.28105\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2 ---------------------------------------- ERROR: Failed building wheel for python-mbedtls Running setup.py clean for python-mbedtls Failed to build python-mbedtls ERROR: Could not build wheels for python-mbedtls which use PEP 517 and cannot be installed directly
"dd.exe" bs=4096 iflag=count_bytes count=4194304 if="emummc.bin" of="BOOT0"
"dd.exe" bs=4096 iflag=count_bytes,skip_bytes skip=4194304 count=4194304 if="emummc.bin" of="BOOT1"
"dd.exe" bs=4096 iflag=skip_bytes skip=8388608 if="emummc.bin" of="rawnand.bin"