IPAK Files: Difference between revisions

From COD Engine Research
Red-EyeX32 (talk | contribs)
Red-EyeX32 (talk | contribs)
Line 48: Line 48:


The compression method is just the basic LZO1X compression.
The compression method is just the basic LZO1X compression.
The same as compression used on the SAVEGAME.SVG file for the save data.


PC:
PC:

Revision as of 18:03, 27 April 2014

IPAK's, implemented in Black Ops 2, are basically an archive of compressed image data.

Structure

Thanks to kokole for the structure.

struct ipak_header_t
{
	char identifier[4]; // "IPAK"
	unsigned int version; //0x50000
	unsigned int fileSize;
	unsigned int sectionCount; //from what I've seen it's always 2 (1 = info 2 = data)
};

struct section_t
{
	unsigned int sectionIndex; //enum 0x1 = info, 0x2 = data
	unsigned int sectionStart;
	unsigned int sectionLength;
	unsigned int numOfEntries; // each entry is a compressed iwi file in section 2 and entry info in section 1
};

struct entry_info_t
{
	u32 hash; // checksum, type?
	u32 id;
	u32 entryStart; // location of compressed iwi file
	u32 entryLength;
}; // 16 bytes

struct entry_t
{
	entry_header_t header;
	block_info_t blocks[31]; //they can be null, actual number of blocks is header->blockCount;
};

struct entry_header_t
{
	int blockCount; // actual blockcount = *(byte*)&blockCount[0];
};

struct block_info_t
{			//enum 0x0 = plaintext, 0x1 = encrypted
	unsigned int info; //(depending on endian) blockSize = (info & 0xFFFF); , compressedFlag = info >> 24;
}; // 4 bytes

Decompression Methods

The compression method is just the basic LZO1X compression.

PC:

http://pastebin.com/vd9t2U2B

PS3:

1.00 t6mp_ps3f.self - 0x6AEA78

XBOX:

tu9 default_mp.xex - 0x828E5090
tu13 default_mp.xex - 0x828E6308