Хабрахабр

Что можно сделать через разъем OBD в автомобиле

Ни для кого не секрет, что в современных автомобилях все системы под завязку забиты различной электроникой, даже простой стеклоподъемник имеет собственный микроконтроллер и адрес в общей сети. Мне, как интересующемуся владельцу, стало интересно, что же можно сделать имея просто доступ к разъему OBD и ничего более.
Все описанное в статье относится к автомобилю 2008 года (Mitsubishi Lancer), но как показала практика, спустя 10 лет у производителя ничего не изменилось и все функции продолжают использоваться и работать на современных авто.

Строение сети в автомобиле изображено на картинке:

image

3 kbps, диагностическая) и одна шина LIN. В машине имеются 3 CAN шины (скоростная шина двигателя 500kbps, низкоскоростная салонная 83. Что же можно сделать с CAN шиной? Связующим звеном между ними является блок ETACS (Electronic Total Automobile Control System), который выступает «шлюзом» и пересылает сообщения из одной шины в другую, по определенным правилам, а также занимается обработкой некоторых из них. Чтобы начать диалог с любым блоком необходимо знать его адрес, а также поддерживаемые функции (PID), которые он сможет обработать и дать ответ. Например, пообщаться с блоками, а может и что-нибудь изменить.

Изучив базы данных из него, можно найти всю интересующую нас информацию. В открытом доступе лежит ПО для дилерских центров под названием MUT III.

О адресах (запрос-ответ) в CAN сети:

image

PID'ы запросов, полные расшифровки ответов от всех блоков, включая положение байт в ответе (если за один кадр отправляются несколько значений) и множители с единицами измерений:

image

Для этого отправим в блок управления ESP команду 2102. Например, хотим мы узнать угол поворота рулевого колеса. В ответ прилетит сообщение 6102 FFEA000008FFF302

Взглянув в таблицу, узнаем, что нужны байты 2 и 3.

image

0xFFEA = -22, умножая на коэффициент 0,04375 получаем угол поворота руля -0,9625 градуса. Значение в int16.

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

image

Хорошо, все что хотели мы узнали, а какая от этого польза? Вот если что-нибудь изменить/включить/отключить…

В блоке управления автоматической коробкой передач есть программный счетчик уровня старения масла и при накоплении определенного порогового значения на экране бк появляется сообщение о том, что необходимо произвести обслуживание трансмиссии. Простой пример. Все в тех же таблицах можно найти команду под говорящим само за себя названием CLEAR_CVT_oil_degradation_level_Start. Масло поменяли, а сообщение продолжает отображаться на экране, ведь счетчик никто не сбросил и сбросить может только дилерский сканер MUT-III (который стоит около 1000$, не каждый может себе такое позволить) и некоторые программы (тоже не бесплатные). Отправляем команду 3103 в блок CVT и… получаем в ответ 7F3133. Можно злобно посмеяться в сторону ОД и самому сбросить этот злополучный счетчик.

Небольшое отступление. Почти во всех автомобилях для проведения диагностики и обслуживания используется механизм UDS (он же ISO 14229).

Он упрощает жизнь разработчикам автомобильных диагностических сканеров и является унифицированным для всех автопроизводителей (но это не значит, что некоторые не могут придумывать поверх него свои надстройки).

То есть, у нас нет прав на изменение или запрос этой функции. В итоге имеем расшифрованный ответ от вариатора: 7F — запрос отклонен, 31 — это PID, который мы отправляли и Negative response code 33, а именно Security Access Denied. У кого же она есть?

В каждой сессии присутствуют уровни допуска, которые решают, что вам можно, а что нет. Отступление 2. В UDS используется механизм разграничения доступа по нескольким уровням — обычная диагностическая сессия, расширенная сессия, сессия программирования и т.п. Подробнее можно почитать тут. Чтобы получить доступ к ним, необходимо запросить у блока так называемый Seed, обработать его определенным алгоритмом и отправить обратно в блок (Key).

Отправляем в ECU команду 2701 и получаем в ответ 6701 6A43FD3C.
Отправив в ответ любое 4-байтное значение (27 02 DEADBEEF), получим в ответ 7F2735, где 35 это Invalid Key (неверный ключ), т.к. Попробуем запросить seed. Где же искать алгоритм вычисления ключа? было отправлено значение «с потолка». Достать его достаточно легко (но не на всех блоках, все зависит от используемого микроконтроллера), сначала находим обработчик приема CAN, затем функцию обработки PID 0x27. В прошивке блока управления, больше негде.

image

После этого команда на сброс уровня деградации масла успешно отрабатывает и возвращает не negative response code, а положительный ответ 7103 01 и счетчик успешно сбрасывается. Повторив обмен seed-key с алгоритмом из прошивки получим в ответ 6702 34, где 34 это «Доступ разрешен».

Система безопасности у японцев слегка хромает. Таким образом, через OBD разъем можно делать с автомобилем практически все: менять VIN номера в блоках, настраивать кодировку (конфигурацию), менее чем за секунду отключить иммобилайзер, очищать информацию об ошибках, вводить блок в состояние загрузки, когда можно загрузить в RAM контроллера любой код и выполнить его.

Пример изменения конфигурации на видео:

Статья написана исключительно в ознакомительных целях. Любое вмешательство в электронные блоки управления автомобиля может стать для них последним. Всем хорошего дня!

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»