Trophy00.trp

From PS4 Developer wiki
Jump to navigation Jump to search

Background

This is used for storage of trophy packs, simular to PS3

PS3 side references

Structure

Note: This isn't complete.

typedef unsigned char u8;
typedef unsigned long int u32;
typedef unsigned long long int u64;
typedef struct {
	u32 magic; //"Ü¢M " (0xDCA24D00)
	u32 version; //#3 on ps4 (1: PS3, 2: PS3 & PS VITA)
	u64 file_size; //size of full trp file
	u32 entry_num; //num entries
	u32 entry_size; // size of entry
	u32 dev_flag; // 1: dev
	u8 digest[20]; //sha1 hash
	u32 key_index;
	u8 padding[0x2C];
} trp_header;
typedef struct{
	signed char entry_name[0x20];
	u64 entry_pos; //relative to &buffer
	u64 entry_len;
	u32 flag; //3 on some, 0 on others, could be flags or an enum to determine if encrypted or not?
	u8 padding[0xC];
} trp_entry;

Image of Header + Entries: http://puu.sh/7uOAN/1c17920d61.png

Image of Encrypted Entry Data: http://puu.sh/7uOEl/6eb00e8a19.png

Entries

Seemes to be 2 types of entries. Encrypted and Non - Encrypted.

Non-Encrypted files seem to be just png image files. Encrypted files seem to be just ESFM files, (encrypted container for trophy.sfm files)

Each ESFM file in the .trp file contain the same first 512 bits.

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  0B 29 DE DE CB D5 62 61 C6 5C 75 24 9B 0C A4 08  .)ÞÞËÕbaÆ\u$›.¤.
00000010  0E 40 AE C1 7C 92 1F 1E 6D D7 B6 CC 59 2D DB B8  .@®Á|’..m׶ÌY-Û¸
00000020  5C 26 E7 9E 3F F6 54 9E A2 E4 94 2F 58 7F D6 9D  \&çž?öTž¢ä”/X.Ö.
00000030  CD 96 49 16 B7 9D 1C F4 DE D9 A7 DD FB A0 1A 68  Í–I.·..ôÞÙ§Ýû .h

ESFM is just an encrypted XML format. It consists of IV of 0x10 bytes and the data itself. A key is generated by encrypting NP communication ID with keygen ERK/keygen IV (stored inside system library) using AES-CBC-128. Then you can decrypt data using this key and IV from the header.

NP Com ID for above Buffer: NPWR05506_00
ESFM IV: 0x0 - 0x10