Skip to content
Ian Burgwin edited this page Jan 5, 2018 · 15 revisions

FST, "Filesystem Table", is the format that Wii U title contents are stored in. Used for digital and disc contents.

Some information from the WiiUBrew FST page, some from cdecrypt with assistance from MarcusD. Numbers are big-endian.

Python parser and extractor can be found at wiiu_extract.py. Decryptor can be found at wiiu_decrypt.py.

FST contents

Header

Offset Size Description
0x0 0x4 'FST\0' magic
0x4 0x4 Unknown, usually 0x20 (size of entries in secondary header). Seen as 0x1 for things like OSv10.
0x8 0x4 Amount of entries in secondary header
0xC 0x14 Unused

Secondary header

Lists contents. Index corresponds with an entry in the TMD content chunk records.

Offset Size Description
0x0 0x4 Offset in 0x8000(32768) sectors (e.g. 0x2 = 0x10000). Probably only useful for disc contents. Some titles like OSv10 don't seem to use this.
0x4 0x4 Related to size - TODO: put more details here
0x8 0x8 Title ID; only seems to be used for contents containing files in /content.
0x10 0x4 Group ID; not always used. Values can be 0x400, part of the Title ID(tid >> 8 & 0xFFFF), or something else.
0x14 0x2 Flags
  • 0x000: first content with FST header (most of the time)
  • 0x100: content without hash tree
  • 0x200: content with hash tree
0x16 0xA Unused(all zero)

Group ID was seen to be 0x10000 in Nintendo Land disc FST, despite tid being 0005000010102000. System titles seem to be limited to nothing/0x400.

File entries header

Offset Size Description
0x0 0x8 Unknown, probably unused
0x8 0x4 Total file entries
0xC 0x4 Unknown, probably unused

File entries

Offset Size Description
0x0 0x1 Type with bitmasks:
  • 0x00: file
  • 0x01: directory
  • 0x02: special file used for Wii VC (/content/*.nfs) contents
  • 0x80: deleted item, used for title updates that remove files
0x1 0x3 Name offset, relative to start of name entry table offset
0x4 0x4 File offset, in sectors of 0x20 (e.g. 0x2 = 0x40), or bytes if (flags & 4). Non-inclusive of content hash tree.
0x8 0x4 File size, in bytes
0xC 0x2 File flags with bitmasks:
  • 0x000: content doesn't have hash tree, used for items in /code
  • 0x004: file offset is in bytes
  • 0x040: content has hash tree, used for items in /meta
  • 0x400: content has hash tree, used for items in /content
0xE 0x2 Content index; corresponds with an entry in the TMD content chunk records

Name entry table

Null-terminated item names. Offsets are found in file entries in the above header.

Hash tree

WIP. it sucks.