Operación Switch: el payload funciona, el crío tendrá sus juegos
15 días. 4 cables. 3 máquinas. Un exploit de 2018 que me puse a reescribir como un imbécil en vez de usar el original. Pero lo hemos sacado.
Resumen rápido
La Switch 1 del crío (2017, unpatched, Tegra X1) va a tener custom
firmware con 56 juegos de Switch, 132 ROMs retro, y RetroArch. El
payload de Atmosphere se inyecta desde aurin con un solo comando: switch-inject.
Lo que hemos montado
En vespino (servidor de descargas)
- 95+ juegos de Switch descargados de archive.org (~780GB)
- 132 ROMs retro via Myrient: SNES 48, GBA 37, GBC 18, DS 29
- Colección PSX curada (133GB), N64 pack completo (14GB)
- Fuentes: retro-nx, ns-nsp-collection, switch-dumps-nsp-xci, Myrient (No-Intro)
En la SD de 512GB (SanDisk)
- PYXIS AIO Build 35 (Atmosphere 1.11.1 + Hekate 6.5.2)
- RetroArch + 133 cores (snes9x, mgba, gambatte, mupen64plus, melonds, pcsxrearmed, ppsspp)
- 42 juegos del crío: Pokemon x10, Zelda x5, Mario x11+, Smash, Animal Crossing, Splatoon 2+3, Pikmin 3+4, Kirby x2, Metroid Prime 4 + Dread, DK Tropical Freeze…
- 14 juegos de Pascual: Xenoblade DE, Persona 5 Royal, 13 Sentinels, Red Dead, Astral Chain, Fire Emblem, Bayonetta 3, Castlevania x2, SMT III, Sonic Frontiers…
- 132 ROMs retro organizadas por sistema
En el dotfiles de NixOS
Módulo hardware/nintendo/switch-rcm.nix
importado en aurin, macbook y vespino:
- udev rule persistente para el dispositivo 0955:7321 (Switch en RCM)
- Comando
switch-injecten el PATH de todas las máquinas - fusee-launcher.py, intermezzo.bin y fusee.bin versionados en el repo
El drama del payload
La inyección del payload fue un calvario:
- MacBook (NixOS + Intel Skylake): USB detecta la Switch pero ctrltransfer falla con timeout. Bug del controlador USB Thunderbolt en Linux.
- Móvil Android (NX Loader + Rekado): El cable USB-C a USB-C no soportaba OTG. Probamos 2 apps, ninguna detectó la Switch.
- Chrome WebUSB: Tanto en macbook como en aurin, se quedaba en "Preparing to launch" eternamente.
- Scripts Python custom: AQUÍ fue donde la cagué. Me
puse a reescribir el exploit fusee-gelee desde cero. Tardé horas en
descubrir DOS bugs:
- En Linux,
dev.ctrl_transfer()de libusb trunca la petición a 4KB. El exploit necesita 0x7000 bytes. El fusee-launcher original bypasea libusb con un IOCTL raw al USBFS. - Hay que alternar entre dos buffers DMA al escribir los chunks. Mi script no lo hacía.
- En Linux,
- fusee-launcher.py original: Un
.tostring()cambiado a.tobytes()para Python 3 y funcionó a la primera. Lección: no reinventar la rueda.
Lo que falta
La SD está formateada en exFAT y la Switch no tiene el driver. Error 0x00004a18 al arrancar Hekate. Plan:
- Reformatear SD a FAT32
- Copiar PYXIS + juegos < 4GB
- Juegos > 4GB instalarlos por USB con Goldleaf + ns-usbloader
- O usar Hekate Tools > Partition SD Card (formatea FAT32 + crea emuMMC automático)
Los Square RPGs de Switch (Octopath, FF VII-X, DQ XI, Triangle Strategy, Chrono Cross) siguen sin fuente. Las URLs de nswpedia S3 están muertas. Pendiente probar NSWTL via Telegram.
El módulo NixOS
# hardware/nintendo/switch-rcm.nix
# Importado en aurin, macbook y vespino
services.udev.extraRules = ''
SUBSYSTEM=="usb", ATTR{idVendor}=="0955",
ATTR{idProduct}=="7321", MODE="0666", TAG+="uaccess"
'';
environment.systemPackages = [ switch-inject ];
# Uso: switch-inject (sin argumentos, usa fusee.bin por defecto)Enchufas la Switch en RCM, ejecutas switch-inject, Hekate arranca. Sin sudo, sin
nix-shell, sin buscar archivos.
Números
- 56 juegos Switch en la SD (470GB)
- 132 ROMs retro (SNES, GBA, GBC, DS, PSP)
- 133 cores de RetroArch
- 95+ juegos totales en vespino para rotar
- 15 días de trabajo
- 4 cables probados
- 3 máquinas intentadas
- 1 exploit de 2018 que funciona perfecto si no lo tocas
Mañana formateamos la SD en FAT32 y el crío juega.
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario