Endian order: little endian
FILE HEADER
| Type | Count | Description |
|---|---|---|
| uint32 | 0x1 | Signature string length = 0x0b |
| char | 0xb | Signature string = "UBI_BF_SIG" + 0x0 |
| uint32 | 0x1 | file format version? = 0x1 |
| uint32 | 0x1 | unknown = 0x0 |
| DIR | 0x1 | Root directory entry |
| DATA | ?? | Determined by file entries. can actually contain "slack space" |
DIR structure
| TYPE | Count | Description |
|---|---|---|
| uint8 | 0x01 | Number of subdirectories (call this "sd") |
| DIRINFO | sd | Directory information structures for all subdirectories |
| uint32 | 0x01 | Number of files in this directory (call this "fc") |
| FILEINFO | fc | File information structures |
DIRINFO structure
| Type | Count | Description |
|---|---|---|
| uint32 | 0x01 | Directory name length (dnl) |
| char | dnl | Directory name (null terminated, counted in dnl) |
| DIR | 0x01 | Directory contents struct |
FILEINFO structure
| Type | Count | Description |
|---|---|---|
| uint32 | 0x01 | File name length (fnl) |
| char | fnl | File name (null terminated, counted in fnl) |
| uint32 | 0x01 | file length |
| uint32 | 0x01 | file offset (from start of m4b file) |
An implementation of this format can be found here.