Ковыряем формат CUW и cuw.exe из комплекта techstream
В калибровке всякое разное для работы конкреного ЭБУ. Код прошивки записан в самом чипе в ЭБУ, а данные для его работы и есть так называемая "калибровка". Например там может быть кол-во впрыскиваемого топлива или еще херня какая. Файл сам по себе текстовый, но с бинарным заголовком :
В заголовке ничего интересного пока, кроме контрольной суммы (выделено синим). Сразу после суммы идет непосредственно блок данных, который разбирается уже после верификации файла. Спонсор поиска кода верификации - течстрим 10й ветки (он не защищен протекторами) и IDA 6.8. Подсчет суммы находится по адресу .text:00407010, а вызов из верификатора
.text:004073BC push 0 ; crc
.text:004073BE call crc32
.text:004073C3 add esp, 0Ch
.text:004073C6 cmp eax, [ebx+14h]
.text:004073C9 setnz al
Длина данных - дворд перед контрольной суммой. В примитивном случае для фикса и пересчета црц файла подойдет простая структура
typedef struct CUW_BINARY_HDR {
BYTE unknown[0x22];
DWORD dwFileLength;
DWORD dwFileChecksumm;
}CUW_BINARY_HDR, *PCUW_BINARY_HDR;
Если црц не совпало, выбрасывается эксепшен
Далее идет совершенно сатанинская функа чтения ИНИ-файла, который идет сразу после бинарного заголовка.
Первое что проверяет утилита тойоты - версия файла прошивки. Поле Vrsion в разделе Format. Всего в данном ЕХЕ вкомпилено 6 мест под версии и заполнены из них только две. То есть, поддерживается версия CUW-файла 1 и 2. Остальное не используется, пока что
Если версия не та - эксепшен "'Invalid file format"
Дальше - кол-во калибровок, которые можно включить в один файл. Максимум их 4, это поле NunberOfCalibration. Если больше 4х, выбрасывается сепшен "'File data is incorrect (Wrong number of calibrations)'"
Интересно, что для версии прошивок 2+ явно указывается по какому протоколу будет идти обновление. В моем случае ContactType=CAN
Значит ли это что есть еще какойнитьвайрлесс или другой, закрытый протокол который скоро будет доступен только дилерам тойоты?
что бы это могло быть?
Тут вообще начинается самое интересное - какая то магия с TargetCalibration / TargetData и, насколько я понял, никто толком не знает как оно генерится друг из друга