Dream Fantasy se suma a las nuevas tecnologías y crea su propio blog. Intentaremos mantener a todos los lectores al tanto de las noticias y cotilleos del mundo de los videojuegos y de un poco mas allá. Si quieres participar en este blog aportando contenidos mandanos tus noticias o enlaces a dfmagazine@dfmagazine.com con el asunto BLog Noticias.

miércoles, enero 10, 2007

Ya se pueden hacer ISOs de los discos de la Wii

Para comprender como esta conformado un Disco Optico de Gamecube o WII primero es necesario conocer como esta compuesto un DVD-ROM convencional.


La informacion completa se encuentra detalla en este documento: http://www.ecma-international.org/publications/standards/Ecma-267.htm


Paso a continuacion a describir -en forma breve- como esta compuesto un DVD-ROM (solo a nivel logico):


User Data Frame:

Consiste en 2048 bytes de informacion a los cuales el usuario puede acceder desde su unidad lectora.


Data Frame:
Consiste en 2064 bytes de informacion que contiene entre otros, un identificador, el “User Data Frame”, y informacion de deteccion de errores.


la estructura de un “Data Frame” es la siguiente:



   4bytes   2bytes      6bytes                 2048bytes             4bytes

 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 

|     ID    | IED |     CPR_MAI     |        User Data Frame      |    EDC    |

 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 



ID: contiene el PSN (Physical Sector Number), ademas de informacion propia del sector, tal como el layer en que se encuentra, reflectividad, zona, etc.


CPR_MAI: su uso lo define la aplicacion, por ej. son usados para guardar un “sector key” en videos con CSS, y usados para guardar un “scrambling key” en los “Security Sector” de los discos de XBOX y XBOX360.


User Data: es la informacion accesible por el usuario.



EDC (Error Detection Code): es el checksum de todos los datos anteriores, el polinomio usado para calcularlo es x^32 + x^31 + x^4 + 1.


Scrambled Frame:

El “Data Frame” es XOReado con un stream cipher producido por un LFSR (Linear Feedback Shift Register) de 15bits con taps en el bit 10 y 14.

Las seeds son sacadas de una tabla definida en el standard ECMA-267, el indice de la tabla es determinado por los 4 MSB del ultimo byte del campo ID del “Data Frame”.

El mismo stream cipher es usado por 16 “Data Frames” consecutivos.



ECC Block:

En este bloque se calcula el “Parity Outer” y el “Parity Inner” de los “Scrambled Frames” (PIPO), que son usados para la correccion de errores.


Recording Frame:

Aqui la informacion es agrupada (en grupos de 16 frames) y ademas esta intercalada, por estar la informacion intercalada el ODD esta obligado a leer en grupo de 16 frames.



Acerca de Discos Opticos Gamecube/WII:


Estos discos varian de un DVD-ROM convencional en la capa “Scrambling Frame”, aqui esta la diferencia entre un GOD/WOD y un DVD-ROM:




DVD-ROM:


   4bytes   2bytes      6bytes                 2048bytes             4bytes

 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 


|     ID    | IED |     CPR_MAI     |             User Data Frame             |    EDC    |

 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 


          ^                         |         2048bytes cipher stream         |

          ^                          -  -  -  -  -  -  -  -  -  -  -  -  -  - 


       scrambling

       seed index   


About Gamecube/WII Optical Disc:


   4bytes   2bytes                  2048bytes                     6bytes         4bytes

 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 


|     ID    | IED |             User Data Frame             |     unknown     |    EDC    |

 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 


                                    |         2048bytes cipher stream         |

                                     -  -  -  -  -  -  -  -  -  -  -  -  -  -  



La forma de obtener las seeds usadas por los GOD/WOD no es del todo conocida, pero los primeros 16 frames de todos los GOD y WOD -que me ha tocado ver hasta hora- usan la seed 0101h, luego de eso la seed cambia para cada grupo de 16 frames y cicla como en un DVD-ROM comun.


Debido a que el sistema de como se obtienen las seeds es desconocido -por lo menos para mi-, la mejor manera que se me ocurrio para hacer el “unscrambling” fue haciendo fuerza bruta sobre las seeds, debido a que son solo 15bits (y generalmente 17 seeds distintas por GOD/WOD) este proceso tarda solamente unos 30 segundos, lo que es mas que aceptable.


La fuerza bruta realizada es muy sencilla, se inicializa el LFSR con un valor desde el 0 al 7FFFh, se obtiene el stream cipher, se XORea con la parte señalada en el diagrama anterior y se checkea el EDC, de ser el EDC el correcto significa que hemos dado con la seed para ese frame.


A continuacion dejo disponible para descarga el programa utilizado para hacer “unscrambling” a cualquier GOD/WOD. Para poder utilizarlo necesitas acceso a una imagen en formato bruto (con 2064 bytes por frame), ya sea sin haber pasado esta por ningun proceso de “unscrambling”, o tambien sirve si paso por el “unscrambling” de un DVD-ROM convencional.



su uso es muy sencillo: “unscrambler imagen_en_bruto imagen_iso”, por ej:


unscrambler.exe RZDE01.WOD “Twilight Princess.ISO”

GOD/WOD unscrambler 0.4 (xt5@ingenieria-inversa.cl)


This program is distributed under GPL license,

see the LICENSE file for more info.


caching seed 0100

caching seed 401c


caching seed 02c0

caching seed 6006

caching seed 03e0

caching seed 3012

caching seed 04f0

caching seed 182b

caching seed 0879

caching seed 0c51

caching seed 103e


caching seed 06a0

caching seed 201a

caching seed 0240

caching seed 4007

caching seed 0300

caching seed 0700

image successfully unscrambled.

time elapsed: 481.00 seconds.


doy las gracias a patx, tmbinc y loser.


Vía | Ingenieria inversa

Etiquetas: , ,