Firmware format
The firmware file is made up of the following components:
Component | Size description | Example | Description |
---|---|---|---|
Firmware header | Defined at offset 0x0050 |
0x00000080 (128 bytes) |
|
Module headers | Module header size (defined at offset 0x0054 ), multiplied by number of modules (defined at offset 0x007C ) |
0x00000040 (64 bytes) * 0x0000004F (79 modules) = 0x000013C0 (5056 bytes) |
|
Data | TBC |
Firmware header
The firmware header is located at the very beginning of the file. Its length is defined by the 32 bit unsigned integer (big endian) located at offset 0x0050
. For example: 0x00000080
(128 bytes).
The format for the firmware header is described below:
Size (byte) | Type | Description | Example |
---|---|---|---|
16 | Byte array | Identifier | SkOsMo5 fIrMwArE |
32 | Byte array | Signature | Not used |
16 | Byte array | MD5 of firmware header + module headers | 90 2D F5 21 17 F8 1F E7 8B 4D 68 27 CC B1 87 A4 |
16 | Byte array | A random sequence | 8C 6C D4 ED 19 B2 74 E9 3E 49 AD EB F6 55 01 A3 |
4 | Unsigned BE Int | Length of the entire firmware header | 0x00000080 (128 bytes) |
4 | Unsigned BE Int | Length of each module header | 0x00000040 (64 bytes) |
4 | Unsigned BE Int | Length of entire file | 0x0043153D (4396349 bytes) |
32 | Byte array | Firmware |
7.6.2f |
4 | Unsigned BE Int | Number of modules present in the firmware | 0x0000004F (79 modules) |
Module headers
There are likely multiple modules in the firmware file. The number of modules is defined at offset 0x007C
in the firmware header. For example: 0x0000004F
(79 modules).
Each module has a module header. These are of a length defined at offset 0x0054
in the firmware header. For example: 0x00000040
(64 bytes). Each module header is concatenated in order, directly after the firmware header (in this case, from offset 0x0080
).
The format for each module header is shown below:
Size (byte) | Type | Description | Example |
---|---|---|---|
4 | Byte array | Unknown | |
4 | Unsigned BE Int | Length of module data | 0x0000778B (30,603 bytes) |
4 | Unsigned BE Int | Offset to module data from start of file | 0x00001440 (5184 bytes) |
4 | Byte array | Unknown | |
4 | Byte array | Unknown | |
4 | Byte array | Unknown | |
4 | Byte array | Unknown | |
4 | Byte array | Unknown | |
32 | Padding | Zero padding |