Unreal Engine 4 PAK
Back to index | Edit this page
Contents
PAK
- Format Type : Archive
- Endian Order : Little Endian
- Signature : E1 12 6F 5A
Format Specifications
// Unreal Engine 4 PAK file format
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, 16=bias memory, 32=bias speed)
byte {20} - data sha1 hash
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, 8, 9 or 11
uint64 {8} - Directory Offset
uint64 {8} - Directory Length (not including FOOTER)
byte {20} - directory sha1 hash
if (version) == 11
char {160} - compression string + padding // e.g. "Zlib"
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.
- To parse the archive, footer needs to be read first, because it has important info about offsets.
Games
List of games using this file format:
- Backbone (PC) (*.PAK) (version 11)
- Little Nightmares II (PC) (*.PAK) (version 8)
- Poppy Playtime (PC) (*.PAK) (version 11)
- Pumpkin Jack (PC) (*.PAK) (version 9)
- Styx: Shards of Darkness
- Tekken 7 (PC) (*.PAK) (version 3)
- The Fall of Lazarus
- Many more...
Compatible Programs
See Also
Gallery