Дело теперь пошло быстро. Выяснилось, что модуль не виснет, а просто перестает слать сообщения, если не получает с шины сообщения с ID 501.
Собственно, на MMH человек спрашивал, как ему сбросить пробег. Пробег можно сбросить в 0 поменяв VIN. Конкретно для него приложил текстовый файл с сессией UDS, которая это делает при помощи стандартных методов. Никаких хаков, никаких секретов, никаких патчей в памяти и другой нелегальщины (можно ему отправить, если кто там может писать).
В этой сессии можно заметить, что мы получаем SEED (64 бита = 8 байт), и отправляем пароль такой же длинны в ответ. Увы, и сид, и пароль жестко зашиты в прошивке. С одной стороны, это значит, что купив раз лицензию на свой мотоцикл (и получив пароль), можно его использовать и в другом софте. Он постоянный.
С другой, мы не знаем, как генерируются пароли, и взять алгоритм нам негде. Это может быть CRC64 с каким-то смещением, это может быть отрезанный MD5, это может быть все, что угодно. Это может быть CRC64 от MD5. Единственное, что мы можем знать, это что алгоритм не использует ни VIN, ни какие-либо еще данные, привязанные к конкретной прошивке или мотоциклу.
Но если умеете читать дампы, найдете и сид и пароль:
8001C000: 00 00 00 00-00 37 05 00-27 20 32 15-00 0A 78 B5 7¦ ' 2§ 0x¦
8001C010: 01 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 O
8001C020: >1F A8 B1 11-1F BE FE F6-4E C4 01 BB-51 C3 E1 9A< Ўи-<Ў-¦ЎN-O¬Q+сЪ
8001C030: 51 21 52 00-00 00 00 36-30 37 30 30-30 31 34 00 Q!R 60700014
8001C040: 00 00 00 35-36 31 31 30-30 31 34>F4-3D 80 2E 83 56110014Ї=А.Г
8001C050: 96 CA A6 D3-2D A4 85 03-16 99 2A<39-32 31 30 32 Ц¦жL-дЕ¦-Щ*92102
8001C060: 32 30 32 02-30 29 20 31-05 00 00 00-00 00 00 00 202O0) 1¦
Лежат они вот по этим адресам (ниже данные с трех прошивок, что у меня есть):
Seed #1 8001c020 (2) Password #1 8001c053
ECU1: 1f a8 b1 11 1f be fe f6 ECU1: d3 2d a4 85 03 16 99 2a
ECU2: b8 df 49 81 b3 5c f1 a3 ECU2: 3b 39 74 53 17 bf 12 20
ECU3: B5 C8 30 FC-00 28 5B 54 ECU3: 3F-71 63 2C 83-68 7E DF
Seed #2: 8001c028 (4) Password #2: 8001c04b
ECU1: 4e c4 01 bb 51 c3 e1 9a ECU1: f4 3d 80 2e 83 96 ca a6
ECU2: 2c e6 d8 77 c8 97 6d b6 ECU2: 4a 85 8c 55 4e 28 dc df
ECU3: 59 E7 D9 0E-6E 54 C3 02 ECU3: 91-69 C4 B7 00 94 01 F6
ECU3 от Геннадия Григорьевича. По CAN, если посмотреть приложенный текстовый файл, сид и пароль передаются в обратном порядке, чем хранятся в ROM. Идентификаторы рядом в ROM (410000706, 41001165 и дата 20220129) тоже хранятся в обратном порядке. Не знаю, почему так, но если кто будет брутфорсить, я бы seed 1 ecu 1 рассматривал как 0x1fa8b1111fbefef6 (1F - старший байт, а не младший).
Если кто ломанет - чирканите по секрету, что там за алгоритм, любопытно же.