Difference between revisions of "Unreal Engine 4 PAK"

From XentaxWiki
Jump to: navigation, search
(Games)
(Format Specifications)
Line 71: Line 71:
 
<font color="blue"><i>FOOTER (44 bytes)</i></font><br />
 
<font color="blue"><i>FOOTER (44 bytes)</i></font><br />
 
&nbsp;&nbsp;uint32 {4}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Signature  <font color="purple">((bytes)225,18,111,90) // E1 12 6F 5A  // "..oZ" </font><br />
 
&nbsp;&nbsp;uint32 {4}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Signature  <font color="purple">((bytes)225,18,111,90) // E1 12 6F 5A  // "..oZ" </font><br />
&nbsp;&nbsp;uint32 {4}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Version  <font color="purple">(3) or (8)</font><br />
+
&nbsp;&nbsp;uint32 {4}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Version  <font color="purple">// 1, 2, 3, 4, 7 or 8</font><br />
 
&nbsp;&nbsp;uint64 {8}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Directory Offset<br />
 
&nbsp;&nbsp;uint64 {8}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Directory Offset<br />
 
&nbsp;&nbsp;uint64 {8}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Directory Length  <font color="purple">(not including FOOTER)</font><br />
 
&nbsp;&nbsp;uint64 {8}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Directory Length  <font color="purple">(not including FOOTER)</font><br />

Revision as of 17:45, 20 September 2021

Back to index | Edit this page

PAK

  • Format Type : Archive
  • Endian Order : Little Endian
  • Signature : None


Format Specifications

Uses ZLib, GZip, or Snappy Compression
FILE DATA
  for each file
    uint64 {8}       - null
    uint64 {8}       - Compressed Length (not including the file header fields or padding)
    uint64 {8}       - Decompressed Length
    uint32 {4}       - Compression Type (0=uncompressed, 1=ZLib, 2=GZip, 4=Snappy)
    byte {20}        - Unknown
    if (compressed){
      uint32 {4}       - Number of Compressed Blocks
      for each compressed block
        uint64 {8}       - Offset to the start of the compressed data block (relative to the start of the archive)
        uint64 {8}       - Offset to the end of the compressed data block (relative to the start of the archive)

      byte {1}         - null
      for each compressed block
        uint32 {4}       - Decompressed Length of thie block
        byte {X}         - File Data (ZLib Compression)

      byte {0-2047}    - null Padding to a multiple of 2048 bytes (sometimes, not always)
      }

    else if (uncompressed){
      uint32 {4}       - null
      byte {1}         - null
      byte {X}         - File Data
      byte {0-2047}    - null Padding to a multiple of 2048 bytes (sometimes, not always)
      }

DIRECTORY
  uint32 {4}       - Relative Directory Name Length (including null terminator) (10)
  byte {9}         - Relative Directory Name (../../../)
  byte {1}         - null Relative Directory Name Terminator
  uint32 {4}       - Number of Files
  for each file
    uint32 {4}       - Filename Length (including null terminator)
    byte {X}         - Filename
    byte {1}         - null Filename Terminator
    uint64 {8}       - File Offset
    uint64 {8}       - Compressed Length (not including the file header fields or padding)
    uint64 {8}       - Decompressed Length
    uint32 {4}       - Compression Type (0=uncompressed, 1=ZLib, 2=GZip, 4=Snappy)
    byte {20}        - Unknown
    if (compressed){
      uint32 {4}       - Number of Compressed Blocks
      for each compressed block
        uint64 {8}       - Offset to the start of the compressed data block (relative to the start of the archive)
        uint64 {8}       - Offset to the end of the compressed data block (relative to the start of the archive)

      byte {1}         - null
      uint32 {4}       - Decompressed Block Size (65536 if multiple blocks, otherwise the same as the decompressed length)
      }

    else if (uncompressed){
      uint32 {4}       - null
      byte {1}         - null
      }

FOOTER (44 bytes)
  uint32 {4}       - Signature ((bytes)225,18,111,90) // E1 12 6F 5A // "..oZ"
  uint32 {4}       - Version // 1, 2, 3, 4, 7 or 8
  uint64 {8}       - Directory Offset
  uint64 {8}       - Directory Length (not including FOOTER)
  byte {20}        - Unknown

MultiEx BMS Script

Not written yet.

QuickBMS Script

Notes and Comments

  • It is popular file format used in many games made on Unreal Engine 4.
  • These files normally occur in path such as "\<game_name>\<build_name>\Content\Paks\<build_name>-WindowsNoEditor.pak"
  • This archive type uses ZLIB, GZIP or Snappy compression method.
  • Data may be encrypted with AES encryption.

Games

List of games using this file format:

  • Legendary Hunter VR
  • Little Nightmares II (PC) (*.PAK) (version 8)
  • Styx: Shards of Darkness
  • The Fall of Lazarus
  • Many more...

Compatible Programs

See Also