XContent: Difference between revisions
imported>Stoker25 mNo edit summary |
(→Tools) |
||
Line 445: | Line 445: | ||
XLAST inside the Xbox 360 SDK can create LIVE/PIRS packages, but it is illegal to share it. | XLAST inside the Xbox 360 SDK can create LIVE/PIRS packages, but it is illegal to share it. | ||
[[Category:File formats]] |
Revision as of 01:43, 20 August 2010
XContent packages store a wide range of files for the Xbox 360 created locally or downloaded. From save game files to marketplace items, these packages are everywhere, and are secured through the use of cryptographic hashes (SHA-1) and signed and verified using the console's unique RSA-2048 private key. They store files through the use of STFS and information about the package through use of a metadata structure.
XContent Header
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x4 | unsigned int | Signature Type |
The signature type can be one of the following:
Signature Type | Information |
---|---|
"CON " | Signed by a console. Found on many files such as cache files, profiles, saved games. |
PIRS | Signed by Microsoft. Found on files delivered by Microsoft through non-Xbox Live means such as system updates. |
LIVE | Signed by Microsoft. Found on files delivered over Xbox Live such as items from the Marketplace like themes. |
For console signed ("CON ") packages, the Console Security Certificate is used.
For remotely signed (LIVE/PIRS) packages, the following format is used:
Offset | Length | Type | Information |
---|---|---|---|
0x4 | 0x100 | bytes | Package Signature |
0x104 | 0x128 | bytes | Padding |
The Package Signature is generated using the value at 0x32C (Content ID/Header SHA1).
XContent Metadata
Offset | Length | Type | Information |
---|---|---|---|
0x22C | 0x100 | license entries (see below) | Licensing Data (used to check package owner) |
0x32C | 0x14 | bytes | Content ID / Header SHA1 Hash |
0x340 | 0x4 | unsigned int | Entry ID |
0x344 | 0x4 | signed int | Content Type (see below) |
0x348 | 0x4 | signed int | Metadata Version (see below) |
0x34C | 0x8 | signed long | Content Size |
0x354 | 0x4 | unsigned int | Media ID |
0x358 | 0x4 | signed int | Version (system/title updates) |
0x35C | 0x4 | signed int | Base Version (system/title updates) |
0x360 | 0x4 | unsigned int | Title ID |
0x364 | 0x1 | byte | Platform (xbox/gfwl?) |
0x365 | 0x1 | byte | Executable Type |
0x366 | 0x1 | byte | Disc Number |
0x367 | 0x1 | byte | Disc In Set |
0x368 | 0x4 | unsigned int | Save Game ID |
0x36C | 0x5 | bytes | Console ID |
0x371 | 0x8 | bytes | Profile ID |
0x379 | 0x1 | byte | Volume Descriptor Structure Size (usually 0x24) |
0x37A | Volume Descriptor Structure Size - 1 | structure | Volume Descriptor |
0x379 + Volume Descriptor Structure Size | 0x4 | signed int | Data File Count |
0x37D + Volume Descriptor Structure Size | 0x8 | signed long | Data File Combined Size |
0x385 + Volume Descriptor Structure Size | 0x8 | bytes | Reserved |
0x38D + Volume Descriptor Structure Size | 0x4C | bytes | Padding |
0x3D9 + Volume Descriptor Structure Size | 0x14 | bytes | Device ID |
0x3ED + Volume Descriptor Structure Size | 0x900 (each 0x80 = different locale) | unicode string | Display Name |
0xCED + Volume Descriptor Structure Size | 0x900 (each 0x80 = different locale) | unicode string | Display Description |
0x15ED + Volume Descriptor Structure Size | 0x80 | unicode string | Publisher Name |
0x166D + Volume Descriptor Structure Size | 0x80 | unicode string | Title Name |
0x16ED + Volume Descriptor Structure Size | 0x1 | byte | Transfer Flags (see below) |
0x16EE + Volume Descriptor Structure Size | 0x4 | signed int | Thumbnail Image Size |
0x16F2 + Volume Descriptor Structure Size | 0x4 | signed int | Title Thumbnail Image Size |
0x16F6 + Volume Descriptor Structure Size | 0x4000 (thumbnail size) | image | Thumbnail Image |
0x56F6 + Volume Descriptor Structure Size | 0x4000 (title thumbnail size) | image | Title Thumbnail Image |
Version 2
If the Metadata Version field is set to 2, the format is slightly changed:
Offset | Length | Type | Information |
---|---|---|---|
0x38D + Volume Descriptor Structure Size | 0x10 | bytes | Series ID |
0x39D + Volume Descriptor Structure Size | 0x10 | bytes | Season ID |
0x3AD + Volume Descriptor Structure Size | 0x2 | signed short | Season Number |
0x3B1 + Volume Descriptor Structure Size | 0x2 | signed short | Episode Number |
0x3B3 + Volume Descriptor Structure Size | 0x28 | bytes | Padding |
0x16ED + Volume Descriptor Structure Size | 0x3D00 (thumbnail size) | image | Thumbnail Image |
0x53F6 + Volume Descriptor Structure Size | 0x300 (each 0x80 = different locale) | image | Additional Display Names |
0x56F6 + Volume Descriptor Structure Size | 0x3D00 (title thumbnail size) | image | Title Thumbnail Image |
0x93F6 + Volume Descriptor Structure Size | 0x300 (each 0x80 = different locale) | image | Additional Display Descriptions |
License Entries
For every entry in the license data field:
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x8 | signed long | License ID (XUID / PUID / console id) |
0x8 | 0x4 | signed int | License Bits |
0xC | 0x4 | signed int | License Flags |
Content Types
Value | Description |
---|---|
0xD0000 | Arcade Title |
0x9000 | Avatar Item |
0x40000 | Cache File |
0x2000000 | Community Game |
0x80000 | Game Demo |
0x20000 | Gamer Picture |
0xA0000 | Game Title |
0xC0000 | Game Trailer |
0x400000 | Game Video |
0x4000 | Installed Game |
0xB0000 | Installer |
0x2000 | IPTV Pause Buffer |
0xF0000 | License Store |
0x2 | Marketplace Content |
0x100000 | Movie |
0x300000 | Music Video |
0x500000 | Podcast Video |
0x10000 | Profile |
0x3 | Publisher |
0x1 | Saved Game |
0x50000 | Storage Download |
0x30000 | Theme |
0x200000 | TV |
0x90000 | Video |
0x600000 | Viral Video |
0x70000 | Xbox Download |
0x5000 | Xbox Original Game |
0x60000 | Xbox Saved Game |
0x1000 | Xbox 360 Title |
0x5000 | Xbox Title |
0xE0000 | XNA |
Transfer Flags
Value | Description |
---|---|
0x00 | DeviceID and ProfileID Transfer |
0x20 | Move Only Transfer |
0x40 | DeviceID Transfer |
0x80 | ProfileID Transfer |
0xC0 | None |
Tools
An (old) tool (Python 2.5 required) to analyze and extract these archive files is available at extract360.py (2008-08-03, 23056 bytes, MD5 = 3aa517c83d01c618927b78d0ca665d02)
wxPirs 1.1 can extract from LIVE/PIRS files fine, but as it doesn't use hash tables properly it doesn't work well with CON files.
A newer tool was released by DJ Shepherd called Le Fluffie, which can create and extract from CON/LIVE/PIRS files (but it has some problems with creation, some prefer to use XLAST)
XLAST inside the Xbox 360 SDK can create LIVE/PIRS packages, but it is illegal to share it.