0
$\begingroup$

I have an unbranded LED lamp with a remote control. I would like to reverse the protocol of the remote but unfortunately I can't create my own packages. The frequency of the remote transceiver is 2.4GHz (PA = 6dBm, channel = 1) so I used an NRF24 for collecting the frames from a button. When I 'replay' the collected messages the lamp reacts as expected.
As I observed the preamble is 5 bytes long and in the end of packet there is a 2 bytes long hash, probably a CRC16. (I think it should be some kind of hash because one bit change in the packet generates totally different value in last 2 bytes position.) Unfortunately I couldn't identify the type of transceiver so I cannot figure out the packet format. I tried to reverse the hash with various methods but without luck.

Do you have any idea what is the hash algorithm?

There are some test vectors from the same button.

aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  00 21  00 60 1f 55  57  84 c1
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  00 e1  00 60 1f 55  56  c4 cc
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  01 21  00 60 1f 55  56  86 95
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  01 e1  00 60 1f 55  55  c4 de
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  02 41  00 60 1f 55  55  75 64
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  02 61  00 60 1f 55  55  40 6c
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  02 81  00 60 1f 55  55  25 48
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  02 c1  00 60 1f 55  54  f5 6d
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  02 c1  00 60 1f 55  54  f5 6d
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  03 61  00 60 1f 55  54  42 38
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  04 01  00 60 1f 55  53  b8 9b
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  04 01  00 60 1f 55  53  b8 9b
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  04 21  00 60 1f 55  53  8d 93
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  04 41  00 60 1f 55  53  78 9f
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  04 61  00 60 1f 55  53  4d 97
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  04 61  00 60 1f 55  53  4d 97
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  04 81  00 60 1f 55  53  28 b3
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  04 81  00 60 1f 55  53  28 b3
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  05 01  00 60 1f 55  52  ba cf
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  05 81  00 60 1f 55  52  2a e7
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  05 a1  00 60 1f 55  52  1f ef
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  06 61  00 60 1f 55  51  49 3e
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  06 61  00 60 1f 55  51  49 3e
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  07 21  00 60 1f 55  50  8b 6e
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  07 a1  00 60 1f 55  50  1b 46
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  07 c1  00 60 1f 55  4f  e3 88
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  08 e1  00 60 1f 55  4e  c4 58
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  08 e1  00 60 1f 55  4e  c4 58
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  08 e1  00 60 1f 55  4e  c4 58
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  08 01  00 60 1f 55  4f  b1 5d
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  08 61  00 60 1f 55  4f  44 51
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  09 41  00 60 1f 55  4e  73 0d
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  09 21  00 60 1f 55  4e  86 01
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0a 41  00 60 1f 55  4d  75 f0
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0a 61  00 60 1f 55  4d  40 f8
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0a 81  00 60 1f 55  4d  25 dc
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0b 01  00 60 1f 55  4c  b7 a0
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0b 21  00 60 1f 55  4c  82 a8
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0b 41  00 60 1f 55  4c  77 a4
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0b 41  00 60 1f 55  4c  77 a4
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0b 61  00 60 1f 55  4c  42 ac
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0c 21  00 60 1f 55  4b  8d 07
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0c 61  00 60 1f 55  4b  4d 03
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0c 61  00 60 1f 55  4b  4d 03
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0c 81  00 60 1f 55  4b  28 27
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0c c1  00 60 1f 55  4a  f8 02
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0c c1  00 60 1f 55  4a  f8 02
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0c e1  00 60 1f 55  4a  cd 0a
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0c e1  00 60 1f 55  4a  cd 0a
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0d 01  00 60 1f 55  4a  ba 5b
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0d 81  00 60 1f 55  4a  2a 73
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0e 01  00 60 1f 55  49  bc a6
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0e 21  00 60 1f 55  49  89 ae
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0e 61  00 60 1f 55  49  49 aa
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0e 81  00 60 1f 55  49  2c 8e
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0e a1  00 60 1f 55  49  19 86
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0e c1  00 60 1f 55  48  fc ab
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0e e1  00 60 1f 55  48  c9 a3
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0f 01  00 60 1f 55  48  be f2
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0f 21  00 60 1f 55  48  8b fa
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0f 61  00 60 1f 55  48  4b fe
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0f 61  00 60 1f 55  48  4b fe
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0f 61  00 60 1f 55  48  4b fe
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0f a1  00 60 1f 55  48  1b d2
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0f c1  00 60 1f 55  47  f1 2d
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  0f c1  00 60 1f 55  47  f1 2d
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  10 01  00 60 1f 55  47  b6 87
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  10 21  00 60 1f 55  47  83 8f
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  10 21  00 60 1f 55  47  83 8f
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  10 41  00 60 1f 55  47  76 83
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  10 61  00 60 1f 55  47  43 8b
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  10 e1  00 60 1f 55  46  c3 82
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  10 e1  00 60 1f 55  46  c3 82
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  11 81  00 60 1f 55  46  24 fb
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  11 a1  00 60 1f 55  46  11 f3
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  11 a1  00 60 1f 55  46  11 f3
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  11 a1  00 60 1f 55  46  11 f3
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  11 e1  00 60 1f 55  45  c3 90
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  11 e1  00 60 1f 55  45  c3 90
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  12 41  00 60 1f 55  45  72 2a
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  12 41  00 60 1f 55  45  72 2a
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  12 61  00 60 1f 55  45  47 22
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  12 61  00 60 1f 55  45  47 22
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  12 c1  00 60 1f 55  44  f2 23
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  12 c1  00 60 1f 55  44  f2 23
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  13 21  00 60 1f 55  44  85 72
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  13 21  00 60 1f 55  44  85 72
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  13 21  00 60 1f 55  44  85 72
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  13 61  00 60 1f 55  44  45 76
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  13 81  00 60 1f 55  44  20 52
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  13 e1  00 60 1f 55  43  c3 b5
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  14 a1  00 60 1f 55  43  1a f5
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  14 e1  00 60 1f 55  42  ca d0
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  15 81  00 60 1f 55  42  2d a9
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  15 a1  00 60 1f 55  42  18 a1
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  16 61  00 60 1f 55  41  4e 70
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  16 a1  00 60 1f 55  41  1e 5c
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  16 c1  00 60 1f 55  40  fb 71
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  16 e1  00 60 1f 55  40  ce 79
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  18 01  00 60 1f 55  5f  b6 13
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  18 c1  00 60 1f 55  5e  f6 1e
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  19 81  00 60 1f 55  5e  24 6f
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  19 a1  00 60 1f 55  5e  11 67
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1a 01  00 60 1f 55  5d  b2 ba
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1a c1  00 60 1f 55  5c  f2 b7
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1b 21  00 60 1f 55  5c  85 e6
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1b 81  00 60 1f 55  5c  20 c6
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1c 01  00 60 1f 55  5b  bf 41
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1d 01  00 60 1f 55  5a  bd 15
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1d 81  00 60 1f 55  5a  2d 3d
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1d a1  00 60 1f 55  5a  18 35
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1e 41  00 60 1f 55  59  7b ec
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1e c1  00 60 1f 55  58  fb e5
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1f 21  00 60 1f 55  58  8c b4
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1f 41  00 60 1f 55  58  79 b8
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1f 61  00 60 1f 55  58  4c b0
aa aa aa aa aa 90 8e 7c 64 ce 20 33 b8 a0 26 3f c0  1f e1  00 60 1f 55  57  c3 6b

Edit by fgrieu: I reformatted the above for easier identification of those few bytes that change value. Applying the generic technique there, if see evidence that the thing is affine (as all CRCs are): it is easy to isolate blocks of four (or larger even number) of different lines such that one is the XOR of the others, and that allows prediction of the last two bytes for most lines. Two examples:

aaaaaaaaaa908e7c64ce2033b8a0263fc0 0241 00601f55 55 7564
aaaaaaaaaa908e7c64ce2033b8a0263fc0 0261 00601f55 55 406c
aaaaaaaaaa908e7c64ce2033b8a0263fc0 0401 00601f55 53 b89b
aaaaaaaaaa908e7c64ce2033b8a0263fc0 0421 00601f55 53 8d93

aaaaaaaaaa908e7c64ce2033b8a0263fc0 0441 00601f55 53 789f
aaaaaaaaaa908e7c64ce2033b8a0263fc0 0501 00601f55 52 bacf
aaaaaaaaaa908e7c64ce2033b8a0263fc0 0661 00601f55 51 493e
aaaaaaaaaa908e7c64ce2033b8a0263fc0 0721 00601f55 50 8b6e

Edit by fgrieu: Using Gaussian elimination, I verified that all the 93 given distinct lines are consistent with an affine function, and determined the influence on the (assumed) Frame Check Sequence (rightmost two bytes) of the 13 bits that vary in the rest of the frame. The whole data set is equivalent to (any) one of it lines, and the following short table telling the influence on the FCS of toggling each of the 13 bits:

byte  byte    FCS influence
index mask    (bytes 24 and 25)
 17   0x10    0x157F
 17   0x08    0x1BBD
 17   0x04    0x0DDE
 17   0x02    0x06EF
 17   0x01    0x1275
 18   0x80    0x9028
 18   0x40    0xC004
 18   0x20    0x3508
 23   0x10    0x1231
 23   0x08    0x0918
 23   0x04    0x048C
 23   0x02    0x0246
 23   0x01    0x1021

There is further regularity in there! In particular, for the 4 right bits of bytes 17 and 23, the FCS influence is obtainable from the influence z for the bit immediately on the left (by big-endian convention) as either (z>>1) or (z>>1)^0x1021.

Further, that 0x1021 constant happens to be the low 16 bits of what one gets when evaluating the CRC-16-CCITT polynomial x16+x12+x5+1 for x=2. It could be one of countless failed attempts to implement that CRC (though one that went unusually out of track).

$\endgroup$

migrated to reverseengineering.stackexchange.com by Maarten Bodewes Jan 10 at 15:12

This question belongs on our site for researchers and developers who explore the principles of a system through analysis of its structure, function, and operation.

  • 2
    $\begingroup$ Welcome to Cryptography. It might surprise you but this is off-topic here. And crossposting is also not good a ethic. Should post one and wait for the responses. $\endgroup$ – kelalaka Jan 9 at 15:22
  • $\begingroup$ Thank you for warn, I agree with you. After I posted my question I realized it should be in Crytograpgy Stack Exchange instead of Stackoverflow. However I thought it could be deleted afterwards. $\endgroup$ – Babud Imre Jan 9 at 15:46
  • 1
    $\begingroup$ Have you tried the generic technique there? It look like it should work, since the XOR of the following three given lines leads to the last one, which is strongly suggestive of an affine function.$$\mathtt{aaaaaaaaaa908e7c64ce2033b8a0263fc00 40 100601f55 53 b89b}\\ \mathtt{aaaaaaaaaa908e7c64ce2033b8a0263fc00 42 100601f55 53 8d93}\\ \mathtt{aaaaaaaaaa908e7c64ce2033b8a0263fc00 24 100601f55 55 7564}\\ \mathtt{aaaaaaaaaa908e7c64ce2033b8a0263fc00 26 100601f55 55 406c}$$ $\endgroup$ – fgrieu Jan 9 at 16:00
  • $\begingroup$ Amazing! No, I haven't. I assumed it is a non-linear function but you are right, this 'rule' is true in other cases as well. I'd be really curious how did you found it so quickly. Thank you! $\endgroup$ – Babud Imre Jan 9 at 18:33
  • $\begingroup$ Facing an unknown Frame Check Sequence, first thing is to check if it is affine. I took the lines; removed spaces; sorted; removed duplicates; kept the few columns that change; found two linear dependencies by visual inspection, both consistent with affine; concluded this is affine (as all CRCs are) beyond reasonable doubt. But unless I err, this is not any of the 32768 natural 16-bit CRCs (giving a constant remainder when the FCS is included with the same convention as the rest) for either byte endianness. Do you know endianness, and the exact relation between physical bits and the hex dump? $\endgroup$ – fgrieu Jan 9 at 20:31

Browse other questions tagged or ask your own question.