Denon Reverse Engineering Help

Unsigned Firmware Layout

The unsigned firmwares updates are essentially device trees that contain the binary data.

For example, fdtdump <image> on PRIMEGO-4.1.0-Update.img outputs:

/dts-v1/; // magic: 0xd00dfeed // totalsize: 0x8d01113 (147853587) // off_dt_struct: 0x38 // off_dt_strings: 0x8d00d2c // off_mem_rsvmap: 0x28 // version: 17 // last_comp_version: 16 // boot_cpuid_phys: 0x0 // size_dt_strings: 0x67 // size_dt_struct: 0x8d00cf4 / { timestamp = <0x66ece023>; description = "JP11 upgrade image"; compatible = "inmusic,jp11"; inmusic,devices = <0x15e4d00c>; inmusic,version = "4.1.0"; images { splash { description = "Splash screen"; data = <0xfd377a58 0x5a000004 0xe6d6b446 0x04c08929 ...> partition = "splash"; compression = "xz"; hash { value = <0x4faf3337 0xf95a722d 0xb1b3acf9 0xc3b9b835 0x08a8e9ad>; algo = "sha1"; }; }; recoverysplash { description = "Update mode splash screen"; data = <0xfd377a58 0x5a000004 0xe6d6b446 0x04c0be2a ...>; partition = "recoverysplash"; compression = "xz"; hash { value = <0xf48fe31c 0xa9d64549 0xc9bf418e 0xd2f8867b 0x2d179bce>; algo = "sha1"; }; }; rootfs { description = "Root filesystem"; data = <0xfd377a58 0x5a000004 0xe6d6b446 0x04c08ddc ...>; partition = "rootfs"; compression = "xz"; hash { value = <0xa4407de0 0xfd5ba759 0x5e1bf541 0x317844a5 0xe591ab1f>; algo = "sha1"; }; }; }; };

Metadata

  • Timestamp (timestamp): The creation or release timestamp of the firmware.

  • Description (description): A brief description of the firmware image.

  • Compatibility (compatible): Specifies compatible devices.

  • Device ID (devices): An identifier for the target device(s).

  • Firmware Version (version): Indicates the firmware version.

Images

Each firmware may contain multiple images, each with specific properties:

  • Image Name (images->[image_name]): Unique identifier or name of the image.

    • Description (description): Describes the purpose of the image.

    • Data (data): Binary data for the image, represented as a series of hexadecimal values.

    • Partition (partition): Indicates the target partition for this image (e.g., rootfs, splash, recoverysplash).

    • Compression (compression): Specifies the compression type used on this image (e.g., xz).

    • Hash (hash): Contains hash information for data integrity:

      • Value (hash->value): The hash value used to verify the data.

      • Algorithm (hash->algo): The hashing algorithm used (e.g., sha1).

Last modified: 11 November 2024