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

[0] Índice de Mensajes

Ir a la versión completa