Playstation Update Package (PUP): Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
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 07: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