ShofEL2 pour Switch

Liste que je veux le plus exhaustif possible pour utiliser l'exploit de Fail0verflow sur une switch.
j'ai fait le test depuis WSL mais il semble qu'on puisse le faire depuis une machine sur Ubuntu de la même manière, et sur VMWare aussi (par contre il faudra configurer la gestion USB) mais pas sur Virtualbox.
Après des tests plus poussés, depuis Windows cela semble compromis, il faut le faire depuis un Linux natif.
Et il y a un dépôt qui fournit les binaires déjà compilés! ça permet de se passer de ce tuto!

Depuis le 23/04/2018, nous pouvons "installer" Linux sur Switch.
Je met installer entre guillemets car c'est un peu subtil: on peut effectivement installer une distribution linux (archlinux ARM étant le plus simple) mais il faut lancer l'exploit depuis une autre machine depuis un port USB3, et ce à chaque boot.
Cela fait plusieurs prérequis mais rien d'insurmontable.
Voici les prérequis logiciels pour Linux (notez qu'il faut la dernière version d'ubuntu donc hésitez pas à faire un do-release-upgrade -d ):
 apt-get -y install git build-essential gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu python python-dev swig m4 libssl-dev libusb-1.0-0-dev libusb-dev bison flex curl zlib1g-dev bc pkg-config python3-usb
Notez qu'il va aussi falloir pyusb qui n'est pas fournit directement dans ubuntu, donc il va falloir l'installer avec pip, qui n'est pas non plus installé avec python:
cd ~/ && curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python get-pip.py && pip install pyusb
On peut maintenant récupérer le code de l'exploit à proprement parlé et faire les ajustements nécessaires :
mkdir ~/f0 && cd ~/f0
git clone https://github.com/fail0verflow/shofel2.git
git clone --recursive https://github.com/fail0verflow/switch-coreboot.git coreboot
git clone https://github.com/fail0verflow/switch-u-boot.git u-boot
git clone https://github.com/boundarydevices/imx_usb_loader.git
git clone https://github.com/fail0verflow/switch-linux.git linux

Il va falloir récupérer l'image du Pixel C et en extraire un fichier:
https://dl.google.com/dl/android/aosp/ryu-opm1.171019.026-factory-8f7df218.zip
Il faut copier le ficher bootloader-dragon-google_smaug.7900.97.0.img dans coreboot puis faire :

cd ~/f0/coreboot/util/cbfstool/ && make cbfstool ; cd ~/f0/coreboot && util/cbfstool/cbfstool bootloader-dragon-google_smaug.7900.97.0.img extract -n fallback/tegra_mtc -f tegra_mtc.bin ; cd ~/f0 

Il va aussi falloir créer un fichier dans linux :

curl  --create-dirs -o ~/f0/linux/lib/firmware/brcm/brcmfmac4356-pcie.txt  "https://chromium.googlesource.com/chromiumos/third_party/linux-firmware/+/f151f016b4fe656399f199e28cabf8d658bcb52b/brcm/brcmfmac4356-pcie.txt?format=TEXT"
Après ça, on peut lancer les différentes compilations
cd ~/f0/shofel2/exploit ; make ; cd ~/f0
cd ~/f0/u-boot ; export CROSS_COMPILE=aarch64-linux-gnu- ; make nintendo-switch_defconfig ; make ; cd ~/f0
cd ~/f0/coreboot ; make clean ; make nintendo_switch_defconfig ; make iasl ; make ; cd ~/f0
cd ~/f0/imx_usb_loader && make ; cd ~/f0/
cd ~/f0/linux && export ARCH=arm64 && export CROSS_COMPILE=aarch64-linux-gnu- && make nintendo-switch_defconfig && make && cd ~/f0
et vous pouvez aller vous préparer un petit gâteau au chocolat car la compilation de linux va prendre un certain temps...