Files.db


 * Path: /sce_pfs/files.db
 * Size: variable

files.db structure
Warning : This structure is still uncertain/not complete

files.db is organized in blocks of 1024 bytes, the first block is the header of the file, its structure is still unknown.

Each block contains 4 sub-blocks :


 * Block header
 * Filenames (9 entries)
 * File informations (9 entries)
 * Hashes block?

Note : Numbers are stored in little-endian.

Block header
0x10 bytes wide, structure is uncertain.

typedef struct { u32 id; u32 type; u32 nfiles; u32 unk1; } block_header;

id :


 * 0xYY : Block identification ? generally 0x02
 * 0xffffffff : ???

type


 * 0x00 : The block will describe files and parent directories.
 * 0x01 : ??? Ignore, changes structure of the current block.

nfiles :

One block describes up to 9 files, although it can be less, nfiles is the number of files described in the current block.

unk1 :

Padding ?

Filenames (9 entries)
9 entries of 72 bytes, describing filename and parent directory.

typedef struct { u32 idx; char filename[68]; } fname; idx :

Describes parent directory of current file entry. (Cf. File informations block)

filename :

Filename of current file entry (68 bytes, null terminated).

File informations (9 entries)
9 entries of 0x10 bytes.

typedef struct { u32 idx; u16 type; u16 unk1; u32 size; u32 unk2; } finfo; idx :

Used to retrieve parent directory for filenames block, each file entry has its own index, 0 is for root.

Example :

type :


 * 0x1 = normal file
 * 0x8000 = dir (directory)
 * 0x4006 = nenc (non encrypted file)
 * 0x6 = sys (system file)

unk1 :

???

size :

Size of the current file.

unk2 :

Padding ?

Tools
ListDirVita is a simple parser for files.db (Still WIP)