Skip to main content

Firmware format

Overview

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 viersion number 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).