Deserializing Unreal Packages - Tables

November 06, 2012

In this article I will be explaining the structure of Tables used in Unreal package files such as .upk, and .u files. The structures explained here are only for the Unreal Engine 3. You can also read the previous article.

To understand this article you'll first have to read the previous article on Data Structures.

Names Table

The names table is a UArray consisting of table items that describe a name and its flags.

The structure is as follows:

Name Type
Name String
Flags 64Bit Unsigned Integer

Exports Table

The export table consists of all objects that resist within the package. Each table item will describe the position and size of an object.

 

The structure is as follows:

Name Type
ClassObject ObjectIndex
SuperObject ObjectIndex
OuterObject ObjectIndex
ObjectName NameIndex
ArchetypeObject ObjectIndex
ObjectFlags 64Bit Unsigned Integer
SerialSize 32Bit Integer
SerialOffset 32Bit Integer
Components Map of ComponentName(NameIndex) and ComponentObject(ObjectIndex)
ExportFlags 32Bit Unsigned Integer
NetObjects Array of NetObject(ObjectIndex)
PackageGUID 16 Bytes
PackageFlags 32Bit Integer

Imports Table

The imports table describes all objects necessary for the package to function properly. Each table item will describe which package, class, and object the package is dependant on.

The structure is as follows:

Name Type
PackageName NameIndex
ClassName NameIndex
OuterObject ObjectIndex
ObjectName NameIndex

Generations Table

The generations table describes all the generations of the package. Each time a developer performs the ConformCommandlet on two packages a new generation will be added to the table. The generations table is used to make packages network-compatible.

 

The structure is as follows:

Name Type
ExportsCount 32Bit Integer
NamesCount 32Bit Integer
NetObjectsCount 32Bit Integer

Other Tables

Depends Table, Chunks Table, and the Generations Table are unavailable.


Tutorial Reverse-Engineering UE Explorer Software

Comments