PKG files: Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
Line 104: Line 104:
=== Misc/Note ===
=== Misc/Note ===


From FW 4.00, install PKG from root device (but not as "bubble")  for PS1 classic if not containing [[EDAT_files|.EDAT files]] license type Free will abort.
From FW 4.00, install PKG from root device (but not as "bubble")  for PS1 classic if not containing [[EDAT_files|.EDAT files]] license type Free will abort or install directly as bubble according to the cfw.

Revision as of 12:52, 6 September 2013

Firmware Packages

File Header

All values are in big endian format.

 typedef struct {
   u32 0x00, 0x53434500// magic
   u32 0x04, 2		// version
   u16 0x08, 0		// sdk type?
   u16 0x0a, 3		// SCE header type; pkg
   u32 0x0c, 0		// meta offset
   u64 0x10,           // size of sce_hdr + sizeof meta_hdr
   u64 0x18, 0x80      // + content_size_real
 }


Game Packages

All game packages are signed with the ECDSA signature. The public key for it can be found in download_plugin.prx or in nas_plugin.prx (this also applies to NPDRM SELFs). Usually game packages are signed with two signatures - one for the header and the other for the entry table.

File Header

All values are in big endian format.

 typedef struct {
   u32 magic;
   u32 pkg_type;
   u32 pkg_info_offset;
   u32 pkg_info_size;
   u32 header_size;
   u32 item_count;
   u64 total_size;
   u64 data_offset;
   u64 data_size;
   char contentid[0x30];
   u8 digest[0x10];
   u8 k_licensee[0x10];
 } PKG_HEADER;


field offset size type notes
Unencrypted header
magic 0x0 4 u32 Magic value of 0x7f504b47 "\x7fPKG"
pkg_type 0x4 4 u32 The package type is 1 for PS3 pkg and 2 for PSP (minis also)/Vita packages. the flag 0x80000000 is used for retail.
pkg_info_offset 0x8 4 u32 offset of the pkg_info structure
pkg_info_size 0xC 4 u32 pkg_info_size*8 = size of the pkg_info structure
header_size 0x10 4 u32 Size of the header
item_count 0x14 4 u32 Variable (0x**)
total_size 0x18 8 u64
data_offset 0x20 8 u64
data_size 0x28 8 u64
contentid 0x30 48 u8[48] See PARAM.SFO#CONTENT_ID
digest 0x60 16 u8[16]
k_licensee 0x70 16 u8[16]


File Entry

All values are in big endian format

 typedef struct {
   u32 filename_offset;
   u32 filename_size;
   u64 data_offset;
   u64 data_size;
   u32 flags;
   u32 padding;
 } PKG_FILE_HEADER;
field offset type notes
filename_offset 0x0 u32
filename_size 0x4 u32
data_offset 0x8 u64
data_size 0x10 u64
flags 0x18 u32 The file type
padding 0x1C u32 zero

Misc/Note

From FW 4.00, install PKG from root device (but not as "bubble") for PS1 classic if not containing .EDAT files license type Free will abort or install directly as bubble according to the cfw.