Skip to main content

Firmware format

Overview

The firmware file is made up of the following components:

ComponentSize descriptionExampleDescription
Firmware headerDefined at offset 0x00500x00000080 (128 bytes)
Module headersModule header size (defined at offset 0x0054), multiplied by number of modules (defined at offset 0x007C)0x00000040 (64 bytes) * 0x0000004F (79 modules) = 0x000013C0 (5056 bytes)
DataTBC

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)TypeDescriptionExample
16Byte arrayIdentifierSkOsMo5 fIrMwArE
32Byte arraySignatureNot used
16Byte arrayMD5 of firmware header + module headers90 2D F5 21 17 F8 1F E7 8B 4D 68 27 CC B1 87 A4
16Byte arrayA random sequence8C 6C D4 ED 19 B2 74 E9 3E 49 AD EB F6 55 01 A3
4Unsigned BE IntLength of the entire firmware header0x00000080 (128 bytes)
4Unsigned BE IntLength of each module header0x00000040 (64 bytes)
4Unsigned BE IntLength of entire file0x0043153D (4396349 bytes)
32Byte arrayFirmware viersion number7.6.2f
4Unsigned BE IntNumber of modules present in the firmware0x0000004F (79 modules)

Module headerheaders

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