Programación Específica > Programación de Aplicaciones para Dispositivos
Investigación sobre el EBOOT.PBP de la PSP
(1/1)
m0skit0:
Hola de nuevo a tod@s los usuarios del foro.
La PSP es una consola de portátil de Sony y que utiliza unos extraños ficheros llamados EBOOT.PBP como ejecutables. Esto me extrañó mucho y comencé a investigar por mi cuenta sobre el formato y el contenido de este fichero y recopilando información de Internet. Si alguien le interesa el tema, estaría encantado de recibir una mano. Aquí les dejo los resultados temporales de mis avances. Espero que os animéis alguno :)
--- Código: Text ----- EBOOT.PBP -- [Ojo, la PSP es big-endian] - Sólo vamos a discutir los formatos propios de la PSP: PSF, PSP y PSAR.- WORD 16 bits, DWORD 32 bits. /***********//*** PBP ***//***********/ - Una cabecera seguida de ficheros embebidos (pueden no aparecer todos) UBYTE cabecera[0x28];PARAM.PSF //Parámetros de la aplicación (menú del SO)ICON0.PNG //Icono de la aplicación (menú del SO)ICON1.PMF //Icono animado de la aplicación (menú del SO)BACKGROUND.PNG //Fondo de la aplicación (menú del SO)PIC1.PNG //Imagen de la aplicación (menú del SO)SND0.AT3 //Sonido de la aplicación (menú del SO)DATA.PSP //La aplicación en síDATA.PSAR //Datos de la aplicación - Cabecera: 0x00 DWORD firma; //Siempre 0x00504250 (".PBP")0x04 DWORD version; //Versión del PBP0x08 DWORD offset[8]; //Corresponden al desplazamiento dentro del PBP de los 8 ficheros indicados en la estructura del PBP - Los PBP con version = 0x00010001 tienen una protección añadida que no deja modificar el PBP. Si se modifica algún byte, no arranca: si es el PNG porque "la información de copyright ha sido modificada". Si es el PSF, entonces arranca pero finalmente vuelve a salir "no se puede ejecutar". - Encontrados PBP con el offset de UNKNOWN.PSAR apuntando al final de los datos del PBP. No existe PSAR. /***********//*** PSF ***//***********/ - Alineamiento a DWORD 0x00 DWORD firma; //Siempre 0x00505346 (".PSF")0x04 DWORD version; //Siempre 0x0101 00000x08 DWORD offset_tabla_claves; //Relativo al comienzo del PSF0x0C DWORD offset_tabla_valores; //Relativo al comienzo del PSF0x10 DWORD num_claves; //Número de elementos de la tabla_indice0x14 UBYTE tabla_indice[]; //Elementos de 16 bytes, cada uno con el siguiente formato: // WORD offset_tabla_claves Desplazamiento de la clave en "tabla_claves" // UBYTE alineamiento_dato Alineamiento de los datos en "tabla_valores", siempre 0x04, alineamiento a nivel de byte // UBYTE tipo_datos Tipo de datos (0 - binario, 2 - cadena de caracteres UTF-8 acabada en NULL, 4 - número de 32 bits con signo) // DWORD tamanio_datos Tamaño de los datos (bytes) en "tabla_valores" // DWORD tamanio_total Tamaño de datos y relleno (bytes) en "tabla_valores" // DWORD offset_valor Offset del valor en "tabla_valores" 0xXX UBYTE tabla_claves[]; //Claves: serie de cadenas de caracteres ASCII sin espacios acabadas en NULL (0x00). Alineamiento a DWORD, por tanto puede haber relleno con ceros0xXX UBYTE tabla_valores[]; //Valores de los parámetros indicados por "tabla_indice" y "tabla_claves" - Claves que se conocen: Clave Tipo Descripción----- ---- -------------------------------------------------------------BOOTABLE INT Si está a 1 parece indicar que aplicación se puede arrancar nada más encenderse la PSP (saltando el menú)CATEGORY TXT Categoría del PSFDISC_ID TXT ID del discoDISC_NUMBER INT Número de disco si hay varios discos (cuenta desde 1)DISC_TOTAL INT Número total de discosDISC_VERSION TXT Versión del discoDRIVER_PATH TXT ?LANGUAGE TXT LenguajePARENTAL_LEVEL INT Mínimo nivel parental requerido para ejecutarPSP_SYSTEM_VER TXT Versión mínima de FW para ejecutarREGION INT Máscara con las regiones autorizadas a ejecutarSAVEDATA_DETAIL TXT Texto que aparece debajo de los datos de la partida salvadaSAVEDATA_DIRECTORY TXT Nombre del directorio donde se halla la partida salvadaSAVEDATA_FILE_LIST BIN Lista de fichero de partida salvada. Formato desconocido.SAVEDATA_PARAMS BIN Parámetros de partida salvada. Formato desconocido.SAVEDATA_TITLE TXT Título de la partida salvada.TITLE TXT Título de la aplicación.TITLE_0 TXT Título de la aplicación en JaponésTITLE_2 TXT Título de la aplicación en FrancésTITLE_3 TXT Título de la aplicación en EspañolTITLE_4 TXT Título de la aplicación en AlemánTITLE_5 TXT Título de la aplicación en ItalianoTITLE_6 TXT Título de la aplicación en HolandésTITLE_7 TXT Título de la aplicación en PortuguésTITLE_8 TXT Título de la aplicación en RusoTITLE_9 TXT Título de la aplicación en ???TITLE_10 TXT Título de la aplicación en ???TITLE_11 TXT Título de la aplicación en ???UPDATER_VER TXT Utilizado por los actualizadores de FW para indicar a qué versión se actualiza. - La clave CATEGORY describe el tipo de datos que contiene el PSP. Las opciones que se conocen son: "MS" -> MemoryStick SaveGame (sólo en este caso, la entrada en la tabla índice indica un tamaño de 2 bytes en vez de 3) "MG" -> MemoryStick Game "UG" -> UMD Game "WG" -> WLAN Game "UV" -> UMD Video "UA" -> UMD Audio "UC" -> UMD Cleaning Disc "EG"?? /***********//*** PSP ***//***********/ - Cabecera: 0x00 DWORD firma; //Siempre 0x7E505350 ("~PSP")0x04 WORD atributos1; //1 -> SCE_MODULE_ATTR_CANT_STOP //2 -> SCE_MODULE_ATTR_LOAD //4 -> SCE_MODULE_ATTR_START //8 -> ???0x06 WORD atributos2; //1 -> FLAG_COMPRESS //2 -> FLAG_NORELOC0x08 UBYTE version_modulo_bajo;0x09 UBYTE version_modulo_alto;0x0A UBYTE nombre[0x1C];0x26 UBYTE version_formato; //Siempre 10x27 UBYTE num_segmentos; 0x28 DWORD tamanio_elf; //Tamaño del PRX (.PSP sin cabecera)0x2C DWORD tamanio_psp; //Tamaño del DATA.PSP0x30 DWORD entrada; //Entrada al ejecutable0x34 DWORD offset_modinfo; //Los 8 bits más altos se restan a los 24 bajos0x38 DWORD tamanio_bss;0x3C WORD alineamiento[4];0x44 DWORD direccion[4];0x54 DWORD tamanio[4];0x64 DWORD desconocido[6];0x7C UBYTE tipo;0x7D UBYTE desconocido[0x33];0xB0 DWORD tamanio_elf_comp; //Tamaño del PRX comprimido0xB4 DWORD desconocido; //Siempre 0x8000 00000xB8 UBYTE desconocido[0x18]; //Siempre 00xD0 DWORD id;0xD4 UBYTE desconocido[0x7c]; - Datos: muy probablemente el ejecutable comprimido y cifrado. /************//*** PSAR ***//************/ - Tiene el siguiente formato: - Cabecera - Sección A (Cabecera, Datos) - Sección A (Cabecera, Datos) - Sección B (Cabecera, Datos) ... y así alternando A y B - Sección A (Cabecera, Datos) - Sección B (Cabecera, Datos) - Cabecera: 0x00 DWORD firma; //Siempre 0x50534152("PSAR")0x04 DWORD separador; //Siempre 0x010000000x08 DWORD tamanio; //Tamaño de los datos (sin contar la cabecera)0x0C DWORD separador //Siempre 0x01000000 - Cabecera de sección: 0x00 UBYTE desconocido[0xb0];0xB0 DWORD tamanio_datos; //Tamaño de los datos de la sección0xB4 UBYTE desconocido[4]; //¿Siempre 0x80?0xB8 UBYTE desconocido[0x18]; //¿Siempre 0x00?0xD0 UBYTE desconocido[4]; //¿Siempre 0x06?0xD4 UBYTE desconocido[0xC];0xE0 UBYTE desconocido[0x70]; - Datos de sección - El tipo A siempre tiene 0x110 bytes. - El tipo B es variable en tamaño. - Es probable que se trate de la aplicación a ser instalada por el ejecutable DATA.PSP
Navegación
Ir a la versión completa