Stevebe wrote: ↑25 May 2019, 23:04
I don’t like to show my ignorance, but can someone explain what is ment by seeds , I can gather that Oscar has made a big step forward but it has gone over my head, I keep reading and trying to learn but I think I’m getting to old, or I’m just stupid..
Steve
It's okay, now I will explain in my bad english. For most private UDS functions, like WriteDataByAddress/ReadMemoryByAddress, RoutineControl, RequestDownload, TransferData, e.t.c. you need to authenticate via SecurityAccess procedure.
This procedure includes 4 steps:
1) client (PC) requests the “seed” by sending SecurityAcces Request Service Id - "0x27 0x01" to module
2) server (CAN module) sends the “seed” - 1-5 bytes random value
3) client sends the “key” (appropriate for the Seed received) by performing some math operation on seed. For example, multiplies seed on 128 (128 - secret value, only factory stuff knows about this value);
4) server responds that the “key” was valid (by performing same math operation) and that it will unlock itself.
Now you can execute secured functons.
This is how it looks in the dump:
Выделение_003.png
The difficulty is that it is almost impossible to crack an encryption algorithm. But since the our modules use only 3 bytes for the key, and there is software in which it is implemented (Ford IDS), the complexity is significantly reduced
Now i'm trying to download secondary bootloader to download other software (main ROM, extended flash).
P.S. IPC doesn't support ReadMemoryByAddress routine - so we can't read memory via CAN. It seems like that odometer correction procedure we can run only via UDS RoutineControl procedure, by making own SBL, which will perform the i2c writing function, which is located in the main fw of IPC
You do not have the required permissions to view the files attached to this post.