En cada mini hay dos archivos llamados ISO.BIN.EDAT y MINIS.EDAT.
También hay otra, el juego, llamado EBOOT.PBP.
Descifrar ISO.BIN.EDAT generará un archivo que contiene la siguiente estructura:Código: Seleccionar todo
1 block = 1024 bytes (0x400)
1 cluster = 16 blocks = 1024*16 bytes =16384 bytes (0x4000)
discs_start ----------> 0x000400 (disc1), 0x100400 (disc2), 0x200400 (disc3), 0x300400 (disc4), etc...
discs_keys -----------> 0x000C00 (disc1), 0x100C00 (disc2), 0x200C00 (disc3), 0x300C00 (disc4), etc...
discs_map_tables ----> 0x004400 (disc1), 0x104400 (disc2), 0x204400 (disc3), 0x304400 (disc4), etc...
Descifrar MINIS.EDAT generará un archivo que contiene prácticamente lo mismo, a excepción de que es mucho más pequeño al únicamente contener una pequeña cabecera y la key de la versión cifrada (añadiré más información sobre esto a la wiki así que no os preocupéis)
Ahora hay un programa, con el código fuente incluido basado en libkirk que hace todo el trabajo duro por nosotros y descifra el EBOOT.PBP. Simplemente renombra el EBOOT.PBP a NP.PBP y descifrará el contenido del eboot para tí.
Este programa también generará la cabecera (en big endian) y la key de la versión (existente por pbp)
Preocupémonos primero del MINIS.BIN: Tiene unos 16 bytes aleatorios de información. Si la desciframos con ésta llave específica usando aes-cbcCódigo: Seleccionar todo
62 5E 77 79 46 62 6A 37 33 6E 3A 5D 4A 6B 71 4B
obtendremos la key de la versión. Con eso nos encargamos del MINIS.BIN y así podremos crear el nuestro propio si queremos con otro eboot.
Vámonos al ISO.BIN
La cabecera aquí es la misma que en la cabecera generada del descifrador, a excepción de un bit intercambiado en algunos sitios (de nuevo, little endian en ISO.BIN y big endian en np_header.bin)
Después de ocuparnos de la cabecera, podemos ir a la tabla (muchas jod*das horas en esta chicos)
Esta está dividida en 4 partes (cmac de bloque usando otra llave, offset de bloque relativo a np_header y tamaño en bytes de información cifrada y comprimida)
Buscando el offset del bloque (tp[4] en código) y el tamaño del bloque (tp[5]) en el código fue fácil, tanto como los bytes de relleno (tp[6] y tp[7]). La parte dura fue el cmac, del que me estoy encargando ahora (el link para la herramienta modificada lo tenéis aquí: http://dl.dropbox.com/u/35197530/npdpc.zip ,tened cuidado que sólo el primer bloque de cmac se genera)
También notaréis que en ese código hay una llave en npeg.c, que es la llave minis1.
Ahora tenemos cmacs en condiciones. Muy bien.
Lo que ahora mismo falta es encontrar una iso y convertirla en eboot, y usar la información del eboot y ponerla en ISO.BIN y MINIS.BIN para reempaquetar los edats (usando la herramienta de KDSBest), crear un pkg y probarlo.
Para empaquetar isos en eboots lo más cercano que tenemos es fake_np (también en libkirk)
para todos aquellos de vosotros que queráis probar éstas herramientas kirk, comprobad el link debajo de la tabla de información de minis.
Y eso es todo.
PD: La herramienta EDAT está basada en el código de Juan.
Suponemos que es cuestión de tiempo que salgan herramientas para facilitar el proceso a los usuarios con menos experiencia.
Fuente