Pubblicato un rapido aggiornamento correttivo per de_Fuse ZIP, il modchip basato su de_Fuse, un difetto nella macchina a stati di lettura OTP eFuse della Wii U.
Il modchip open source ci permette di ottenere l’esecuzione del boot1 iniettando un problema nella tensione poco dopo il ripristino, prima che la console inizi ad eseguire il codice.
Lo sviluppo del modchip de_Fuse ha avuto inizio su console Wii Mini, all’epoca dei fatti non ancora hackerata, nato con lo scopo di eseguire il glitch sul boot0.
Questo aggiornamento correttivo segue la prima versione con supporto per Stroopwafel, una funzionalità ancora in fase di sviluppo ma stabile, che consente la coesistenza con Aroma per l’utilizzo di homebrew.
Stroopwafel funziona in modo simile a SaltyNX, dirigendo l’esecuzione del codice a wafel_core
anziché al gestore di ripristino in 0xFFFF0000
. wafel_core
corregge il kernel, i moduli e i segmenti IOS, per poi passare a 0xFFFF0000
.
La memoria per i plugin di Stroopwafel viene prelevata dalla fine del ramdisk, da 128 MiB a 0x20000000
. Per ulteriori informazioni sul bootstrap, è possibile consultare le specifiche.
I plugin di Stroopwafel sono mappati su tutti i moduli IOS, consentendo la patch del codice e la sostituzione delle funzioni. Inoltre, sono state aggiunte ulteriori mappature MMU per consentire trampolini B/BL a istruzione singola.
I plugin sono PIE (Position Independent Executable) e si riposizionano all’avvio. Inoltre, i plugin possono risolvere i simboli di altri plugin. wafel_core
fornisce diverse API di base per l’applicazione di patch e la ricerca di simboli.
Al momento, wafel_core
offre tutte le funzionalità precedentemente menzionate, come redNAND, semihosting e wupserver.
Nota: Questa è una versione pre-1.0 per i primi utenti che vogliono sapere se il loro RPi Pico è cablato correttamente per de_Fuse, così come per gli sviluppatori interessati al CFW coldboot. Molte cose attualmente non sono implementate e/o necessitano di miglioramenti. Tuttavia, quanto fornito è sufficiente per verificare che il Pico sia installato correttamente.
File richiesti
boot1.img
: Immagine della scheda SD per minute_minute.fw.img
: Bootloader principale, minute.ios.patch
: Patch de_Fuse_iosuhax per 5.5.1ish, penso che tecnicamente funzionerà anche su 5.5.5?otp.bin
: Questo può essere scaricato tramite il menu di minute, sottoBackup and Restore
>Dump OTP via PRSHhax
. Il menu sarà ancora disponibile seotp.bin
non è presente, tuttavia IOS non sarà in grado di avviarsi.
All’interno dell’archivio .zip
vengono fornite le seguenti versioni:
- pico_defuse @ 489a877
- de_Fuse_iosuhax @3f32c2ab234f7371794738a1135ee65b8d753801
- minute_minute @bcd13ef3e4c40442c206a5b54401976c7824bfd4
Passaggi
- Flashare il file
pico_defuse.uf2
sul Raspberry Pi Pico tramite USB. Questo può essere fatto copiando il file sul dispositivo di archiviazione di massa USB che appare. - Flashare il file
boot1.img
su di una scheda SD con almeno 1 GB di spazio di archiviazione. Alcune schede da 2 GB potrebbero funzionare, ma 1 GB sembra essere il punto debole: deve solo essere non SDHC.boot1.img
include un’intestazione MBR, quindi potrebbe essere necessario formattare la partizione in FAT32 dopo il flashing per continuare. Il flashing può essere eseguito tramite win32diskimager, dd o qualsiasi altro formattatore di schede SD. - Copiare i tre file
fw.img
,ios.patch
eotp.bin
nella root della scheda SD. Se non si dispone del fileotp.bin
, questo può essere scaricato tramiteBackup and Restore
>Dump OTP via PRSHhax
. - Accendere la console Wii U. Se funziona correttamente, il LED di alimentazione lampeggerà e diventerà viola. Per impostazione predefinita, il menu minute verrà visualizzato sulla console seriale, tuttavia è possibile posizionare un file INI sulla scheda SD per attivare l’avvio automatico.
Accesso al menu minute
Per il momento è necessaria una console seriale per utilizzare il menu. Su Windows è possibile utilizzare PuTTY, su Linux/macOS è possibile utilizzare minicom (ad esempio: minicom -b 115200 -o -D /dev/cu.usbmodem11101
).
minute
può essere configurato per l’avvio automatico in IOS tramite sdmc:/minute/minute.ini
. Per attivare il menu manualmente, premere (ma non tenere premuto) il pulsante di accensione 3-10 volte (come se stessi tentando di accedere al BIOS su un computer) o finché il menu non viene visualizzato sulla console seriale.
Da qui è possibile scambiare la scheda SD ed eseguire il backup della NAND. Per eseguire il backup di MLC, attualmente si consiglia di formattare la redNAND con una scheda SD da 64 GB, quindi copiare le partizioni dalla scheda SD.
Un esempio di avvio automatico in minute.ini
è il seguente:
[boot]
autoboot = 1
autoboot_timeout = 3
Ripristino dei backup NAND
minute ora supporta il ripristino dei backup NAND, tuttavia potrebbero esserci ancora alcuni bug persistenti. fintanto che si dispone di un backup dei file SLC.RAW
e SLCCMPT.RAW
da qualche parte al SICURO, STARAI BENE!!
Sono riuscito a cancellare completamente il mio SLCCMPT e ripristinarlo, ma ho anche eseguito un ripristino in cui alcuni settori non si sono programmati per qualche motivo. Potrebbe essere stata solo la mia scheda SD però.
Ho intenzione di continuare a lavorare su questo, dal momento che voglio anche ripristinare un’unità la cui NAND è stata completamente cancellata senza backup. Tuttavia, lo stato attuale delle cose è come ho detto.
Una NAND corrotta apparirà come segue nei log IOSU:
- “Attached volume to slc01 (raw)”.
- “Attached volume to slccmpt01 (raw)”.
- Un sacco di spam su hash errati (questo accade anche se
otp.bin
non è valido o azzerato).
Overclock della GPU
Dalla versione 0.5 minute include il supporto sperimentale per l’overclocking (o underclocking) della GPU Radeon specificando i parametri PLL all’interno del file ini.
Questo potrebbe potenzialmente danneggiare la console Wii U se i calcoli potrebbero risultare non corretti. La console potrebbe anche non avviarsi correttamente nel menu o potrebbe diventare instabile durante il normale utilizzo.
Panoramica degli override manuali del PLL:
div_select = ?
clkV is spread spectrum related maybe?
clkS is clock source...?
clkXtal = 27MHz
clkO = clkO0Div, clkO1Div, or clkO2Div (based on div_select)
clkF = (clkFMsb << 16) | (clkFLsb << 1)
freqMhz = clkXtal * (clkF/0x10000) / (clkR+1) / (clkO/2)
Esempio di valori INI non modificati:
; Defaults:
; GPU = 544.999878MHz
; 27 * (0x285ED0 / 0x10000) / (0+1) / (0x4/2)
[clocks]
gpu_clk_r = 0x0
gpu_clk_f = 0x285ED0
gpu_clk_s = 0x1C2
gpu_clk_v = 0x7
gpu_clk_o_0div = 0x4
gpu_clk_o_1div = 0x4
gpu_clk_o_2div = 0x0
Esempio di overclock:
; GPU = 679.999878MHz (1.25x)
; 27 * (0x325ED0 / 0x10000) / (0+1) / (0x4/2)
[clocks]
gpu_clk_f = 0x325ED0
Nota: La GPU diventa instabile a circa 770 MHz durante i miei test.
Risoluzione dei problemi
Avrai bisogno di una console seriale collegata per questo, vedere sopra per aiuto.
Se il LED della console rimane rosso dopo aver premuto il pulsante di accensione e si avvia normalmente dopo circa 30 secondi, significa che de_Fuse non è riuscito a rilevare correttamente o che la scheda SD non è valida.
Un de_Fuse riuscito ha questo aspetto:
[pico] Changed state: WIIU_STATE_POWERED_OFF -> WIIU_STATE_NEEDS_DEFUSE
Starting... 1152
Results:
Winner! 0xfb80
01
02
03
04
05
08
09
0a
0b
0c
0d
0e
13
14
15
18
1b
1c
1d
1e
1f
25
88
89
8a
...
- Se le righe iniziali non sono
01
,02
,03
,...
, significa che i GPIO DEBUG non sono cablati correttamente. - Se l’ultima riga è
0x1E
e il codice di errore è0x00
, si tratta di una scheda SD non valida. Le schede SD non valide sembrano bloccarsi in boot0. - Se la riga finale è
0x25
e nell’output sono presenti1e
e1f
, significa che la scheda SD era valida, ma non è stata flashata correttamente (o altrimenti non è stata letta). - Se la riga finale è
0x25
e1e
e1f
NON sono nell’output, significa che il cavo EXI CLK non è collegato correttamente o c’è un problema con il cavo dati EXI.
Changelog v0.7
- Questa è la prima versione con Stroopwafel! Il supporto è ancora in fase di sviluppo, tuttavia è stabile e consente la coesistenza con Aroma per homebrew.
- Hotfix (v0.7.1): Correzione di
boot1.img
che si bloccava durante il caricamento disdmc:/fw.img
.
Changelog v0.5.1
- Corretto un bug in cui venivano letti solo 16 FAT ISFS su 64, che a volte causava il caricamento errato di
fw.img
da SLC. - Da @OancaAndrei:
git cherry-pick
‘d ripristino MLC nel menuBackup and Restore
. Attualmente non supporta la scrittura SLC dalle partizioni. - Aggiunta l’opzione
force_pause
alla sezione[boot]
INI, consente di mettere in pausa prima dell’avvio per lo scambio SD.
Changelog v0.5
- Aggiunte più sicurezze intorno alla pressione dei pulsanti/SMC.
- Corretto il problema con la formattazione redNAND che non si interrompeva correttamente al primo prompt.
- Aggiunto il cmd della console interattiva
upp
/uploadpatch
per il caricamento diios.patch
su seriale. - Aggiunto il supporto per l’overclock manuale della GPU tramite
sdmc:/minute/minute.ini
.
Changelog v0.3
-
boot1.img
ora verifica BoardConfig CRC32 e, se non è valido, la DRAM viene inizializzata utilizzando le impostazioni predefinite di fallback.- Aggiunto il supporto per il dumping OTP basato su PRSHhax per tutte le versioni boot1 disponibili su CDN (prod e dev).
- Aggiunto il dumping e il ripristino di
BOOT1_SLC.RAW
. - Aggiunto il supporto per il ripristino di seeprom.bin.
- Questa opzione può comportare l’impossibilità di scaricare OTP tramite PRSH hax se fai qualcosa di stupido!
- Ho aggiunto quante più misure di verifica/sicurezza possibili per assicurarmi che PRSH hax non venisse bloccato, ma alla fine è responsabilità dell’utente mantenere
otp.bin
eseeprom.bin
al sicuro. - Un elenco incompleto di cose che possono smettere di funzionare in modo irreversibile se si perde il backup del file
seeprom.bin
e si esegue il flashing di qualcosa di errato include:- L’unità disco.
- Salvataggi memorizzati su unità USB.
- Aggiunto il supporto per la sincronizzazione delle versioni SEEPROM boot1 con NAND dopo il flashing di
BOOT1_SLC.RAW
.- Questa opzione richiede una copia del file
otp.bin
dalla stessa console (e questo è verificato).
- Questa opzione richiede una copia del file
- Modificato il partizionamento redNAND per posizionare 1 MiB di spazio libero all’inizio della scheda SD per le immagini Ancast.
- Vari miglioramenti dell’affidabilità.
Changelog v0.2
- Hotfix: Corretto OTP che non scaricava senza
otp.bin
sulla scheda SD (lol). - Dumping OTP tramite
Backup and Restore
>Dump OTP via PRSHhax
. - Ripristino di
SLC.RAW
eSLCCMPT.RAW
, tramiteBackup and Restore
. - Input console seriale più veloce/più affidabile.
- Un chainloader seriale
fw.img
per minute_minute dev.- Imposta env var MINUTE_MINUTE_FW_IMG sul percorso assoluto di
fw.img
.
- Imposta env var MINUTE_MINUTE_FW_IMG sul percorso assoluto di
Download: de_fuse v0.7.1
Download: Source code de_fuse v0.7.1
Fonte: github.com