Logitech dongle C-U0008
Hardware
Texas Instruments CC2544 based dongle
USB descriptors from RQR24.10 / RQR24.11 and the bootloaders listed below:
Common
bcdUSB : 0x0200
Device class : 0x00 (defined per interface)
Manufacturer : Logitech
Serial number : none (iSerialNumber = 0)
Configurations : 1, bus-powered, 98 mA declared
Application
VID:PID : 046d:c52b
Product : USB Receiver
bcdDevice : 0x2410 / 0x2411
EP0 max packet : 32 bytes
Configuration : 84 bytes, 3 interfaces, remote wakeup
Interface 0 : HID boot keyboard (03/01/01), interrupt IN 0x81, 8 bytes, 8 ms
Interface 1 : HID boot mouse (03/01/02), interrupt IN 0x82, 8 bytes, 2 ms
Interface 2 : HID++ / DJ (03/00/00), interrupt IN 0x83, 32 bytes, 2 ms
HID report descriptors : 59 / 148 / 98 bytes (interfaces 0 / 1 / 2)
Bootloader (BOT03.01 / BOT03.02)
VID:PID : 046d:aaac
Product : USB BootLoader
bcdDevice : 0x0301 / 0x0302
EP0 max packet : 32 bytes
Configuration : 34 bytes, 1 interface, no remote wakeup
Interface 0 : HID (03/00/00), interrupt IN 0x81, 32 bytes, 1 ms
HID report descriptor : 25 bytes
Firmwares
Downloads
RQR24.03_B0027_0x0400.binRQR24.05_B0029_0x0400.binRQR24.06_B0030_0x0400.binRQR24.07_B0030_0x0400.binRQR24.10_B0036_0x0400.binRQR24.11_B0036_0x0400.bin
Bootloaders
RQR24_bootloader_01B0008_0x0000.bin&RQR24_bootloader_01B0008_0x7400.bin- current bootloader with CRC validationRQR24_bootloader_02B0009_0x0000.bin&RQR24_bootloader_02B0009_0x6c00.bin- current bootloader with RSA signature validation
Remarks
RQR24.07&RQR24.11are compatible with bootloaders >=02B0009(signature needed).RQR24.03,RQR24.05,RQR24.06&RQR24.10are compatible with bootloaders <=01B0008.RQR24.06/RQR24.07andRQR24.10/RQR24.11are paired releases for the two bootloader layouts; the signed application area is0x0800bytes smaller.- Each pair has 44 changed bytes in the common application range, excluding the trailer: four version bytes and forty bytes relocating the NVM pages by
-0x0800(including XDATA aliases and erase-page numbers). - Application binaries start at
0x0400; the address suffix identifies file offset zero. They include the application area and CRC, without receiver pairing data. - The
.07/.11binaries have their final four marker bytes set toff ff ff ff, as required by the signature. They can be sent to the bootloader and verified directly with OpenSSL (seeNotes). - bootloader
01B0008comes from the official.03/.05/.06HEX files. Its upper segment stops at0x7fef; the missing sixteen flash-protection bytes have not been filled. - bootloader
02B0009was recovered from the receiver runningRQR24.11_B0036. Two reads matched, and its application matched the official update. The signed.07/.11updates do not include this bootloader. - Bootloader segments retain their original bytes and version fields.
Digests
SHA2-256(RQR24.03_B0027_0x0400.bin) = ac55870c927962e6eea2a830a48d757f187ef5d0f80e8931ffb90a7ef968705b
SHA2-256(RQR24.05_B0029_0x0400.bin) = a7558316c0c14b845b2adceeda41145084884d4140b618594afad0ad63bfa53e
SHA2-256(RQR24.06_B0030_0x0400.bin) = 983b2630a174730ca5628b631f993afa2dae7aeb472f38659b8eb77f0a91769b
SHA2-256(RQR24.07_B0030_0x0400.bin) = 3baad7a9c5bf5f2b9390e2144916aafbcb436c14ce2cec47391aaf3baa44586f
SHA2-256(RQR24.07_B0030_sign.bin) = e0540d4600f250e0c0c753d729ad6dc34db3e7f76073b7d1dc6a86ff03fe0b20
SHA2-256(RQR24.07_B0030_sign.rev.bin) = 844e17338313280b368ca20f4f702adc568b73bd26ad9ba2dbc0111ef28df1c9
SHA2-256(RQR24.10_B0036_0x0400.bin) = 08370d0147544865218845f791bfdd38213ee3936721f76e511f9ecad85d114b
SHA2-256(RQR24.11_B0036_0x0400.bin) = 4e75f873551f3f5f9f2164ade2daf98638e372f775cb4848ed736e8b86b3b939
SHA2-256(RQR24.11_B0036_sign.bin) = bdf476396827b1f671388bff6da34a9cad423dbdaed719084535dbe474938d48
SHA2-256(RQR24.11_B0036_sign.rev.bin) = 5cd6710674ee115855697f3153e97de633c0545070d15dc2f64e3722721cb8f9
SHA2-256(RQR24_bootloader_01B0008_0x0000.bin) = bc97cab123c7d44c4a883935d818d46e134b9e8caf70b43b14c1f9be2a25df43
SHA2-256(RQR24_bootloader_01B0008_0x7400.bin) = b9741cf7f6387e8ea3cfba37404ff891b2a1d1789dab0fd593fe540c8a972671
SHA2-256(RQR24_bootloader_02B0009_0x0000.bin) = ef47d8abf608840824a6ea427dd3b94254aa72351382bad7749be46c0e8e2d44
SHA2-256(RQR24_bootloader_02B0009_0x6c00.bin) = 8ebb707679cb96f746b263fac9cdd1ffc26e90769c9737b15536355706cb0318
Useful commands
To extract the application and bootloader segments from an Intel HEX file:
> srec_cat -o RQR24.06_B0030_0x0400.bin -binary RQR24.06_B0030.hex -intel -crop 0x0400 0x6c00 -offset -0x0400
> srec_cat -o RQR24_bootloader_01B0008_0x0000.bin -binary RQR24.06_B0030.hex -intel -crop 0x0000 0x0400
> srec_cat -o RQR24_bootloader_01B0008_0x7400.bin -binary RQR24.06_B0030.hex -intel -crop 0x7400 0x7ff0 -offset -0x7400
For .shex files, separate type 0x00 application records from type 0xfd signature records before conversion. Signature addresses are not program-memory addresses.
Check CRC
The application stores a CRC-16/CCITT-FALSE (poly = 0x1021, init = 0xffff) in little-endian order, followed by the four-byte validation marker. The calculation starts at 0x0400 and excludes these final six bytes. The CRC is at 0x6bfa-0x6bfb, or 0x63fa-0x63fb for the smaller RQR24.07 / RQR24.11 images.
The signed releases retain this CRC; its two bytes are included in the RSA/SHA-256 verification. Recalculated values match the stored bytes in all six application downloads:
| Firmware | CRC16 | Stored bytes |
|---|---|---|
RQR24.03_B0027 |
f8c4 |
c4 f8 |
RQR24.05_B0029 |
10a8 |
a8 10 |
RQR24.06_B0030 |
d39a |
9a d3 |
RQR24.07_B0030 |
9ad7 |
d7 9a |
RQR24.10_B0036 |
52c2 |
c2 52 |
RQR24.11_B0036 |
1d49 |
49 1d |
Check signature
> openssl pkeyutl -verify -inkey logitech_c-u0007_pubkey.der -pubin -rawin -digest sha256 -sigfile RQR24.11_B0036_sign.rev.bin -in RQR24.11_B0036_0x0400.bin
Signature Verified Successfully
or if firmware hash is wanted:
> openssl pkeyutl -verifyrecover -inkey logitech_c-u0007_pubkey.der -pubin -in RQR24.11_B0036_sign.rev.bin | openssl asn1parse -inform DER -i
0:d=0 hl=2 l= 49 cons: SEQUENCE
2:d=1 hl=2 l= 13 cons: SEQUENCE
4:d=2 hl=2 l= 9 prim: OBJECT :sha256
15:d=2 hl=2 l= 0 prim: NULL
17:d=1 hl=2 l= 32 prim: OCTET STRING [HEX DUMP]:4E75F873551F3F5F9F2164ADE2DAF98638E372F775CB4848ED736E8B86B3B939
> openssl dgst -sha256 RQR24.11_B0036_0x0400.bin
SHA2-256(RQR24.11_B0036_0x0400.bin)= 4e75f873551f3f5f9f2164ade2daf98638e372f775cb4848ed736e8b86b3b939
Notes
BOT03.01_B0008
Firmware memory : 0x0400 (0x6800)
NVM page 0 : 0x6c00 (0x0400)
NVM page 1 : 0x7000 (0x0400)
Bootloader low segment : 0x0000 (0x0400)
Bootloader upper dump : 0x7400 (0x0bf0)
Flash-protection bytes : 0x7ff0-0x7fff (not supplied)
Update protection : CRC-16/CCITT-FALSE
poly = 0x1021
init = 0xffff
Covered addresses : 0x0400-0x6bf9
CRC16 address : 0x6bfa-0x6bfb (little-endian)
Validation marker : 0x6bfc-0x6bff (fe c0 ad de)
BOT03.02_B0009
Firmware memory : 0x0400 (0x6000)
NVM page 0 : 0x6400 (0x0400)
NVM page 1 : 0x6800 (0x0400)
Bootloader low segment : 0x0000 (0x0400)
Bootloader upper area : 0x6c00 (0x1400)
Flash-protection bytes : 0x7ff0-0x7fff (included)
Update protection : PKCS#1 v1.5 - RSA 2048/SHA256
Covered addresses : 0x0400-0x63ff
CRC16 address : 0x63fa-0x63fb (little-endian, included in SHA-256)
Validation marker : 0x63fc-0x63ff (ff ff ff ff during verification)
N(le) = 0xde8ec27ec39e5f183515261c462beddf9111d7e5455cb984c04c9ee876d61f49
6eeaea0f2dd1a45591b8d68174f4c5c1cc5e83a0934c870cc7cad0cd2ecce73d
57235b7563fdf5b9295a46d41d94f9205c63ad33a6bc5842e6709ea78e00c198
9e219bf03df76941f9a63d66959812e9ceca3400535e4dc1441d182e4fbb2662
1ec44aa3be55295337c34ec0395fcdb2692716fc60225e77f5559dba66f750e0
c90ffec5ad8f096d3a9553cebdd8f0b9be86f8479c0475133e38eb6a0df162c8
2e89ed83d43ae02a88c05ddbbb63f2d738777466d81d226a36158d4eb72a1591
d921c91084b6484e512130b02c36bae22f8b3a92d3c722e81dbb404ead56ff69
e = 0x17 (23)
Both layouts use two alternating 1 KiB NVM pages.
The RSA public key is the same as the Nordic C-U0007. Signature bytes are stored little-endian in the .shex type 0xfd records; use the _sign.rev.bin files with OpenSSL.
When programming the last 128-byte application block at 0x6380, bootloader 02B0009 forces the four marker bytes to 0xff (code at 0x6ea1-0x6ebe). It writes fe c0 ad de at 0x63fc after successful verification (code at 0x6f48-0x6f55).
The downloaded .07 / .11 binaries already contain these four ff bytes, preserving the size and CRC. They produce the same staged application in the bootloader and match the signatures directly:
RQR24.11_B0036, final six bytes
Official update : 49 1d fe c0 ad de
Download : 49 1d ff ff ff ff
CRC marker
Receiver used here: RQR24.11_B0036 / bootloader 02B0009.
The .10 / .11 release notes list the CVE-2019-13055 fix and restrictions on keystrokes emitted by pointing devices.
Downloads
logitech_c-u0007_pubkey.derRQR24.07_B0030_sign.bin- original byte orderRQR24.07_B0030_sign.rev.bin- for OpenSSLRQR24.11_B0036_sign.bin- original byte orderRQR24.11_B0036_sign.rev.bin- for OpenSSL
Channels
Frequency is: 2400 MHz + channel
Firmware channel table
Literal table at code address 0x0bfe in RQR24.11_B0036.
5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59, 62, 65, 68, 71, 74
Devices under test
Same device subset as in the Nordic tests.
5, 8, 14, 17, 32, 35, 41, 44, 62, 65, 71, 74
Pairwise hop table
Observed device hopping from the Nordic tests; not extracted from the TI firmware.
5 <==> 14 29 <==> 38 59 <==> 68
8 <==> 17 32 <==> 41 47 <==> 56 62 <==> 71
11 <==> 20 35 <==> 44 65 <==> 74
41 <=== 50
44 <=== 53
For that device subset, minor interference hops are:
5 <==> 14 32 <==> 41 62 <==> 71
8 <==> 17 35 <==> 44 65 <==> 74
Scan sequence
Scanner sequence for that device subset; not a literal sequence found in the TI binary.
5 -> 32 -> 62 -> 8 -> 35 -> 65 -> 14 -> 41 -> 71 -> 17 -> 44 -> 74 (-> 5 -> ...)