Playstation Update Package (PUP)
Extraction
The PS VITA update files can be extracted using the "PS VITA Firmware xTractor" or the pupunpack from vitatools.
Decryption
To decrypt the files which are unpacked using the tool, the key is available under PS Vita Keys
Structure
The file structure of the Vita's PUP files is almost identical to the PS3's, although there is a slight difference in the header and the hash algorithm. For starters, whereas in PS3 the format was big-endian for the Vita it has been switched to little-endian (probably the same for all Vita formats). Also the Package Version field in Vita pups is set to 2 where in PS3 updates it was set to 1. There is also 0x50 bytes of extra data in the header and the hashes used are of a longer length than in PS3 updates (0x20 bytes in Vita vs 0x14 in PS3)
Header
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x8 | unsigned long | Magic (hex: 0x5343455546000001 ~ ASCII "SCEUF") |
0x8 | 0x8 | unsigned long | Package Version |
0x10 | 0x8 | unsigned long | Image Version |
0x18 | 0x8 | unsigned long | File Count |
0x20 | 0x8 | unsigned long | Header Length (2048, file data starts from here) |
0x28 | 0x8 | unsigned long | Package Length (size of PUP file - 8) |
0x30 | 0x50 | UNKNOWN | UNKNOWN, same for all >V1.0 files so far, maybe something for extra security? (or maybe to break a PS3 which tries to read the update)
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000030 02 00 00 00 01 00 00 00 00 00 00 00 02 00 00 00 ................ 00000040 00 00 00 00 0F 00 00 00 00 00 00 00 00 00 00 00 ................ 00000050 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ |
0x80 | 0x20 * File Count | File Table | File Table |
0x80 + (0x20 * File Count) | 0x40 * File Count | Hash Table | Hash Table |
0x80 + (0x60 * File Count) | 0x20 | bytes | Header Hash (unknown algo?) |
File Table
The file table consists of a number of file entries determined by File Count, with the format below (which is the same as the format in PS3 PUP1 files)
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 | Notes |
---|---|---|
0x101 | license.xml | |
0x200 | psp2swu.sprx | |
0x204 | psp2swu.self | |
0x301 | package_data01.pkg | |
0x302 | package_data02.pkg | |
0x303 | package_data03.pkg | |
0x304 | package_data04.pkg | |
0x305 | package_data05.pkg | |
0x306 | package_data06.pkg | |
0x307 | package_data07.pkg | |
0x308 | package_data08.pkg | |
0x309 | package_data09.pkg | |
0x30a | package_data10.pkg | |
0x30b | package_data11.pkg | |
0x30c | package_data12.pkg | |
0x30d | package_data13.pkg | |
0x30e | package_data14.pkg | |
0x30f | package_data15.pkg | |
0x400 | package_scewm.wm | |
0x401 | package_sceas.as |
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 Index |
0x8 | 0x20 | bytes | File Hash (hmac-sha256 algo?) |
0x28 | 0x18 | bytes | Unknown |
Files
preinst - 01.000.000
Type | Header | Information | Size |
---|---|---|---|
ASCII:MM.mmmm (01.500) | [none] | version.txt | 1 |
PSP2SWU.SELF? | SCE .ELF | binary0.self | 4536 |
PSP2SWU.SPRX? | SCE .ELF | binary1.self | 42 |
XML | license.xml | 451 | |
SCE | package_file_0.pkg | 7904 | |
SCE | package_file_1.pkg | 8130 | |
SCE | package_file_2.pkg | 8196 | |
SCE | package_file_3.pkg | 8196 | |
SCE | package_file_4.pkg | 8196 | |
SCE | package_file_5.pkg | 7883 | |
SCE | package_file_6.pkg | 8052 | |
SCE | package_file_7.pkg | 6943 | |
SCE | package_file_8.pkg | 7758 | |
SCE | package_file_9.pkg | 7805 | |
SCE | package_file_10.pkg | 7804 | |
SCE | package_file_11.pkg | 8005 | |
SCE | package_file_12.pkg | 8103 | |
SCE | package_file_13.pkg | 8084 | |
SCE | package_file_14.pkg | 8066 | |
SCE | package_file_15.pkg | 1661 | |
SCEWM | package_file_16.pkg | 14 | |
SCEAS | package_file_17.pkg | 1 |
systemdata - 01.000.010
Type | Header | Information | Size |
---|---|---|---|
ASCII:MM.mmmm (01.500) | [none] | version.txt | 1 |
PSP2SWU.SELF? | SCE .ELF | binary0.self | 4536 |
PSP2SWU.SPRX? | SCE .ELF | binary1.self | 42 |
XML | license.xml | 451 | |
SCE | package_file_0.pkg | 2625 | |
SCE | package_file_1.pkg | 4048 | |
SCE | package_file_2.pkg | 2746 | |
SCE | package_file_3.pkg | 3874 | |
SCE | package_file_4.pkg | 4742 | |
SCE | package_file_5.pkg | 4660 | |
SCE | package_file_6.pkg | 3946 | |
SCE | package_file_7.pkg | 4145 | |
SCE | package_file_8.pkg | 4630 | |
SCE | package_file_9.pkg | 5476 | |
SCE | package_file_10.pkg | 4860 | |
SCE | package_file_11.pkg | 4722 | |
SCEWM | package_file_12.pkg | 4 | |
SCEAS | package_file_13.pkg | 1 |
full - 01.500.000
Type | Header | Information | Size |
---|---|---|---|
ASCII:MM.mmmm (01.500) | [none] | version.txt | 1 |
PSP2SWU.SELF? | SCE .ELF | binary0.self | 4536 |
PSP2SWU.SPRX? | SCE .ELF | binary1.self | 42 |
XML | license.xml | 451 | |
SCE | package_file_0.pkg | 634 | |
SCE | package_file_1.pkg | 6718 | |
SCE | package_file_2.pkg | 8194 | |
SCE | package_file_3.pkg | 8194 | |
SCE | package_file_4.pkg | 8194 | |
SCE | package_file_5.pkg | 8194 | |
SCE | package_file_6.pkg | 8194 | |
SCE | package_file_7.pkg | 8194 | |
SCE | package_file_8.pkg | 8194 | |
SCE | package_file_9.pkg | 8194 | |
SCE | package_file_10.pkg | 8194 | |
SCE | package_file_11.pkg | 6154 | |
SCEWM | package_file_12.pkg | 4 | |
SCEAS | package_file_13.pkg | 1 |
Regioning
If simular to PS3, then there is no regioning in the .PUP files, they are the same for all different regions.
The PS Vita however gets the psp2-updatelist.xml from different servers, depening on the region of that model.
Retail:
11 jan 2012 :: full 01.520.000 + systemdata 01.000.010 + preinst 01.000.000:
<update_data_list> <region id="jp"> <np level0_system_version="01.520.000" level1_system_version="01.520.000" level2_system_version="01.520.000"/> <version system_version="01.520.000" label="01.520"> <update_data update_type="full"> <image size="94646272"> http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0111/rel_01a72de4dd90191f679f648da8d11a48/PSP2UPDAT.PUP?dest=jp </image> </update_data> </version> <recovery spkg_type="systemdata"> <image spkg_version="01.000.010" size="56817152"> http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0111/sd_d48c3a2ca8963ffc7ac01c73e873809c/PSP2UPDAT.PUP?dest=jp </image> </recovery> <recovery spkg_type="preinst"> <image spkg_version="01.000.000" size="128837120"> http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0111/pre_5899e51b24eb4ab2c985df08bf6c901b/PSP2UPDAT.PUP?dest=jp </image> </recovery> </region> </update_data_list>
22 dec 2011 :: full 01.510.000 + systemdata 01.000.010 + preinst 01.000.000:
<update_data_list> <region id="jp"> <np level0_system_version="01.510.000" level1_system_version="01.510.000" level2_system_version="01.510.000"/> <version system_version="01.510.000" label="01.510"> <update_data update_type="full"> <image size="94500352"> http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1222/rel_48ac631ecae3837a7530506de0d73eaf/PSP2UPDAT.PUP?dest=jp </image> </update_data> </version> <recovery spkg_type="systemdata"> <image spkg_version="01.000.010" size="56817152"> http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1222/sd_52ff6b714e5f701d15938a6fee68fb66/PSP2UPDAT.PUP?dest=jp </image> </recovery> <recovery spkg_type="preinst"> <image spkg_version="01.000.000" size="128837120"> http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1222/pre_a18a91bb8c86f8c1a101d19fcb15fb6d/PSP2UPDAT.PUP?dest=jp </image> </recovery> </region> </update_data_list>
14 dec 2011 :: full 01.500.000 + systemdata 01.000.010 + preinst 01.000.000:
<update_data_list> <region id="jp"> <np level0_system_version="01.500.000" level1_system_version="01.500.000" level2_system_version="01.500.000"/> <version system_version="01.500.000" label="01.500"> <update_data update_type="full"> <image size="94496256"> http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1214/rel_f090a69bcf392b5c311b9e786c5cc0b5/PSP2UPDAT.PUP?dest=jp </image> </update_data> </version> <recovery spkg_type="systemdata"> <image spkg_version="01.000.010" size="56817152"> http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1214/sd_484243f3964158b38ad1adaac0332a3e/PSP2UPDAT.PUP?dest=jp </image> </recovery> <recovery spkg_type="preinst"> <image spkg_version="01.000.000" size="128837120"> http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1214/pre_24b5601c3b3aa63b51cf5eaeab718a4c/PSP2UPDAT.PUP?dest=jp </image> </recovery> </region> </update_data_list>
Shop:
<update_data_list> <region id="shop"> <np level0_system_version="00.000.000" level1_system_version="00.000.000" level2_system_version="00.000.000"/> <version system_version="00.000.000"> <update_data update_type="full"> <image>NA</image> </update_data> </version> </region> </update_data_list>
Retail basic structure of the update URL:
http://d<TLD>01.psp2.update.playstation.net/update/psp2/image/<YYYY_MMDD>/pre_<md5>/PSP2UPDAT.PUP?dest=<TLD> (TLD=2 letter abbreviation from above region, YYYY_MMDD is release date, md5 is 22-digits long HASH)
Revisions
01.030.010
SKU Release version in Japan
01.050.000
shipped on launch gaming cards
01.060.010
SKU Release version in USA/Europe
01.500.000 Complete
14 dec 2011
[fill here]
preinst 01.000.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1214/pre_24b5601c3b3aa63b51cf5eaeab718a4c/PSP2UPDAT.PUP
1.000.000 PSP2UPDAT.PUP
systemdata 01.000.010
http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1214/sd_484243f3964158b38ad1adaac0332a3e/PSP2UPDAT.PUP
1.000.010 PSP2UPDAT.PUP
full 01.500.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1214/rel_f090a69bcf392b5c311b9e786c5cc0b5/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.510.000 Complete
22 dec 2011
[fill here]
preinst 01.000.000
systemdata 01.000.010
full 01.510.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2011_1222/rel_48ac631ecae3837a7530506de0d73eaf/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.520.000 Complete
11 jan 2012
[fill here]
preinst 01.000.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0111/pre_5899e51b24eb4ab2c985df08bf6c901b/PSP2UPDAT.PUP
PSP2UPDAT.PUP
systemdata 01.000.010
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0111/sd_d48c3a2ca8963ffc7ac01c73e873809c/PSP2UPDAT.PUP
PSP2UPDAT.PUP
full 01.520.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0111/rel_01a72de4dd90191f679f648da8d11a48/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.600.000 Complete
6 feb 2012
[fill here]
preinst 01.000.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0206/pre_fb565f82d66bbd1ac9dbc2ddb1c62cdf/PSP2UPDAT.PUP
PSP2UPDAT.PUP
systemdata 01.000.010
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0206/sd_49299e94ebc7c040b6e0a2d2a7f6ddcc/PSP2UPDAT.PUP
PSP2UPDAT.PUP
full 01.600.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0206/rel_5e9c9bc4f434db1401d30ec41c174ab9/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.610.000 Complete
16 feb 2012
[fill here]
preinst 01.000.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0216/pre_061248a332add8575d76b694ffb7342a/PSP2UPDAT.PUP
PSP2UPDAT.PUP
systemdata 01.000.010
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0216/sd_383cb3e417ee83bf9567ad5df910fa03/PSP2UPDAT.PUP
PSP2UPDAT.PUP
full 01.610.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0216/rel_f0bc997c94a6190768515c7d1f6db7b3/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.650.000 Complete
30 mar 2012
[fill here]
preinst 01.000.000
systemdata 01.000.010
full 01.650.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0330/rel_03a1888a00a58acd2316cbec309716a9/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.660.000 Complete
03 apr 2012
[fill here]
preinst 01.000.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0403/pre_69fd66f4b4785d2cc01927f2771a8f2b/PSP2UPDAT.PUP
PSP2UPDAT.PUP
systemdata 01.000.010
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0403/sd_5dfed130a0cf4eb3708020fcd331184d/PSP2UPDAT.PUP
PSP2UPDAT.PUP
full 01.660.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0403/rel_fb68d6099eab0ba188fd92ebff5085a2/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.670.000 Complete
03 apr 2012
[fill here]
preinst 01.000.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0403/pre_69fd66f4b4785d2cc01927f2771a8f2b/PSP2UPDAT.PUP
PSP2UPDAT.PUP
systemdata 01.000.010
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0403/sd_5dfed130a0cf4eb3708020fcd331184d/PSP2UPDAT.PUP
PSP2UPDAT.PUP
full 01.670.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0403/rel_fb68d6099eab0ba188fd92ebff5085a2/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.690.000 Complete
16 May 2012
[fill here]
preinst 01.000.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0516/pre_0ea99ace3aa72e62c71f4b8ee1c72f13/PSP2UPDAT.PUP
PSP2UPDAT.PUP
systemdata 01.000.010
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0516/sd_a7a6b249975cd630f9b61eef40125430/PSP2UPDAT.PUP
PSP2UPDAT.PUP
full 01.690.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0516/rel_c3a1589e8d029a72879f35d218c8d618/PSP2UPDAT.PUP
PSP2UPDAT.PUP
01.691.000 Complete (SILENT SECOND RELEASE)
preinst & systemdata 20 Jun 2012
full 16 May 2012
[fill here]
preinst 01.000.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0620/rel_6075c28175518a84eb47de7e84b30eb2/PSP2UPDAT.PUP
PSP2UPDAT.PUP
systemdata 01.000.010
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0620/sd_fcad49347b95c09db34dd925e5e5a2ce/PSP2UPDAT.PUP
PSP2UPDAT.PUP
full 01.691.000
http://djp01.psp2.update.playstation.net/update/psp2/image/2012_0516/rel_c3a1589e8d029a72879f35d218c8d618/PSP2UPDAT.PUP
PSP2UPDAT.PUP