Главная страницаКонтактная информация

Статьи

Антитюнинг: анализ модуля Delphi MT-60 для ChipExplorer

Предыстория.

В течение последнего года к нам поступали множественные обращения от пользователей ChipTuningPRO с просьбами выпустить модуль для редактирования калибровок ЭСУД Delphi MT60, устанавливаемых на автомобили Daewoo Gentra. От некоторых даже звучали упрёки, суть которых сводилась к тому, что «конкуренты работают значительно быстрее вас, а вы отстаёте». Как известно, понятия «быстро» и «качественно» редко бывают совместимы, в чём вы совсем скоро убедитесь.

Зная о том, что уже существует аналогичный модуль для ChipExplorer, мы не спешили с разработкой собственного решения. Ситуация изменилась в конце лета 2014 года, когда пользователи, купившие модуль у «конкурентов» (почему в кавычках, станет ясно, когда вы прочитаете статью до конца), были разочарованы результатами чип-тюнинга: никаких заметных улучшений в динамике автомобиля добиться не удавалось. Посмотрев скриншоты, было очевидно, что имеющихся калибровок должно быть достаточно для улучшения динамики автомобиля, однако, опыт чип-тюнеров явно свидетельствовал об обратном. Было принято решение приобрести данный модуль и провести анализ сложившейся ситуации.

CopyPaste.

Итак, модуль официально приобретен, программа запущена, открыта прошивка Daewoo Gentra, ПО 25191756. Сразу бросилось в глаза, что автоопределение не работает, то есть, карту нужно выбрать вручную. Наименование карт показалось странным: имя карты не содержало версии ПО, а содержало версию калибровок, что нелогично, так как адреса, формулы пересчета, наборы калибровок привязаны именно к ПО, а не к калибровкам, иными словами, на базе одной версии ПО могут существовать десятки различных прошивок, которые откроются одной и той же картой.

Не будем придираться к мелочам, пойдем дальше. Беглый обзор названий калибровок показал, что «автор» явно ориентировался на нашу разработку для похожей системы Delphi MT80. Названия и набор калибровок почти те же, не считая немного другой разбивки калибровок на группы и косметических переименований, например, «Задержка входа в PE» заменена на «Задержка входа в мощностной режим». А вот иллюстрация раздела «Переход ПУСК-ХХ»:

Часть калибровок, практически все константы, которые есть в нашем модуле MT80, отсутствуют в модуле MT60, например:

Этот факт сразу наводит на предположение, что никакого дизассемблирования микропрограммы управления MT60 «автор» не производил, а нашел похожие MT80 по форме и размерности калибровки в визуализаторе, вроде WinOLS и на основе подобия формы таблицы делал выводы о её назначении, что совершенно недопустимо, так как угадать назначение таблицы по ее форме можно лишь случайно. Если бы это было не так, то константы бы присутствовали, в коде их найти ничуть не сложнее, чем таблицы. Иными словами, «автор» не утруждал себя изучением программы управления, а просто скопировал часть калибровок из наших разработок! Но, пока это всего лишь предположение, хотя по косвенным признакам (практически полное отсутствие важных констант, идентичные названия) это предположение выглядит очень правдоподобным.

На этом этапе стало понятно, что в очередной раз была произведена попытка украсть наши разработки и на их основе создать как бы новый модуль для чуть-чуть другой системы управления. Пришло время взять дизассемблер и провести в нём сотни часов для того, чтобы хотя бы поверхностно изучить работу системы Delphi MT60 и уже документально проверить, насколько «качественно» был скопирован наш модуль MT80 и что же на самом деле скрывается за красивыми названиями калибровок в модуле MT60...

Разбор полётов или сказка про буратино и страну дураков.

Итак, прошло некоторое время и теперь мы имеем представление о работе системы MT60, полученное на основе реверс-инжиниринга программного кода. Теперь можно вновь открыть прошивку MT60 и «пробежаться» по наиболее важным калибровкам с целью выяснить, соответствует ли их название истинному назначению или нет. «Автор» скрыл адреса калибровок, вероятно, боясь, что его «разработку» кто-то украдёт:)

Но мы воспользуемся его же методом: будем изменять интересующую нас калибровку, сохранять в файл и выделять измененное адресное пространство. Это даст нам возможность получить адрес калибровки. В этой статье мы рассмотрим только те калибровки, которые необходимы для улучшения динамики автомобиля, ситуация с остальными калибровками аналогичная, но, чтобы не утомлять читателя, мы не будем их анализировать.

Группа калибровок «Мощностной режим»:

Первая калибровка в группе:

1 Предположение «автора» На самом деле Вердикт
Наименование Положение электронной педали газа для вкл. мощностного обогащения Коэффициент, участвующий в алгоритме лямбда-регулирования НЕВЕРНО
Адрес 0x315E6 0x315E6 ВЕРНО
Число точек 17 17 ВЕРНО
Тип 2D-таблица, 16-bit 2D-таблица ВЕРНО
Ед. измерения % коэффициент НЕВЕРНО
Зависимость F(обороты) F(ТОЖ) НЕВЕРНО

Таблица по этому адресу действительно существует, число точек 17 (задано правильно). На этом «правильность» и заканчивается. Таблица находится в одной из веток программы лямбда-регулирования, отношения к положению электронной педали не имеет, является весовым коэффициентом и представляет собой функцию не от оборотов, а от температуры ОЖ, всё это видно в программном коде:

Вторая калибровка в группе:

2 Предположение «автора» На самом деле Вердикт
Наименование Задержка входа в мощностной режим Задержка подачи асинхронного топлива при пуске НЕВЕРНО
Адрес 0x3255D 0x32559 НЕВЕРНО
Число точек 7 17 НЕВЕРНО
Тип 2D-таблица, 16-bit 2D-таблица, 8-bit НЕВЕРНО
Ед. измерения Сек. Число циклов НЕВЕРНО
Зависимость F(давление) F(ТОЖпусковая) НЕВЕРНО

Здесь всё ещё веселее: не попали никуда!

Вот истинный адрес таблицы:

А вот её содержимое:

Особенность таблиц в том, что первое значение — число точек, а затем идут данные. Здесь видно, что число точек 0x11 (17 в десятичном виде), а сами данные имеют тип BYTE, а не WORD. Но, «автор» не заглядывал в код, зачем себя утруждать? Проще объявить себя «автором», организовать лохотрон и собрать деньги. Дальнейший анализ использования этой таблицы показал, что она определяет задержку подачи асинхронного пускового топлива...

Третья калибровка в группе:

3 Предположение «автора» На самом деле Вердикт
Наименование Дельта положения эл. педали для отмены задержки входа в мощностной режим Динамическая производительность форсунки (аддитив времени впрыска по напряжению) НЕВЕРНО
Изменение потенциально опасно!
Адрес 0x32535 0x32536 НЕВЕРНО
Число точек 17 17 ВЕРНО
Тип 2D-таблица, 16-bit 2D-таблица, 16-bit ВЕРНО
Ед. измерения % мсек. НЕВЕРНО
Зависимость F(обороты) F(напряжение Uacc) НЕВЕРНО

Как и следовало ожидать, третья таблица тоже не относится к алгоритму детектирования перехода в мощностной режим: вместо дельты педали бедолага-тюнер правит динамику форсунки:

Кроме того, «автор» опять не угадал с адресом, причем, фатально: первая точка таблицы «залезает» на служебное поле общего числа точек в таблице (о выравнивании автор ничего не слышал, так как не является ни реверс-инженером, ни программистом микроконтроллеров). Изменение этого поля приведёт к некорректной выборке значения, что вызовет непредсказуемое изменение добавочного времени впрыска форсунки.

Epic fail.

Заключение по этому разделу: НИ ОДНА калибровка из этого раздела не является тем, за что её выдают, а изменение последней калибровки просто опасно.

Группа калибровок «Топливоподача».

Угадать таблицы состава смеси немного проще, чем рассмотренные ранее калибровки перехода в мощностной режим. Объясняется это довольно просто: диапазон реальных составов смеси довольно узок. В системах Delphi формула пересчета физического представления в логическое выглядит так: AFR = BYTE * 0.125. При визуализации калибровок по этой формуле сразу отсекаются данные, которые логически не могут быть составом смеси, например, это таблица заведомо не может содержать AFR по причине того что составы смеси в диапазоне 17...25 невозможны:

А вот такая таблица вполне может являться «топливной»:

по причине того что диапазон её составляет 14...14.6, что соответствует логическому «стехиометрия и чуть богаче». Разумеется, что такой поиск через визуализацию никогда не даст ответа на вопросы:

Проанализируем, насколько точно «автор» угадал топливные таблицы и можно ли с помощью «модуля» сделать самое важное (из данного раздела калибровок) для тюнера: изменить состав смеси в режиме мощностного обогащения.

Первая калибровка в группе:

1 Предположение «автора» На самом деле Вердикт
Наименование Состав смеси Состав смеси, частичные нагрузки, вариант 2 ВЕРНО частично, см. описание
Адрес 0x3120A 0x3120A ВЕРНО
Число точек 17x17 17x17 ВЕРНО
Тип 3D-таблица, 8-bit 3D-таблица, 8-bit ВЕРНО
Ед. измерения Воздух/топливо AFR ВЕРНО
Зависимость F(давление, обороты) F(ТОЖ, коэффициент) НЕВЕРНО

С назначением этой таблицы почти угадали, но есть 2 проблемы:

1. оси X и Z у «автора» проставлены наугад и не соответствуют действительности

2. таблица не используется в данной конфигурации калибровок, так как в программе имеется флаг, переключающий топливоподачу на другую таблицу:

Вторая калибровка в группе:

2 Предположение «автора» На самом деле Вердикт
Наименование Коэффициент нелинейности топливоподачи Коэффициент барометрической коррекции состава смеси НЕВЕРНО
Адрес 0x30FEF 0x30FEF ВЕРНО
Число точек 9x7 9x7 ВЕРНО
Тип 3D-таблица, 8-bit 3D-таблица, 8-bit ВЕРНО
Ед. измерения Коэффициент Коэффициент ВЕРНО
Зависимость F(производная скорости по времени открытия ДЗ, обороты) F(ТОЖ, атмосферное давление) НЕВЕРНО

Угадали только две вещи: это действительно относится к топливу и это некий коэффициент. Всё остальное — снова мимо!

Кстати, что такое «производная скорости по времени открытия ДЗ» и как это может быть связано с коррекцией нелинейности топливоподачи науке пока неизвестно...

Третья калибровка в группе:

3 Предположение «автора» На самом деле Вердикт
Наименование Состав смеси на мощностном режиме Состав смеси, частичные нагрузки, вариант 1 НЕВЕРНО
Адрес 0x3240F 0x3240F ВЕРНО
Число точек 14x17 14x17 ВЕРНО
Тип 3D-таблица, 8-bit 3D-таблица, 8-bit ВЕРНО
Ед. измерения alfa AFR ПОЧТИ ВЕРНО
Зависимость F(обороты, давление) F(абс.давление, обороты) НЕВЕРНО

Таблица действительно определяет состав смеси, только не в мощностном режиме, также перепутаны местами оси давления и оборотов и неверно задано квантование осей.

Четвертая калибровка в группе:

4 Предположение «автора» На самом деле Вердикт
Наименование Состав смеси на частичных нагрузках Коэффициент коррекции LTFT (Long Term Fuel Trim) НЕВЕРНО

Адрес 0x32593 0x32593 ВЕРНО
Число точек 14x17 14x17 ВЕРНО
Тип 3D-таблица, 8-bit 3D-таблица, 8-bit ВЕРНО
Ед. измерения alfa Коэффициент НЕВЕРНО
Зависимость F(обороты, давление) F(Tзаряда, LTFT) НЕВЕРНО

Эта таблица вообще не относится к составу смеси, она предназначена для поправки Long Term Fuel Trim по температуре заряда:

Заключение по этому разделу: почти все калибровки в данной группе не соответствуют описанному назначению. Изменить самое важное — «состав смеси в мощностном режиме» невозможно. Редактирование последней таблицы может привести к непредсказуемому изменению состава смеси и ошибкам лямбда-регулирования.

Хотелось написать продолжение анализа, но ситуация такова, что «предмет не достоин дальнейшего обсуждения».

Не попадайтесь на удочку мошенников! Выбирайте наши профессиональные решения, созданные на основе реверс-инжиниринга программного кода системы управления, проверенные временем и опытом огромного количества наших пользователей.

SMS-Soft

© 1999–2024, Алексей Михеенков.
© 2002–2024, «SMS-Soft».
Все права защищены.
При полном или частичном использовании материалов, ссылка на www.SMS-Soft.ru обязательна.
Контактная информация.

Обращаем ваше внимание на то, что данный интернет-сайт носит исключительно информационный характер и ни при каких условиях не является
публичной офертой, определяемой положениями, описанными в части 2 на стр. 437 Гражданского Кодекса Российской Федерации.

Упоминаемые на этом сайте торговые знаки являются собственностью их законных владельцев и используются исключительно с целью идентификации их товаров и услуг.


web-дизайн:
Ольга Михеенкова.