Editing PKG files

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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 10: Line 10:


   typedef struct {
   typedef struct {
     uint32_t pkg_magic;                     // 0x000 - 0x7F434E54
     uint32_t pkg_magic;         // 0x000
     uint32_t pkg_type;                       // 0x004
     uint16_t pkg_revision;      // 0x004
     uint32_t pkg_0x008;                     // 0x008 - unknown field
    uint16_t pkg_type;           // 0x006
     uint32_t pkg_file_count;                 // 0x00C
     uint32_t pkg_unk;           // 0x008 - unknown field
     uint32_t pkg_entry_count;               // 0x010
     uint32_t pkg_file_count;     // 0x00C
     uint16_t pkg_sc_entry_count;             // 0x014
     uint32_t pkg_entry_count;   // 0x010
     uint16_t pkg_entry_count_2;             // 0x016 - same as pkg_entry_count
     uint16_t pkg_sc_entry_count; // 0x014
     uint32_t pkg_table_offset;               // 0x018 - file table offset
     uint16_t pkg_entry_count_2; // 0x016 - same as pkg_entry_count
     uint32_t pkg_entry_data_size;           // 0x01C
     uint32_t pkg_table_offset;   // 0x018 - file table offset
     uint64_t pkg_body_offset;               // 0x020 - offset of PKG entries
     uint32_t pkg_ent_data_size; // 0x01C
     uint64_t pkg_body_size;                 // 0x028 - length of all PKG entries
     uint64_t pkg_body_offset;   // 0x020 - offset of PKG entries
     uint64_t pkg_content_offset;            // 0x030
     uint64_t pkg_body_size;     // 0x028 - length of all PKG entries
     uint64_t pkg_content_size;               // 0x038
     <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[0xC];         // 0x064 - padding
     unsigned char pad[0xC];                 // 0x064 - 0x070 - padding
     uint32_t pkg_drm_type;                  // 0x070 - DRM type
     uint32_t pkg_drm_type;                  // 0x070 - DRM type
     uint32_t pkg_content_type;              // 0x074 - Content type
     uint32_t pkg_content_type;              // 0x074 - Content type
     uint32_t pkg_content_flags;              // 0x078 - Content flags
     // other stuff... 0x78 - 0x100
    uint32_t pkg_promote_size;              // 0x07C
    uint32_t pkg_version_date;              // 0x080
    uint32_t pkg_version_hash;              // 0x084
    uint32_t pkg_0x088;                      // 0x088
    uint32_t pkg_0x08C;                      // 0x08C
    uint32_t pkg_0x090;                      // 0x090
    uint32_t pkg_0x094;                      // 0x094
    uint32_t pkg_iro_tag;                    // 0x098
    uint32_t pkg_drm_type_version;          // 0x09C
     <br>
     <br>
     /* Digest table */
     /* Digest table */
Line 43: Line 35:
     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
     // ...
     // ... 0x180 - 0x400
     uint32_t pfs_image_count;                // 0x404 - count of PFS images
     uint32_t pfs_image_count;                // 0x404 - count of PFS images
     uint64_t pfs_image_flags;               // 0x408 - PFS flags
     uint64_t pfs_flags;                     // 0x408 - PFS flags
     uint64_t pfs_image_offset;              // 0x410 - offset to start of external PFS image
     uint64_t pfs_image_offset;              // 0x410 - offset to start of external PFS image
     uint64_t pfs_image_size;                // 0x418 - size of external PFS image
     uint64_t pfs_image_size;                // 0x418 - size of external PFS image
    uint64_t mount_image_offset;            // 0x420
    uint64_t mount_image_size;              // 0x428
    uint64_t pkg_size;                      // 0x430
    uint32_t pfs_signed_size;                // 0x438
    uint32_t pfs_cache_size;                // 0x43C
    unsigned char pfs_image_digest[0x20];    // 0x440
    unsigned char pfs_signed_digest[0x20];  // 0x460
    uint64_t pfs_split_size_nth_0;          // 0x480
    uint64_t pfs_split_size_nth_1;          // 0x488
     // ...
     // ...
    unsigned char pkg_digest[0x20];          // 0xFE0
   } pkg_header;
   } pkg_header;                             // 0x1000


=== Files ===
=== Files ===
Please note that all contributions to PS4 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS4 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)