Info técnica: Protocolo de los challenge codes

Aquí estan mis descubrimientos sobre el mecanismo de respuesta de los challenge codes en XBOX 360:

Para utilizar completamente esta información, necesitas ser capaz de dumpear el sector de seguridad (SS) y los bytes de CPR_MAI (CB) para PSN fd021e. También tendrías que encontrar una manera de grabar los cambios que le hagas al CR si son útiles. Estas herramientas estan más allá del alcance de este post.

Como ya sabrás, los primeros 0x661 bytes del SS se envían a la consola mediante el comando ReadDVDStructure. Después son desencriptados y la consola envía una seria de Challenges y respuestas. Los Challenge se envían al lector (en forma de Challenge IDs (CID) así como los 4 bytes de challenge data (CD)) y la respuesta del lector se compara con la tabla de desencriptación. Si estos chequeos se superan, el juego arranca.

¿Así que como crea el lector los datos de respuesta? TheSpecialist fue el primero en postear la tabla de respuesta del lector. Los restantes 0x19f bytes del SS están divididos en un mensaje codificado (0xcf bytes) y una tabla de consulta (0xd0 bytes). La tabla de respuesta se puede encontrar mediante los xoring bytes del mensaje con el CB y luego mirando el resultado en la tabla. Encontrarás el algoritmo exacto en algún lugar de este foro.

Vamos a echarle una ojeada a la tabla de respuestas del PGR3 PAL:

03 23 00 03 46 D0 03 56 CF 0346D0 0356CF FFF
01 16 00 20 F8 F0 21 08 EF 20F8F0 2108EF FFF
03 24 00 DF 07 10 DF 17 0F DF0710 DF170F FFF
01 79 00 FC B9 30 FC C9 2F FCB930 FCC92F FFF
07 17 00 03 46 D0 03 54 4F 0346D0 03544F D7F
05 F5 00 20 F8 F0 21 06 6F 20F8F0 21066F D7F
07 4A 00 DF 07 10 DF 14 8F DF0710 DF148F D7F
05 5D 00 FC B9 30 FC C6 AF FCB930 FCC6AF D7F
00 90 00 3C 2E 19 3E 15 BE
E0 F6 00 02 90 BE E4 74 3F


Byte 0: Tipo de respuesta
Byte 1: CID
Byte 2: Actualmente siempre a 0, puede ser 0-3 para modificar la respuesta
Byte 3-8: Los datos que el lector necesita para crear la respuesta

Aparecen algunas entradas de relleno (respuestas tipo 0xF0-0xFE) que he quitado.

RESPUESTAS TIPO 0:

Igual que en XBOX1, siempre descartamos el primer y cuarto byte de la tabla de respuesta. Aparece solo 1 respuesta de tipo 0.

CID CD Respuesta 90 2709C26C 2E1915BE

El CD coincide con el CB!! y, por cierto, es de tontos, porque si observas la modificación del CR hace muy facil adivinar el CB

RESPUESTAS DE TIPO 1:

Son diferentes a las de la primera XBOX, en la que se requeriría datos para leer de un sector diferente al de la SS. Date cuenta de que los datos de respuesta para los tipos 1 y 3 es un rango de PSNs(?). They happen to 0xFFF sectors long and that is 8MB (un hombre muy sabio me dijo que es el tamaño del holder de datos en la patente de MS). Este rango de sectores contiene sectores buenos y malos. Los datos que estamos buscando está localizada en un sector bueno en el rango de salida del PSN + 0x1E0 o, en el caso del CID 0x16 20F8F0 + 1E0 = 20FAD0. Encontrarás el CD seguido de la respuesta en los primeros 8 bytes del sector.

Hay además, una respuesta de tipo 2 que no he visto en su habitat natural. La encontré usando el mismo manipulador en el TS pero no en el LG. Puede que alguien la cagara y el tipo 2 esté inutilizado por la diferencia entre los dos lectores.

RESPUESTAS DE TIPO 3:

Muy similares a las de tipo 1, pero encontrar´s el CD y la respuesta en el rango del PSN desde el comienzo + 600, 620, 640, 660, 680, 6A0, 6C0, 6E0 y parece que una selección de offsets se envian desde el rango, pero no he analizado completamente el codigo. Las pruebas sugieren que pase lo que pase, su comportamiento no cambia con ningún juego en particular, la respuesta es siempre la misma.

Type 5 & 7 Responses
These are more interesting and appear to measure th time taken to read/seek across a range of PSNs. Since the PSN range contains bad sectors that we cannot burn my guess is that these challenges will return very different numbers for DVDR compared with pressed disks. The general form of the the response data is

AABBCCDD where

AA is the LSB of a 16 bit timer
BB is the MSB of a 16 bit timer
CC is the second byte from PSN start + D7F
DD is the first byte from PSN start + D7F
Respuestas tipo 5 y 7:

Estas son más interesantes y parecen medir el tiempo tomado para leer/buscar a través del rango de PSNs.
Ya que el rango PSN contiene sectores falsos que no podemos grabar mi suposicion es que estos challenges devolveran números muy diferentes dependiendo de si el DVD es impreso o grabable. La forma general de esta respuesta es:

AABBCCDD donde:

AA es el LSB de un 16 bit timer (NOTA: "timer")
BB es el MSB de un 16 bit timer
CC es el segundo byte desde PSN start + D7F (NOTA: start no se si traducirlo o no)
DD es el primer byte dese PSN start + D7F

Nota: el actual valor del reloj es diferente para diferentes cadenas/rangos del sector pero el valor actual parece constante a traves de multiples arranques de la consola. El valor parece cambiar muy poco a poco pero la 360 aceptara valores +/-2 "FROM THE MEAN". Espero que la cadena/rango sea mayor porque las variaciones del fabricante del lector, variaciones en la manufacturacion, temperatura, uso y tasas de cambio de dolar. No he probado los actuales limites porque soy un vago y no me importa demasiado.

TS nos ha provisto amablemente de una funcion debug ATAPI que toma dos PSNs como parametros y parecen tomar la misma medida de tiempo, devolviendo los datos de respuesta requeridos.

RESPUESTAS TIPO E0:

Esta parece ser alguna forma de comprobación del CID. El CD es el CID de los últimos 4 cambios del CR en orden contrario. El lector tambien guarda los CID y los devuelve (tambien en orden contrario). Si coinciden...

Aquí un tipico set de CIDs y CD observados durante el cambio de CR para ilustar este punto:

CID CD Respuesta Tipo de Res.
17 16CD4E94 7
24 ACA2D11E 3
16 CBD9E4E1 1
F5 FA0560D1 5
90 2709C26C 0
F6 90F51624 90F51624 E0

Atención a la secuencia 90,F5,16,24


Aquí esta todo lo que hay que saber sobre el mecanismo de CR en la 360 hasta la fecha. Por supuesto puede cambiar pronto. En los discos que he examinado he encontrado las siguientes cantidades de cada tipo de respuesta:

Total Tipo de respuesta
1 0
2 1
0 2 Nunca he visto uno. Debe no funcionar.
2 3
2 5
2 7
1 E0

Hay 6 CR que cambian durante la autentificacion de un total de 9. Parece que es suficientemente simple observar los cambios del CR y responder con los datos observados cuando se pide el challenge.

He sido deliberadamenre vago con las respuestas de los types 5 y 7. Tampoco he proporcionado el set completo del CR DATA. Sospecho que esta protegido por copyright y no puedo postearlo. Además es tan facil de obtener que os dejo la diversión a vosotros.

Estoy profundamente en deuda con el equipo y he estado trabajando con los que son sin dudas los mas talentosos (y anonimos)ingenieros. En particular me gustaria agradecer a TheSpecialist y a "Bob" (ya sabes quien eres) y a todos los que han ayudado.

Traducido por: valebay & scener
Solo alguien que sepa programacion podria sacar algo en claro
Alguno habrá...espero
Una de dos os es demasiado tecnico para q pueda entenderlo (q fijo q si) o ademas de eso hace falta algo mas de info pa entender todo lo ahi plasmado, ya lo abia leido en ingles y no me enteraba de muxo de exo me enteraba de muxo mas leyendo la pagina q me habias pasao por msn (en la q estaban algunos de los programas q colgaste en el hilo nuevo) y eso q tampoco era sencillita de contenidos
3 respuestas