Secuencia de arranque de Wii

La secuencia de arranque de la Wii sigue el siguiente esquema:

boot0 -> boot1 -> boot2 -> ...

A continuación se detallan los pasos de la secuencia:

boot0

boot0 es el primer paso en la secuencia de arranque y se encuentra en una ROM de sólo lectura en Starlet (Starlet es un procesador ARM926 contenido dentro de Hollywood, la GPU de la Wii).

boot0 lee las páginas de la NAND donde se almacena boot1, las desencripta con una clave fija (algoritmo AES), calcular el hash SHA1 de boot1 y lo comparar con un valor guardado en la memoria PROM (memoria de sólo lectura que puede ser programada una sóla vez, en fábrica). Si el hash almacenado en la PROM no coincide con el calculado por boot0 el sistema no arranca.

Por lo tanto: boot0 es inmodificable por estar en una ROM dentro de Starlet, y boot1 es inmodificable porque su hash se compara con un hash guardado en una memoria PROM (en la que no se puede escribir).

boot1

boot1 es cargado por boot0. Se encuentra en el primer bloque (bloque 0) de la NAND (páginas de la 0x00 a la 0x3F) y está encriptado con una clave fija que es parte del código de boot0, además se comprueba su hash con uno almacenado en una memoria PROM.

Por lo tanto, boot1 puede ser cambiado en el proceso de fabricación de la Wii, pero no es posible modificarlo después de que salga de fábrica.

boot1 carga boot2 (que también está en la NAND), lo desencripta y hace una verificación RSA. Al igual que ocurre en con boot0, si boot1 detecta que la firma de boot2 no coincide con la esperada el sistema no arrancará.

Hay distintas versiones de boot1:

  • boot1a - boot1b: Vulnerables

Son considerados vulnerables porque contienen el bug de las firmas trucha (strncmp / hash verification bug) que permite cargar un boot2 distinto al original (BootMii).

  • boot1c - boot1d : NO vulnerables

Nintendo solucionó el bug a partir de boot1c (es el boot1 que traen las consolas fabricadas a partir de mediados de 2008) por lo tanto si la Wii tiene boot1c, o superior, no se podrá modificar boot2 (porque no pasaría la verificación RSA) con lo que no se podrá instalar BootMii como boot2.

boot2

boot2 es cargado por boot1. Ocupa 7 bloques en la NAND (bloques del 1 al 7) (páginas de la 0x40 a la 0x1FF)

Está almacenado en un formato WAD modificado, incluyendo un ticket encriptado con la common key y firmado.

BootMii es un sustituto del boot2 original creado por el Team Twiizers. Sólo puede sustituir al boot2 original en aquellas consolas que tengan la versión de boot1 vulnerable (boot1a o boot1b).