Всем добрый день. Столкнулся с проблемой слитевшей синхронизации иммо в ЭБУ еепром 95320 Магнети Марели 7gv. Синхронизацию мне помогли восстановить, т.к калькулятора у меня на тот момент не было. Есть модуль в мд флешер по работе с этим блоком, но покупать не захотел и решил разобраться, чисто ради спортивного интереса, как все работает и по какому принципу синхра восстанавливается. Перебрав кучу дампов нашел логику и сделал калькулятор на html для ее восстановления. У меня есть в чина айпроге кальк, который читает данные с дампа, но не пишет. Захотелось на будущее решить проблему не прибегая к покупке.
Оставляю кальк и логику тут может кому-то будет интересен.
Вот логика:
✅ Полная схема данных синхронизации
IAW 7GV (EEPROM 95320)
📍 Диапазон синхронизации
0x0E0 – 0x18E
Общие правила
Весь диапазон использует один и тот же XOR-ключ
Весь диапазон шифруется / расшифровывается XOR
Диапазон изменяется атомарно
❗ Исключение: байты 0x115 / 0x145 / 0x18F
→ не шифруются XOR-ключом
1️⃣ Служебный пролог
📍 0x0E0 – 0x0E5 (после расшифровки)
Всегда один из вариантов:
01 00 03 00 A6 55
00 00 03 00 A7 55
XOR всех 6 байт = F1
Отличия взаимокомпенсируются
Не индивидуальные данные (не MAC / CS / VIN)
🔐 Шифрование:
decoded = encrypted XOR KEY
encoded = decoded XOR KEY
➡ Используется ECU как флаг / статус синхронизации,
а не как идентификатор.
2️⃣ Статический служебный блок
📍 0x146 – 0x15F (после расшифровки)
00 00 00 00 00 00 00 00
AA 55
00 00 00 00 00 00 00 00
AA 55
FF FF
34 00
76 55
Шифруется тем же XOR-ключом
❌ Не участвует в BLOCK CS
Не содержит индивидуальных данных
➡ Используется ECU как:
якорь структуры
маркер валидности
контроль целостности зоны
3️⃣ Иммобилайзер-блоки (3 шт)
БлокАдресIMMO 10x0E6 – 0x115IMMO 20x116 – 0x145IMMO 30x160 – 0x18E
Каждый блок автономен
Все три обязаны совпадать
ECU сравнивает их между собой
4️⃣ Формат IMMO-блока
(ПОСЛЕ XOR-расшифровки)
OffsetРазмерНазначение00–012LOGIN (PIN)02–032LOGIN (дубль)04–074MAC08–0D6CS0E1XOR KEY0F–1C1420 20 … (пробелы)1D–2D17VIN2E1XOR KEY (дубль)2F1BLOCK CS
5️⃣ XOR-шифрование
Ключ:
KEY = byte[0x0E] = byte[0x2E]
Расшифровка:
decoded[i] = encrypted[i] XOR KEY
Шифрование:
encrypted[i] = decoded[i] XOR KEY
✔ Применяется ко всему диапазону 0x0E0–0x18E
❗ Кроме байт 0x115 / 0x145 / 0x18F
6️⃣ Контрольная сумма IMMO-блока (BLOCK CS)
📍 Offset 0x2F
BLOCK_CS = XOR(bytes 0x00 – 0x2E)
⚠️
Считается по зашифрованным данным
❗ Байты 0x115 / 0x145 / 0x18F
не XOR-шифруются ключом
чистый XOR
7️⃣ Порядок вывода (читаемый формат)
MAC
RAW : 04 05 06 07
SHOW : 06 07 04 05
CS
```undefined
RAW : 08 09 0A 0B 0C 0D
SHOW : 0A 0B 0C 0D 08 09
➡ В дампе одно, пользователю — другое
8️⃣ Правила записи (КРИТИЧНО)
✔ Обновлять весь диапазон 0x0E0–0x18E
✔ Использовать один XOR-ключ
✔ Обновлять:
3 IMMO-блока
0x0E0–0x0E5
0x146–0x15F
✔ После записи:
XOR-шифрование
Пересчёт 3 BLOCK CS
после шифрования
без XOR-ключа для 0x115 / 0x145 / 0x18F
❌ Никаких изменений вне диапазона
7g calc 95320_ОК.html