Anti-brickeos de Wii: Desarrollo

La pequeña estrella de Nintendo: IOS, dispositivos, parches, IPC, y todos los demás misterios del Starlet y el sistema de seguridad.

Anti-brickeos de Wii: Desarrollo

Notapor marcan » Sábado, 5 de Julio de 2008 15:19

Este foro está mas solo que la una, así que voy a inaugurarlo explicando en lo que estamos trabajando actualmente.

Un gran problema con el desarrollo para Wiis (sobre todo el que modifica cualquier parte del sistema) es que la estabilidad de la Wii recae única y exclusivamente en el testeo en la fábrica. Hay mil y una formas de terminar con una Wii brickeada por cualquier motivo, y Nintendo evita eso simplemente probando bien todo el software oficial. Por lo tanto, un primer paso importante sería el desarrollo de algún software que nos permita restaurar la Wii después de un brickeo.

El proceso de arranque de la Wii es más o menos así:

  • Boot0 es un bootstrap que está en una memoria ROM dentro del Hollywood, y es el encargado de cargar boot1. Sólo puede cargar desde NAND Flash (no hay ninguna opción alternativa como en la PSP, que tiene el arranque desde Memory Stick con la batería de pandora). Para que boot0 se ejecute correctamente, hace falta que boot1 esté presente e incorrupto en la NAND. Si no lo está, tenemos un brick que solo se puede recuperar flasheando la NAND por hardware.
  • Boot1 es el encargado de cargar boot2 desde una zona reservada de la NAND y verificarlo. Boot1 existe principalmente por dos motivos: porque es bastante grande y se ahorra dinero poniéndolo en NAND, y porque de esta forma se puede actualizar. Sin embargo, una vez que la Wii se fabrica, boot1 queda fijo ya que se comprueba contra un hash guardado en una memoria que se escribe permanéntemente en la fábrica, y que boot0 utiliza para verificar que boot1 está intacto. Esto le da a Nintendo ha posibilidad de cambiar boot1 sin modificar ningún chip (que es carísimo), símplemente actualizando el software a la hora de programarlo en la fábrica, pero una vez que la Wii sale, boot1 no se puede tocar. Los devkits tienen el hash de boot1 sin programar, con lo que boot0 no lo verifica: los devkits sí que pueden usar un boot1 cualquiera y sin firma alguna. Además, boot1 es el primer software en la Wii que realiza una comprobación de firma digital RSA, y tiene el mismo bug de trucha que todos los demás. Conclusión interesante: toda Wii fabricada hasta el momento puede usar un boot2 trucheado, y Nintendo no puede arreglar este problema - flasheando la NAND por hardware siempre será posible modificar boot2 en las Wiis actuales. Para que boot1 se ejecute correctamente, debe existir un boot2 que no esté corrupto (hay dos copias por si acaso) y que pase los chequeos de la firma (aunque se puede truchear). De lo contrario, la consola no arrancará y será necesario acceder a la NAND por hardware.
  • Boot2 es un mini-IOS. Realmente, su función es tener los suficientes drivers (NAND, FS, ES) como para encontrar un IOS que se encuentra en un archivo de la NAND, cargarlo, y ejecutarlo. También tiene el bug de las firmas, y aunque es actualizable, Nintendo todavía no lo ha hecho. Como no se instala como un título normal (aunque sí se parece mucho a uno), no se instala con las rutinas normales de instalación. Por lo que he visto del código de actualización por internet, creo que Nintendo no puede actualizar boot2 por internet, al menos no directamente (podrían meter una actualización que a su vez actualice boot2). Sin embargo, sí que se puede actualizar con juegos que lo traigan en la partición de update. Boot2 es el primer código ejecutable en Starlet que podemos modificar a nuestro antojo, gracias al fallo de boot1. Se conjetura que boot2 originalmente iba a ser el único IOS, y que lo de tener varias versiones de IOS se pensó más tarde como medida de compatibilidad de juegos. Para que boot2 arranque, hace falta un sistema de archivos válido en la NAND, encriptado con la clave específica de cada Wii, y que contenga los archivos correspondientes al menú del sistema y su IOS, además de algunos archivos del sistema. Si esto falla, con el boot2 de Nintendo, tendremos un brick que de nuevo necesitará de acceso por hardware.
  • IOS es el sistema operativo completo de Starlet que realiza las funciones de los drivers de casi todos los dispositivos de la Wii que no existian en la Gamecube. También es el encargado de arrancar el Broadway y pasarle su primer código. IOS es capaz de ejecutar cualquier título/canal de NAND (según diga un flag situado en un archivo en la NAND), pero la primera ejecución de IOS al arrancar, con el flag que deja boot2, hace que se ejecute el menú del sistema. IOS puede fallar por los mismos motivos que boot2, además de por un fallo en algún dispositivo que se intente ejecutar, etc. Igualmente, si tenemos problemas en la NAND y IOS falla, con los IOS de Nintendo, tendremos que echar mano de un programador de NAND.
  • El menú del sistema ya lo conocéis de sobra. Hay varias cosas que pueden causar cuelgues, como por ejemplo banners mal formados. Si el fallo se produce después o justo al cerrarse la pantalla de aviso, se puede corregir utilizando un lector con modchip y un disco autoarrancable. Si el fallo se produce antes, de nuevo, tenemos un brick.
La clave aquí es que, a partir de boot2, podemos modificar lo que queramos. Convenientemente, boot2 es la primera parte que depende de que una parte importante de la NAND y modificable esté intacta (el sistema de archivos), y a la vez, boot2 normalmente no se toca casi nunca con lo que es raro que tengamos un brick que ocurra antes de el. Por lo tanto, el sitio idóneo para insertar algún tipo de sistema de recuperación es justo antes de que arranque boot2. Y eso es precísamente lo que vamos a hacer.

Un sistema de recuperación debería ser capaz de, por lo menos, hacer un backup de la NAND, restaurarlo, y ejecutar código para futuras ampliaciones. El lugar evidente para los backups es la tarjeta SD. Por lo tanto, nos encontramos con el primer problema: ya que estamos antes de boot2, donde no hay ningún driver, hay que hacer un driver para la SD (y para la NAND, pero eso es algo más fácil).

Es casi imposible desarrollar nada sin tener indicaciones de como progresa el código. Starlet no tiene acceso al chipset gráfico, con lo que estamos ciegos. Curiosamente, parece que hay indicaciones de que pueda tener acceso al sistema de audio, pero eso no es que sea muy intuitivo de usar. Bueno, entonces ¿cómo vemos lo que estamos haciendo? Resulta que Nintendo nos ha dejado una ayudita. Hollywood tiene varios registros de GPIO (entradas/salidas de propósito general) para cosas como controlar los LEDs y los botones, etc. En uno de estos registros, hay 8 bits que van directamente conectados a unos puntos de prueba en la placa, y se pueden usar para lo que queramos. De hecho, boot0 los usa para indicar su progreso (en forma de códigos que indican el sector de la NAND que se está leyendo actualmente, y de parpadeos que indican un error). El pinout es el siguiente:
Código: Seleccionar todo
GP2 TP223-O O-TP220 GP7
GP3 TP224-O O-TP221 GP0

GP1 TP222-O O-TP226 GP5
GP4 TP225-O O-TP219 GP6

Yo he decidido conectarlo a algo un poco mas legible, y el resultado es este:
Imagen

No es más que un LCD HD44780 de los de toda la vida. Un poquito de código que se ejecuta en el Starlet es el encargado de enviarle los comandos correctos para mostrar texto.

Vale, tenemos una consolita cutre para hacer pruebas. Pero esto no le sirve a ningún usuario que quiera usar y controlar el sistema de recuperación en sí. ¿Qué hacemos? Pues, como buenos hackers, matar tres pájaros de un tiro: el sistema de recuperación será modificable (incluso con el resto de la Wii brickeada), tendrá acceso a los gráficos, y de paso usará tecnología que ya hemos reversado y que todos sabemos usar sin problemas. Vamos a escribir el menú de recuperación para el Broadway (PPC), igual que cualquier otro software de Wii. Nuestro código de Starlet lo cargará desde SD, y despertará al PPC para que empiece a ejecutarlo. Mientras se ejecuta, actuará como proxy para permitirle al PPC acceder al hardware de Starlet - como si fuera un IOS (muy simple), pero a más bajo nivel y sin ningún tipo de restricciones, permitiendo que el PPC tenga acceso total al sistema.

Para terminar, ¿cómo pinchamos esto en boot2? La idea es cojer nuestro código y empaquetarlo delante de boot2. Si no está pulsado RESET al arrancar, lanzaremos boot2 directamente. Si pulsamos RESET, se ejecutará nuestro código. Y como no podemos distribuir boot2 al ser código con copyright de Nintendo, el instalador de todo esto tendrá que extraer el boot2 de la consola, añadirle nuestro código como cabecera, volver a encriptarlo y prepararlo, y finalmente verificar todo e instalarlo.

Espero que esto despeje un poco las dudas sobre el proceso de arranque de la Wii y a donde queremos llegar de momento ;)
marcan
Capitán Administrador
 
Mensajes: 112
Registrado: Martes, 29 de Abril de 2008 15:32
Ubicación: Cantabria

Re: Anti-brickeos de Wii: Desarrollo

Notapor lazyapply » Sábado, 5 de Julio de 2008 15:39

La verdad esque es muy interesante saber como va el inicio de la wii. Eso ayuda a tener cuidado dependiendo de que podemos o no modificar. La verdad esque cuando consigais un recovery, las wiis van a explotar seguro. Todo el que tiene ideas y conocimiento, pero miedo de romper la wii o mejor dicho de tirar 250 € a la basura se pondra las pilas y saldran aplicaciones como churros XD.

Animo.

Un saludo, Lord Lazyapply

p.d. Si esta un poco muerto el foro, pero por lo menos no ta lleno de post basura ^^.
Imagen
lazyapply
 
Mensajes: 64
Registrado: Jueves, 15 de Mayo de 2008 03:08

Re: Anti-brickeos de Wii: Desarrollo

Notapor AntonioND » Domingo, 6 de Julio de 2008 11:08

Impresionante. Conocéis la Wii mejor incluso que la gran mayoría de sus diseñadores. :lol:
AntonioND
 
Mensajes: 24
Registrado: Sábado, 24 de Mayo de 2008 16:26

Re: Anti-brickeos de Wii: Desarrollo

Notapor noalone » Domingo, 6 de Julio de 2008 23:09

Felicidades por vuestro nivel de comprension de la wii, asi como lo estais desarrollando, es decir antes de probar o publicar métodos teneis la solucion.
Así da gusto
noalone
 
Mensajes: 5
Registrado: Sábado, 17 de Mayo de 2008 10:33

Re: Anti-brickeos de Wii: Desarrollo

Notapor marcan » Lunes, 7 de Julio de 2008 01:57

Acabo de conseguir la salida de texto por USBGecko desde Starlet. Esto nos va a simplificar mucho las cosas al debugear :D

All Your EXI Are Belong To Starlet.
marcan
Capitán Administrador
 
Mensajes: 112
Registrado: Martes, 29 de Abril de 2008 15:32
Ubicación: Cantabria

Re: Anti-brickeos de Wii: Desarrollo

Notapor pakitovic » Lunes, 7 de Julio de 2008 08:56

En serio Marcan como te lo curras :lol: , solamente al leer el post ya me quedé asombrado y ahora esto... sigue así que estas haciendo un estupendo trabajo. :mrgreen:

Saludos.
pakitovic
 
Mensajes: 11
Registrado: Viernes, 16 de Mayo de 2008 22:11
Ubicación: Almería

Re: Anti-brickeos de Wii: Desarrollo

Notapor bibaheu » Lunes, 7 de Julio de 2008 23:01

Bufff si hay acceso al EXI desde el Startet, se podrá hacer debug más fácilmente... :D
Me parece que los diseñadores de la Wii os tienen miedo... ;)
Jisko? shep :)
bibaheu
 
Mensajes: 18
Registrado: Viernes, 16 de Mayo de 2008 16:06
Ubicación: Gallaecia

Re: Anti-brickeos de Wii: Desarrollo

Notapor Helwem » Martes, 8 de Julio de 2008 21:04

Inpresionate para mi el mejor desarrollo que se hara en la escene de la wii, aunque yo de programacion no tengo ni idea pero como lo has explicado muy bien tengo una duda.

¿Si el boot-2 es actualizable (por internet no lo sabemos) pero por juego seguro que si supongo que sera un paso en el que nintendo algun dia de despues de ver esto. si el boot-2 lo tenemos modificado que puede pasar? podria causar daños irrecuperables? exisitira al posibilidad de dejar el boot-2 otra vez de fabrica? o lo que es mejor a mi me gustaria es se podria tener un archivo de la nand totalmente limpia, sin rastros de homebrew ni ios modificados o boot parcheados que cada uno ponga sus datos de su wii (los necesarios) para dejarla de fabrica? es una opcion que me gustaria mucho pero no se si es posible

un saludo y muchas gracias

p.d.- ojala pudiera ir a ver la conferencia :cry:
Helwem
 
Mensajes: 10
Registrado: Miércoles, 2 de Julio de 2008 11:12

Re: Anti-brickeos de Wii: Desarrollo

Notapor marcan » Martes, 8 de Julio de 2008 21:09

Helwem escribió:¿Si el boot-2 es actualizable (por internet no lo sabemos) pero por juego seguro que si supongo que sera un paso en el que nintendo algun dia de despues de ver esto. si el boot-2 lo tenemos modificado que puede pasar?

Pues que si la versión de nintendo es mas nueva, borraría el nuestro, y si no pues no. Nosotros vamos a poner una versión alta para que no lo machaquen con la proxima, pero podrian poner una aún mas alta si quisieran. Pero vamos, al final terminarías con el boot2 de Nintendo que no tiene por qué fallar. Claro que si dependemos de parches de IOS (en un futuro) para que nuestro sistema sea estable, entonces volver al boot2 de fábrica podría ser mortal. Pero a su vez, si parcheamos IOS, evidentemente lo primero será quitar el mecanismo de reemplazo de boot2, con lo cual volvemos a estar a salvo.[/quote]
Helwem escribió:exisitira al posibilidad de dejar el boot-2 otra vez de fabrica?

Claro.

Helwem escribió:o lo que es mejor a mi me gustaria es se podria tener un archivo de la nand totalmente limpia, sin rastros de homebrew ni ios modificados o boot parcheados que cada uno ponga sus datos de su wii (los necesarios) para dejarla de fabrica? es una opcion que me gustaria mucho pero no se si es posible

Lo mas evidente sería hacer un backup de la NAND antes de instalar ningun homebrew ni nada, directamente desde TP Hack. Si no tenemos esto, es factible que en un futuro podamos artificialmente generar una imagen de NAND totalmente limpia, como si viniera de fábrica mas los saves y tickets que tuviéramos, limpiando los registros de uso diario y tal y dejando todos los sectores que no se usen limpios, y teóricamente eliminando todo resto del homebrew (pero siempre se nos puede escapar algo...)
marcan
Capitán Administrador
 
Mensajes: 112
Registrado: Martes, 29 de Abril de 2008 15:32
Ubicación: Cantabria

Re: Anti-brickeos de Wii: Desarrollo

Notapor Helwem » Miércoles, 9 de Julio de 2008 07:17

Gracias por tus rapidas respuestas, como me gusta tanto pues le doy vueltas y me a salido otra duda:

¿Con esto se podria clonar o semi-clonar una Wii? Lo de clonar 100% supongo que no por temas de claves en el boot-0 o boot-1 que segun tu explicacion creo que no se pueden volver a programar, pero lo interesante supongo que seria semi-clonar, me explico:

Coger el dump de una wii 3.3e y coger el de otra wii 2.1e y portar los datos de la 3.3e al dump de la 2.1e ? no se la dificultad de esto porque a parte de las claves rsa supongo que habra otros datos unicos como la mac, no se si alguno mas... es viable esto o algo parecido? con algo parecido me refiero a que si es posible pero por narices se clona la mac o lo que sea

la utilidad esta clara para los que tengan la 3.3e y no tengan un dump de la nand de una version anterior y quieran recuperar el bug trucha o para bajar una 3.4 en un futuro

un saludo y muchas gracias
Helwem
 
Mensajes: 10
Registrado: Miércoles, 2 de Julio de 2008 11:12

Siguiente

Volver a Starlet, IOS y seguridad

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron