Playstation Update Package (PUP): Difference between revisions
m (moved PUP File Format to Playstation Update Package (PUP): Minor tidy up) |
mNo edit summary |
||
Line 1: | Line 1: | ||
'''PUP''' (Playstation Update Package) files are packages which contain the files used to update a PSP or PS3 system. | ==Description== | ||
'''PUP''' (Playstation Update Package) files are packages which contain the files used to update a PSP or PS3 system. There are 2 different types: patches (PS3PATCH.PUP) and full updates (PS3UPDAT.PUP). Based on the model, there are 4 different release types: Retail/CEX, Shop/SEX, Debug/DEX and Tool/DECR. Within the Retail/CEX there are 2 file versions: 1 is a PUP with a normal file length which also gets released online. The other PUP file version is the same, except it is zero-filled to a fixed filelength of 256MB, which gets released on Gamedisks (if gamecreators build their project to a premaster and give it to Sony for signing, they just use a placeholder of a 256MB PS3UPDATE.PUP which contains no firmwaredata at all - it is completely zerofilled. Sony decides the firmware that gets on the disk and for which firmware the 'Gold' code is signed and mastered). There is no regioning in the .PUP files, they are the same for all different regions. | |||
==Firmware .PUP structure== | |||
The HMAC key used to verify the packages has been released. Look around for "pup-hmac" | The HMAC key used to verify the packages has been released. Look around for "pup-hmac" | ||
= Header | ===Header=== | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 63: | Line 68: | ||
|} | |} | ||
== File Table | ===File Table=== | ||
The file table consists of a number of file entries determined by '''File Count''', with the format below: | The file table consists of a number of file entries determined by '''File Count''', with the format below: | ||
Line 95: | Line 100: | ||
|} | |} | ||
=== Filename IDs === | ===Filename IDs=== | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 133: | Line 138: | ||
|} | |} | ||
== Hash Table == | ===Hash Table=== | ||
The hash table contains a hash entry for every file inside the PUP. | The hash table contains a hash entry for every file inside the PUP. | ||
Line 160: | Line 165: | ||
|} | |} | ||
= Files = | |||
==Files in tree example== | |||
Here is an example of the files stored in a PUP, This is from firmware version 3.55 | Here is an example of the files stored in a PUP, This is from firmware version 3.55 | ||
Revision as of 06:18, 9 April 2011
Description
PUP (Playstation Update Package) files are packages which contain the files used to update a PSP or PS3 system. There are 2 different types: patches (PS3PATCH.PUP) and full updates (PS3UPDAT.PUP). Based on the model, there are 4 different release types: Retail/CEX, Shop/SEX, Debug/DEX and Tool/DECR. Within the Retail/CEX there are 2 file versions: 1 is a PUP with a normal file length which also gets released online. The other PUP file version is the same, except it is zero-filled to a fixed filelength of 256MB, which gets released on Gamedisks (if gamecreators build their project to a premaster and give it to Sony for signing, they just use a placeholder of a 256MB PS3UPDATE.PUP which contains no firmwaredata at all - it is completely zerofilled. Sony decides the firmware that gets on the disk and for which firmware the 'Gold' code is signed and mastered). There is no regioning in the .PUP files, they are the same for all different regions.
Firmware .PUP structure
The HMAC key used to verify the packages has been released. Look around for "pup-hmac"
Header
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x8 | unsigned long | Magic |
0x8 | 0x8 | unsigned long | Package Version |
0x10 | 0x8 | unsigned long | Image Version |
0x18 | 0x8 | unsigned long | File Count |
0x20 | 0x8 | unsigned long | Header Length |
0x28 | 0x8 | unsigned long | File Length |
0x30 | 0x20 * File Count | File Table | File Table |
0x30 + (0x20 * File Count) | 0x20 * File Count | Hash Table | Hash Table |
0x30 + (0x40 * File Count) | 0x14 | bytes | Header Hash |
0x44 + (0x40 * File Count) | 0xC | bytes | Unknown |
File Table
The file table consists of a number of file entries determined by File Count, with the format below:
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x8 | unsigned long | Entry ID |
0x8 | 0x8 | unsigned long | Data Offset |
0x10 | 0x8 | unsigned long | Data Length |
0x18 | 0x8 | unsigned long | Unknown |
Filename IDs
File Entry ID | Filename |
---|---|
0x100 | ps3version.txt |
0x101 | resource.txt |
0x102 | shop.txt |
0x103 | pup_data.txt |
0x104 | patch_build.txt |
0x200 | ps3swu.self |
0x201 | vsh.tar |
0x202 | dots.txt |
0x203 | patch_data.pkg |
0x300 | update_files.tar |
Hash Table
The hash table contains a hash entry for every file inside the PUP.
The hash entry format is:
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x8 | unsigned long | File Entry ID |
0x8 | 0x14 | bytes | HMAC-SHA1 hash |
0x1C | 0x4 | unsigned int | Unknown |
Files in tree example
Here is an example of the files stored in a PUP, This is from firmware version 3.55
PSUPDATE.PUP ├── dots.txt ├── license.txt ├── ps3swu.self ├── update_files.tar │ ├── BDIT_FIRMWARE_PACKAGE.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── BDPT_FIRMWARE_PACKAGE_301R.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── BDPT_FIRMWARE_PACKAGE_302R.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── BDPT_FIRMWARE_PACKAGE_303R.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── BDPT_FIRMWARE_PACKAGE_304R.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── BDPT_FIRMWARE_PACKAGE_306R.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── BDPT_FIRMWARE_PACKAGE_308R.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── BLUETOOTH_FIRMWARE.pkg │ │ ├── content │ │ │ ├── RC29_firmware_footer.dfu │ │ │ ├── usb8780-5.0.1-A1-A2.dfu │ │ │ └── usb8781-20.0.12.0.dfu │ │ ├── info0 │ │ └── info1 │ ├── CORE_OS_PACKAGE.pkg │ │ ├── aim_spu_module.self │ │ ├── appldr │ │ ├── creserved_0 │ │ ├── default.spp │ │ ├── emer_init.self │ │ ├── eurus_fw.bin │ │ ├── hdd_copy.self │ │ ├── isoldr │ │ ├── lv0 │ │ ├── lv1ldr │ │ ├── lv1.self │ │ ├── lv2_kernel.self │ │ ├── lv2ldr │ │ ├── manu_info_spu_module.self │ │ ├── mc_iso_spu_module.self │ │ ├── me_iso_spu_module.self │ │ ├── sb_iso_spu_module.self │ │ ├── sc_iso.self │ │ ├── sdk_version │ │ ├── spp_verifier.self │ │ ├── spu_pkg_rvk_verifier.self │ │ ├── spu_token_processor.self │ │ ├── spu_utoken_processor.self │ │ └── sv_iso_spu_module.self │ ├── dev_flash_XXX.tar.aa.DATE/TIME │ ├── dev_flash3_XXX.tar.aa.DATE/TIME │ ├── MULTI_CARD_FIRMWARE.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── RL_FOR_PACKAGE.img │ ├── RL_FOR_PROGRAM.img │ ├── SYS_CON_FIRMWARE_01000006.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── SYS_CON_FIRMWARE_01010303.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── SYS_CON_FIRMWARE_01020302 │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── SYS_CON_FIRMWARE_01030302.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── SYS_CON_FIRMWARE_01040402.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── SYS_CON_FIRMWARE_01050002.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── SYS_CON_FIRMWARE_01050101.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ ├── SYS_CON_FIRMWARE_S1_00010002083E0832.pkg │ │ ├── content │ │ ├── info0 │ │ └── info1 │ └── UPL.xml.pkg │ ├── content │ ├── info0 │ └── info1 ├── update_files.tar ├── update_flags.txt ├── version.txt └── vsh.tar