Hace algunos días posteé un
vídeo de algo que hemos estado llamando BootMii. Creo que ya es hora de contestar a algunas preguntas, como por ejemplo qué es
realmente, que hace, y cómo te servirá. Ah, y por cierto, antes de que te aburras y pases de leer el resto, por lo menos apunta que
BootMii es software. El hardware que se ve en el vídeo es solo para depurar.
Lo primero que tienes que entender es que BootMii no es una única aplicación o hack, sino que es una plataforma para hacks. Hasta ahora, hemos tenido poco control sobre el software que realmente se eecuta en nuestras Wiis. Claro que podemos ejecutar nuestros propios programas, pero al fin y al cabo lo hacemos como
usuarios del sistema - todo lo que hagamos tiene que pasar por el software de Nintendo. Podemos evitar actualizaciones e intentar comprender el sistema, pero seguimos dependiendo de el. Todo el homebrew que hay disponible para la Wii ahora mismo depende de IOS. Eso no es malo (contiene mucho código y drivers que no tendremos que reescribir), pero también significa que tenemos que seguir sus reglas.
Tenemos algunos hacks para saltarnos el sistema, por supuesto. PatchMii se desarrolló para eliminar algunas de las restricciones de IOS, pero no es muy práctico, y sólo funciona para un IOS en concreto. Starfall elimina algunas de las cosas molestas del menú del sistema, pero es un parche de bajo nivel muy cutre y feo (y desaparecerá si actualizas la consola). Y en cualquier momento Nintendo puede venir y actualizar el sistema para cerrar todos los agujeros. Claro, no esperamos que esto ocurra siendo realistas (tenemos o encontreremos otros agujeros), pero aun así no mola mucho.
BootMii - llamémoslo la
plataforma BootMii - trata de cambiar todo eso. En lugar de ser usuarios del sistema, destinados a hackear nuestro camino desde dentro, vamos a darle la vuelta a todo. Ahora
nosotros tendremos el control y el software de Nintendo tendrá que pasar por
nosotros para hacer algo.
Antes de entrar en detaller, me gustaría mencionar un detalle sutil pero importante sobre cómo hemos diseñado BootMii. Aunque tomaremos el control del sistema, queremos hacerlo aun así
minimizando los cambios que hay que realizar al sistema existente. Esto tiene muchas ventajas. Al mantener BootMii separado del resto del sistema (en su mayor parte), podemos encenderlo y apagarlo cuando queramos. Esto puede ser útil si, por ejemplo, Nintendo decide empezar a banear a los usuarios de homebrew de sus juegos online.
He dicho que BootMii es una plataforma. Todavía estamos trabajando en diseñar y escribir la mayoría, así que no esperes explicaciones detalladas sobre lo que falta. En su lugar, hoy voy a hablar sobre la parte de BootMii que hemos enseñado en el vídeo: BootMii-Core.
BootMii-Core es una pieza muy importante de BootMii, en cuanto a su ideología. Lo que hace es darnos el control
total de la consola tan pronto como es posible durante el proceso de arranque. Tan sólo una fracción de segundo después de pulsar el botón de power de la Wii, BootMii-Core ya se estará ejecutando y tendrás la posibilidad de hacer lo que quieras en ese momento. Esta no es la única ventaja. Al pinchar tan pronto en el proceso de arranque, BootMii-Core también es
el programa mas resistente a bricks que se puede escribir para la Wii. Tendrías que deliberadamente brickear tu Wii para cargartelo, con la excepción de ciertas actualizaciones de Nintendo (luego explicaré eso).
Revisemos otra vez la secuencia de arranque de la Wii. El primer código que se ejecuta es
boot0, que es parte de la máscara del chip Hollywood y por lo tanto intocable. boot0 carga
boot1 desde el principio de la NAND y lo verifica contra un hash que se guarda en memoria de sólo lectura. Esto hace que boot1 también sea intocable (brickearás la Wii si lo intentas). Aquí es donde se pone interesante: boot1 se supone que carga
boot2 desde una zona reservada de la memoria NAND. Boot2, que es como una especie de mini-IOS, inicia la carga del menú del sistema (y mientras hace eso termina cargando el IOS correspondiente a él). Sin embargo, la verificación de boot2 usa exactamente la misma infraestructura que se usa en el resto de la Wii, y también es vulnerable al bug de las firmas trucha. Como boot1 es incotable una vez que la Wii sale de la fábrica, todas las Wiis en existencia (que sepamos) son y siempre serán vulnerables a este bug, que nos permite instalar un boot2 modificado o casero.
Como puede que hayas adivinado, BootMii-Core es precisamente un boot2 con la firma trucheada. Sin embargo, no es una versión hackeada de boot2, ni tampoco es un reemplazo de boot2. Primero tienes que entender que boot2 en realidad no se almacena como un ejecutable monolítico. Esto se aplica a boot2 y a todos los IOSes anteriores a IOS30, y al contenido de arranque de IOS30 y los posteriores. Estos
binarios de IOS están en un formato simple que consta de tres partes: una pequeña cabecera, un pequeño cargador de ELFs, y el ELF de boot2. El ejecutable ELF contiene el código de IOS/boot2, y el cargador es un simple trozo de código que lo carga en memoria y lo ejecuta. BootMii-Core reemplaza la parte del cargador de boot2 - el ELF original sigue intacto.
Entrando en temas un poquito mas técnicos, resulta que el "cargador de ELFs" de BootMii-Core en sí consta de dos partes. Por limitaciones del hardware (temas de accesos a memoria raros y otras chorradas que tardamos una eternidad en averiguar), no podemos meter el código principal de BootMii-Core en lugar del cargador de ELFs. Tenemos que hacer que sea un archivo ejecutable independiente, y cargarlo en memoria usando su propio cargador de ELFs. Por lo tanto, BootMii-Core en realidad reemplaza el cargador de ELFs por un archivo compuesto que consta de nuestro propio cargador de ELFs (el "stub"), y el contenido de BootMii-Core en sí (el "loader" - luego vemos eso). Nuestro nuevo boot2 consta de tres partes: nuestro cargador de ELFs, el ELF de BootMii-Core, y el ELF de boot2 original. Los primeros ocupan la posición que anteriormente ocupaba el cargador de ELFs original.
El "stub" es con suerte un código muy simple que hace dos cosas: decidir si cargar BootMii-Core o el boot2 original, y luego cargarlo y ejecutarlo. Pero esta no va a ser la forma normal de volver a usar el boot2 original - se supone que esto sólo va a ser un sistema de recuperación para el peor de los casos por si algo falla de mala manera en BootMii-Core (que normalmente significaría que la hemos cagado). Para hacer que el "stub" cargue boot2 en lugar de BootMii-Core probablemente habrá que pulsar RESET repetidamente al arrancar o alguna burrada similar. Esperemos que no haga falta recurrir a eso.
La diversión comienza en la parte del "loader". Es un "loader" porque carga otro código - desde una tarjeta SD. Es muy sencillo: si el cargador es capaz de montar una tarjeta SD y de leer un cierto archivo (/system/iosboot.bin), lo ejecutará. Si no, pues carga boot2 como antes y la Wii arranca normalmente.
Ya está. Eso es BootMii-Core. Desde ahí, puedes hacer lo que quieras - puedes meter un archivo en una tarjeta SD y se ejecutará mas o menos un segundo después de encender la Wii, con el control total sobre Starlet, y por lo tanto con el control total sobre Broadway, Hollywood, y el resto del hardware de la Wii. Sin restricctiones. Mola, ¿no?
Ya he dicho que BootMii-Core también ayudará tremendamente a resistir a los bricks. La Nintendo DS tenía FlashMe, que reemplazaba la parte de arranque del código y también dejaba un stub de recuperación en una parte protegida contra escritura. Tenías que físicamente puentear un jumper en la DS para instalarlo y por lo tanto para cambiarlo o borrarlo. Por desgracia, no existe nada parecido en la Wii. Ya lo siento, pero no podemos hacer nada contra alguien que realmente quiera brickear vuestras Wiis (así que tened cuidado con lo que ejecutáis!). Sin embargo, BootMii-Core es inmune a casi cualquier daño que le puedas causar a la Flash sin querer. Para ejecutarse sólo depende de su propia integridad y de la de boot2. boot2 (y por lo tanto BootMii-Core) se guarda en una región separada de la NAND, que es independiente del sistema de archivos. Eso significa que podrías borrar o formatear la estructura de directorios completa de la Wii, y BootMii-Core seguiría funcionando. Esta es una de las ventajas de ser independiente del boot2 original - ese boot2 sí que depende del sistema de archivos ya que intenta montarlo y cargar cosas al arrancar. Sólo hay cuatro formas de cargarse el área donde residen BootMii-Core o boot1:
- Usar /dev/flash bajo IOS (no probado)
- Usar /dev/boot2 bajo IOS (no probado) (no se aplica a boot1)
- Usar ES_ImportBoot (y un boot2 correcto y truchafirmado que sea mas nuevo que la versión instalada) (no se aplica a boot1)
- Usar accesos directos al hardware desde fuera de IOS, usando código casero en Starlet (pregúntale a Bushing sobre esta - te contará lo divertido que es dejarse una llamada que borra la NAND en una versión vieja del código de BootMii)
Pero Nintendo todavía puede actualizar boot2 - y eso reemplazaría BootMii-Core por una versión normal de boot2. Intentaremos evitar esto (usando un número de versión mas grande para BootMii-Core), pero la solución final será parchear IOS para eliminar ES_ImportBoot y por lo tanto la habilidad de Nintendo de actualizar boot2. Pero eso es un tema para otro capítulo...
Así que, ¿qué puedes hacer bon BootMii-Core en realidad? Pues no hay límite - estás ejecutando código de Starlet en el arranque, así que, en serio, no hay límites. Sin embargo, un ejemplo simple es lo que se veía en el vídeo: usando un pequeño iosboot.bin que simplemente carga el boot2 original y lo parchea para cambiar el título de arranque, podemos ejecutar HBC al arrancar en lugar del menú del sistema. Esto ya de por sí ya te permite arreguar cualquier banner brick o opera brick, mientras tengas HBC y BootMii-Core instalados. Otro ejemplo mas complejo sería cargar una aplicación de backup/restauración de la NAND desde la SD, usando código casero en lugar de IOS y sin depender del sistema de archivos. Eso te permitiría reparar cualquier brick que no se haya cargado BootMii-Core. Y por supuesto, otras partes de la plataforma BootMii también usarán esta habilidad de cargar código al arrancar para hacer cosas mas divertidas. Hablaremos de eso cuando llegue el momento
Ah, y no te preocupes, ya lo sacaremos cuando esté listo. No hace falta darnos la chapa preguntando por la fecha