Stroopwafel rappresenta l’evoluzione di iosuhax, basandosi sul codice di SALT iosuhax ma introducendo una serie di funzionalità avanzate e miglioramenti significativi per gli sviluppatori Wii U. Questo progetto open source offre un potente framework per la modifica e l’estensione delle funzionalità dell’IOSU, il sistema operativo che gestisce l’hardware della Wii U.

Caratteristiche Principali

Funzionalità Avanzate Integrate

  • de_Fuse support: Reindirizza tutte le letture OTP alla RAM, richiedendo minute_minute per l’inserimento dei dati

  • Caricamento di fw.img decriptato in IOSU

  • IOSU reloads gestiti tramite minute per semplificare il patching

  • Disabilitazione scritture SEEPROM (per maggiore sicurezza)

  • Accelerazione redNAND MLC: Sposta la cache MLC (SCFM) a SLCCMPT

  • Semihosting hooks: Invia kprintf e syslogs alla seriale pico de_Fuse

  • Disabilitazione disk drive (senza scrittura SEEPROM)

  • USB_SHRINKSHIFT: Permette di avere sia il filesystem Wii U che un filesystem normale sullo stesso drive, spostando la parte Wii U dopo l’MBR

  • USB_SEED_SWAP: Sostituisce la chiave USB SEEPROM per facilitare la migrazione del sistema

Funzionalità Sperimentali

  • Caricamento di kernel.img da sdcard (instabile)

Avvertenze Importanti

⚠️ Il formato redNAND è incompatibile con altre implementazioni! Usare minute per formattare.

⚠️ Se avete drive USB esistenti, mantenere USB_SHRINKSHIFT impostato a 0

⚠️ PRINT_FSAOPEN è utile ma estremamente lento

⚠️ Testato solo su fw.imgs 5.5.x, non portato per versioni precedenti

Compilazione e Installazione

Per compilare Stroopwafel:

# Necessario per i plugin
export STROOPWAFEL_ROOT=$(pwd)

# wafel_core
make 00core.ipx

# esempio plugin
make -C wafel_plugin_example

Sistema di Plugin

Stroopwafel introduce un potente sistema di plugin che permette di aggiungere patch personalizzate all’IOSU. Un plugin compilato può essere posizionato accanto a wafel_core.ipx e verrà caricato da minute.

I plugin offrono due hook principali:

  1. void kern_main() – eseguito prima di tutto in modalità kernel

  2. void mcp_main() – eseguito prima del thread principale di MCP sotto MCP

Un esempio di struttura plugin è disponibile in wafel_plugin_example.

Patching dell’IOSU

Stroopwafel fornisce diverse macro per applicare patch all’IOSU tramite plugin (definite in wafel/patch.h):

  • U32_PATCH_K(_addr, _val): Sovrascrive l’indirizzo virtuale con un valore a 32bit

  • ASM_PATCH_K(_addr, _str): Inserisce codice assembly all’indirizzo specificato

  • ASM_T_PATCH_K(_addr, _str): Come sopra ma per codice Thumb

  • BL_TRAMPOLINE_K(_addr, _dst): Genera un branch relativo BL

  • Varianti Thumb e altre opzioni avanzate

Hooking con Trampoline

Stroopwafel offre due metodi avanzati per hooking nell’IOSU:

  1. Hook Before: Crea un trampoline che chiama la tua funzione prima di eseguire l’istruzione originale

  2. BL Replace: Sostituisce una chiamata BL esistente con la tua funzione

Sono disponibili varianti per codice ARM e Thumb, con diverse opzioni per la gestione dei registri.

Dettagli Tecnici

Stroopwafel opera in modo simile a SaltyNX: invece di saltare all’handler di reset a 0xFFFF0000, reindirizza l’esecuzione a wafel_core, che si occupa di patching del kernel IOS, moduli e segmenti prima di passare il controllo.

I plugin sono mappati su tutti i moduli IOS per permettere patching e sostituzione di funzioni. wafel_core fornisce API di base per patching e ricerca di simboli.

Aggiornamenti Recenti (v1.3)

  • Risolto problema con gamepad che non si spegneva durante lo shutdown del vWii

  • Aggiunti trampoline per NSEC e BSP

  • Opzione per i plugin di sovrascrivere haidev

Per il download e ulteriori informazioni: GitHub StroopwafelCFW

Stroopwafel rappresenta uno strumento potente per la comunità di sviluppo Wii U, offrendo flessibilità e controllo senza precedenti sull’IOSU. Con la sua architettura modulare e il sistema di plugin, apre nuove possibilità per la sperimentazione e lo sviluppo di funzionalità avanzate.

Da FRANCESCO

Sviluppatore a tempo perso nato negli anni 80, amante delle console e delle retro console.Il mio motto è quello di aiutare il prossimo senza avere rimorsi di cio' che hai fatto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.