antus wrote: ↑Sat Apr 19, 2025 12:48 pm
I'd be interested to see a couple of the last seed and keys in list but with 00 01 in the first 16 bits where you have 00 00 above to see what changes, as well as a couple more sequences.
They were done by hand so human error is possible, but I've double checked and confirmed 55 55 AA AA = 01 4F.
There's a couple of things read by IDS / Forscan when connecting to the module. Thought maybe they were used but changing them has no effect, so it seems the result is calculated only from those 4 bytes.
00 00 00 13 --all the way to-- 00 00 00 19 = 50 04
55 55 55 56/57/59 all = 00 00
55 55 55 AA AB/AC/AD/AF all = 01 4F
00 00 00 00 to 0F all = 50 05
looks like the last nibble has no effect. I guess its bit shifted out at some point
I did a bunch more:
00 00 01 00 = 50 95
00 00 02 00 = 50 25
00 00 03 00 = 50 15
00 00 04 00 = 50 65
00 00 05 00 = 50 55
00 00 0A 00 = 50 A5
00 00 0B 00 = 50 95
00 00 0C 00 = 50 45
00 00 0F 00 = 50 55
And then this, and they all returned the same results as above
(doesn't matter which nibble the value was in on the 3rd byte):
00 00 10 00 = 50 95
00 00 20 00 = 50 25
00 00 30 00 = 50 15
00 00 40 00 = 50 65
00 00 50 00 = 50 55
00 00 A0 00 = 50 A5
00 00 B0 00 = 50 95
00 00 C0 00 = 50 45
00 00 F0 00 = 50 55
then with both nibbles:
00 00 FF 00 = 50 A5
00 00 55 00 = 50 05
00 00 11 00 = 50 85
00 00 22 00 = 50 45
and then I was thinking "3rd seed byte = 3rd key nibble" again, until:
00 00 AA 00 = 51 45
which is the same thing happening you pointed out above.
AB does the same overflow into the 2nd nibble thing:
00 00 AB 00 = 51 35
But then it goes back to 50:
00 00 AC 00 = 50 E5
00 00 AD 00 = 50 D5
00 00 AE 00 = 50 05
00 00 AF 00 = 50 F5
Here some samples from the first 16 bits:
00 01 00 01 = 59 05
00 02 00 02 = 52 05
00 01 00 10 = 59 04
00 02 00 10 = 52 04
00 FF 00 FF = 5A 0A
00 0F 00 00 = 55 05
00 F0 00 00 = 55 05
00 0F 00 AA = 55 0F
00 F0 00 AA = 55 0F
00 0A 00 AA = 5A 0F
00 A0 00 AA = 5A 0F
01 00 00 01 = 40 05
02 00 00 01 = 70 05
03 00 00 01 = 60 05
01 01 00 00 = 49 05
05 05 00 00 = 05 05
F0 00 00 00 = 50 05
Started recognizing some patterns, and predicted this, and sure enough:
55 55 00 50 = 00 00
Got me thinking about how do we get FF FF? Had it all worked out except the 2nd nibble of the result (just from looking at previous results), and confirmed:
AA 00 BE AA = F0 FF
Hmm, what if they are just mirrored? Yep:
AA EB BE AA = FF FF
So it seems that each byte basically does effect the corresponding nibble is the result (4 bytes in, 4 nibbles out).
However there must be some edge cases with overflow or something (such as AA and AB of the 3rd byte, setting the LSB of the 2nd nibble)
And it also look like the first nibble of first byte has no effect (same as how the last nibble of the last byte has none):
00 00 00 00 = 50 05
A0 00 00 00 = 50 05
F0 00 00 00 = 50 05
And it makes sense why we get 50 and 05 (they are mirrored nibbles of each other)
And sure enough, the 2nd byte nibble order has no effect:
00 0A 00 00 = 5A 05
00 A0 00 00 = 5A 05 also
Anyway not sure if its ever going to be any use to anyone, but I've uploaded the python scripts I'm using to play with this to GitHub:
https://github.com/pman92/FordGDS