Editing PKG files
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
{{wikify}} | {{wikify}} | ||
For more information, see {{talk}} | |||
== Structure == | == Package Structure == | ||
=== File Header === | === File Header === | ||
While most of the PS4 is little endian, the package file header still uses big endianness as the headers are based on their PS3 predecessors. | |||
While most of the PS4 | |||
typedef struct { | typedef struct { | ||
uint32_t pkg_magic; | uint32_t pkg_magic; // 0x000 | ||
uint16_t pkg_revision; // 0x004 | |||
uint32_t | uint16_t pkg_type; // 0x006 | ||
uint32_t pkg_file_count; | uint32_t pkg_unk; // 0x008 - unknown field | ||
uint32_t | uint32_t pkg_file_count; // 0x00C | ||
uint16_t | uint32_t pkg_table_ents; // 0x010 | ||
uint16_t | uint16_t pkg_sys_ents; // 0x014 | ||
uint32_t pkg_table_offset; | uint16_t pkg_unk; // 0x016 - unknown field | ||
uint32_t | uint32_t pkg_table_offset; // 0x018 - file table offset | ||
uint32_t pkg_ent_data_size; // 0x01C | |||
uint32_t pkg_unk; // 0x020 - unknown field | |||
uint32_t pkg_body_offset; // 0x024 - seems to always be 0x200 | |||
uint32_t pkg_body_unk; // 0x028 - unknown field | |||
uint32_t pkg_body_size; // 0x02C<br> | |||
unsigned char pkg_padding[0x10]; // 0x030 - 16 bytes padding | |||
unsigned char pkg_content_id[0x24]; // 0x040 - packages' content ID as a 36-byte string | unsigned char pkg_content_id[0x24]; // 0x040 - packages' content ID as a 36-byte string | ||
unsigned char pkg_padding[ | unsigned char pkg_padding[0x10]; // 0x064 - 16 bytes padding | ||
unsigned char pkg_unknown[0x8C]; // 0x074 - unknown data<br> | |||
/* Digest table */ | /* Digest table */ | ||
unsigned char digest_entries1[0x20]; // 0x100 - sha256 digest for main entry 1 | unsigned char digest_entries1[0x20]; // 0x100 - sha256 digest for main entry 1 | ||
Line 43: | Line 30: | ||
unsigned char digest_table_digest[0x20]; // 0x140 - sha256 digest for digest table | unsigned char digest_table_digest[0x20]; // 0x140 - sha256 digest for digest table | ||
unsigned char digest_body_digest[0x20]; // 0x160 - sha256 digest for main table | unsigned char digest_body_digest[0x20]; // 0x160 - sha256 digest for main table | ||
} | |||
} | |||
=== Files === | === Files === | ||
The file table contains a pointer to a list of files in a package file when the package is of "CNT" magic, this pointer can be found as a 32-bit unsigned integer at 0x2B30. File names are separated by null bytes, and packages typically contain the following files: | |||
The file table | |||
param.sfo - contains information critical to the app / game | param.sfo - contains information critical to the app / game | ||
Line 87: | Line 45: | ||
icon0.png - small icon | icon0.png - small icon | ||
icon1.png - large icon | icon1.png - large icon | ||
== Delivery == | == Delivery == | ||
=== Title XML === | === Title XML === | ||
The PS4 fetches information about pkg files (including where to download them) from an XML file. | |||
The PS4 fetches information about | This XML file contains information such as if the latest patch is mandatory, the latest package version, the manifest, as well as param.sfo information. Below is an example of a typical title XML file: | ||
<titlepatch titleid="CUSAXXXXX"> | <titlepatch titleid="CUSAXXXXX"> | ||
Line 182: | Line 70: | ||
=== Manifest === | === Manifest === | ||
It should be noted that PS4 package files have a maximum size of 4GB (or 4096MB), therefore large (most) games are split into chunks or pieces. This is kept track of in the manifest file, which contains json fields which document things such as the size of the final package after the chunks are spliced together, the digest of the final package, the number of chunks, as well as information for each chunk such as the pkg url, offset for splicing, size of the file, and the sha1 hash value of the individual chunk. | |||
It should be noted that PS4 package files have a maximum size of 4GB (or 4096MB), therefore large (most) games are split into chunks or pieces. This is kept track of in the manifest file, which contains | |||
originalFileSize: [size] | originalFileSize: [size] | ||
Line 195: | Line 82: | ||
fileSize: [size, often 4294967296 until last chunk] | fileSize: [size, often 4294967296 until last chunk] | ||
hashValue: "[sha1 hash of chunk]" | hashValue: "[sha1 hash of chunk]" | ||
== Sample Packages == | == Sample Packages == | ||
=== Apps/Games === | === Apps/Games === | ||
* Amazon/LOVEFiLM App | * Amazon/LOVEFiLM App | ||
http://gs2.ww.prod.dl.playstation.net/gs2/appkgo/prod/CUSA00126_00/1/f_012ccf9936265867696e3906c9bd9f0fd1869111fa372b2d1fad0ca4127ba67b/f/EP4183-CUSA00126_00-AIV00000000000EU.pkg | http://gs2.ww.prod.dl.playstation.net/gs2/appkgo/prod/CUSA00126_00/1/f_012ccf9936265867696e3906c9bd9f0fd1869111fa372b2d1fad0ca4127ba67b/f/EP4183-CUSA00126_00-AIV00000000000EU.pkg | ||
Line 562: | Line 103: | ||
=== Themes === | === Themes === | ||
* 20th Anniversary Dynamic Theme | * 20th Anniversary Dynamic Theme | ||
http://gs2.ww.prod.dl.playstation.net/gs2/acpkgo/prod/CUSA01501_00/5/f_3074fd8eb8322540c8742865a722c6773b031f68d517df3e18d7037fe58af7b0/f/EP9000-CUSA01501_00-20THANNITHEME001.pkg | http://gs2.ww.prod.dl.playstation.net/gs2/acpkgo/prod/CUSA01501_00/5/f_3074fd8eb8322540c8742865a722c6773b031f68d517df3e18d7037fe58af7b0/f/EP9000-CUSA01501_00-20THANNITHEME001.pkg | ||
Line 578: | Line 118: | ||
http://gs2.ww.prod.dl.playstation.net/gs2/acpkgo/prod/CUSA01501_00/1/f_a6fb07c75a9776ca2f71e557a98620318bf11378c69d812f147c9f0fe12ee1c6/f/EP9000-CUSA01501_00-0000000000000003.pkg | http://gs2.ww.prod.dl.playstation.net/gs2/acpkgo/prod/CUSA01501_00/1/f_a6fb07c75a9776ca2f71e557a98620318bf11378c69d812f147c9f0fe12ee1c6/f/EP9000-CUSA01501_00-0000000000000003.pkg | ||
'''Source:''' https://boerse.to/thema/datenbank-fuer-ps4-psn-links.1979635/ | |||
See also: [[PKG_files/rawlist1]], [[PKG_files/rawlist2]] | |||
{{File Formats}} | {{File Formats}} | ||
<noinclude>[[Category:Main]]</noinclude> | <noinclude>[[Category:Main]]</noinclude> |