Взлом Hyundai Tucson
История в двух частях. В первой мы расскажем о первых неудачных попытках болгарского ИТ-специалиста Радослава Герганова взломать свой автомобиль Hyundai Tucson 2020 года выпуска, а во второй — о том, как выполнялся взлом ШГУ автомобиля.
Я купил новенький Hyundai Tucson в 2020 году, а в 2022 году наткнулся на отличную серию постов о том, как можно взломать Hyundai Ioniq 2021 (перевод одной из статей). К сожалению, описанные там способы мне не подошли. В моей машине установлено предыдущее поколение D-Audio, которое сильно отличается от D-Audio 2V, описанного в блоге greenluigi1. Вот точные версии прошивки/программного обеспечения, которые у меня стоят:
Я также нашёл инженерное меню, защищённое паролем. Чтобы оно появилось, нужно 5 раз нажать слева от кнопки «Обновить», а затем нажать 2 раза справа.
Увы, ни один из общедоступных паролей не сработал (1200, 2400, 3802, текущее время и т.д.). Так что я решил скачать прошивку и попробовать перепрошить мозги машины самостоятельно.
Обновление прошивки
Файл прошивки доступен на update.hyundai.com. Вам необходимо скачать и установить Navigation Updater, а затем выбрать модель автомобиля. Программа обновления загружает все файлы и подготавливает SD-карту или USB-флешку. Для моего Hyundai он загрузил 23 ГБ данных, включая обновления навигации и прошивки.
В корневой папке съёмного носителя находится файл 2018_20_Tucson_EU.ver , в котором перечислены все файлы обновления:
Мы видим каталог, имя, CRC32 (как подписанное 32-битное целое число) и размер каждого файла. Я быстро понял, что самый интересный файл — 2018_20_Tucson_EU\DAUDIOPLUS_M\eur\tlfl\update\system\update_package.zip , это зашифрованный zip:
Я попытался разархивировать файл, используя обнаруженный greenluigi1 пароль (ahqltmTkrhk2018@@), но это не сработало.
Взлом zip-архива
Для взлома я решил попробовать bkcrack. Этот инструмент реализует атаку на основе открытых текстов, обнаруженную Эли Бихамом и Полом Кочером (Eli Biham и Paul C. Kocher). Для атаки требуется не менее 12 байт открытого текста. Мой зашифрованный zip содержит два zip-файла. Кого бы выбрать в качестве кандидата на открытый текст? Заголовок ZIP-файла, конечно! Вот как это выглядит:
Еще одним существенным преимуществом является то, что оба zip-файла update_package.zip хранятся без сжатия (нет смысла сжимать уже сжатые файлы). Это можно проверить с помощью следующей команды:
Теперь нам просто нужно узнать 12 байт заголовка файла update.zip или otacerts.zip , чтобы выполнить атаку.
Вариантов для первых 10 байт не так уж и много. Первые 4 байта фиксированы ( 504b0304 ). Вариативные байты в большинстве случаев — это либо 1400, либо 0a00 . Предполагая, что вложенные zip-файлы не зашифрованы, битовый флаг общего назначения должен быть 0000 . Метод сжатия: либо 0000 (store), либо 0800 (deflate). Итак, у нас есть следующие варианты для первых 10 байт:
Нам нужны ещё два байта. Мы можем взять дату либо время модификации файла.
Время хранится в секундах, деленных с точностью до 2, что дает нам 24*60*30=43200 возможностей. Предполагая, что изменение файла произошло за последние 5 лет, у нас есть 5 * 365 = 1825 возможностей для поля даты.
Очевидно, что более эффективно проверять поле даты методом перебора. Однако один запуск этой атаки занимает 30 минут на моем ноутбуке, так что брутфорс будет неэффективен. Пришло время для ещё одной дикой догадки.
Дата изменения файлов update.zip и otacerts.zip «21 апреля 2022 года». Предположим, что дата изменения первой записи файла otacerts.zip также «21 апреля 2022 года». Эта дата закодирована в формате MS-DOS как 9554 . Теперь у нас есть 12 байт обычного текста, но мы пропустили время модификации файла. К счастью, bkcrack поддерживает указание смещения с помощью параметра -x .
Первый запуск атаки с помощью plain1.bin завершился неудачей. Однако с помощью plain2.bin я успешно выполнил восстановление:
otacerts.zip содержит единственный сертификат X509, изменённый 21 апреля 2022 года (да, мне очень повезло!):
update.zip содержит все самое интересное:
Реверс прошивки
Судя по всему, моя машина работает под управлением Android и system.ext4 имеет корневую файловую систему. Смонтируем и заглянем внутрь:
Практически все приложения находятся в папке /app . Каждое приложение имеет как .apk, так и .odex версию, например:
Я использовал baksmali для преобразования файлов odex в smali и jadx для декомпиляции smali в Java. Давайте рассмотрим приложения для инженерного меню, а затем файлы обновления.
Пароль инженерного меню
Пароль на инженерное меню добывается из getKeyString() методом com.hkmc.system.app.engineering.ime.InputPasswordExt . Он берет последнюю цифру текущего года, а затем выполняет поиск ресурсов:
Это соответствующие строки ресурсов:
В этом году пароль 2702 . Попробовал на машине, работает:
Пароль для обновления
Хотя я могу извлекать обновления прошивки с помощью ключей, полученных с помощью bkcrack, мне было любопытно узнать пароль для update_package.zip. Простой grep по update_package.zip приводит к методу getPassword() com.hkmc.system.app.swupdate.ImageFileCopy :
Статический пароль «+Ekfrl51Qkshsk#@zpdhkdWkd
-f» не работал. В моем случае пароль был получен в результате объединения следующих системных свойств:
Метод SHA512Checking() вычисляет SHA512-дайджест данной строки и возвращает результат в виде шестнадцатеричной строки в верхнем регистре. Делаем это дважды и берём подстроку:
Пароль 15DAA85C8D44B3979CD152A387F6
Что дальше
Я почти уверен, что смогу создать обновление прошивки с бэкдором и получить доступ в корневую оболочку. Но есть небольшой шанс, что что-то пойдёт не так и заблокирует мою машину, поэтому я пока не собираюсь этого делать 🙂 У меня есть некоторые идеи, которые я попробую провернуть. Конечная цель, конечно же, — играть в Doom на экране моей машины.
Как Радослав добрался до ШГУ своего автомобиля, расскажем в следующей статье.
Что ещё интересного есть в блоге Cloud4Y
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем только по делу. А ещё напоминаем про второй сезон нашего сериала ITить-колотить. Его можно посмотреть на YouTube и ВКонтакте.
ГУ: прошивка и карты. Текущая ситуация + вопросы по навигации
Версии прошивок ГУ на Android
Всем привет! Собрал немного информации в одно место + ниже вопросы к вам.
на момент написания поста все линки "живые"
по штатному ГУ получается, что есть на Win и Android на авто после 17 года (с годом тут не точно)
для WIN
ветка форума: www.tucsonforum.ru/forum/showthread.php?t=1207
последняя прошивка 183 — начиная с версии 178 отваливается микрофон на авто с ГЛОНАСС
для Android (как в моем случае)
Ветка форума: www.tucsonforum.ru/forum/showthread.php?t=1208
последняя прошивка 100 — с громкой связью все в порядке. Ничего не отваливается, как на ГУ с Win
ставится по инструкции из шапки указанной темы (там все просто)
но сам файл с прошивкой качать отсюда (исходное сообщение)
Процесс занимает 10-15 минут на заведенной машине. В процессе обновления играло радио, которое то выключалось, то включалось. Басы реально стали сочнее! это слышно сразу (до этого стояла 085 прошивка)
Свежие карты
Ветка форума: www.tucsonforum.ru/forum/…owthread.php?t=139&page=2
В шапке инструкция как залить их на SD — все просто.
там даются ссылки не на сами карты, а на торрент файл, для скачивания карт.
размер порядка 17-18 ГБ
последняя карта версии 12.41 — на ГУ может начать глючить время, которое берется с GPS
поэтому рекомендуют версию ниже: карты 11.47, с ними проблем нет (пост с ссылкой не на торрент)
По картам пока залил последнюю версию 12.41. Послежу за часами.
Вопросы.
Без кастома можно было бы пользоваться Я.Навигатором 2-мя способами.
1. Зеркалированием через Android Auto — вот так. Там в описании под видео все есть. Я настроил телефон, но
у меня на 100 прошивке ГУ просто пропала иконка Android Auto.
Подскажите, кто прошит на 100 прошивку, на месте ли у вас иконка?
у меня сейчас меню выглядит так:
Потерялось Android Auto
Upd: разобрался. В настройках подключения экрана надо было поставить галочку Android Auto
В общем, Яндекс Навигатор быстро работает на штатном ГУ с тачем. Конечно внизу лежит телефон и все на нем крутится, но он лежит там внизу и ок )
2. Зайти в инженерное меню Android и поставить нужные приложения самостоятельно.
UPD: Похоже на нашем ГУ это невозможно. Способ работает на KIA с ГУ LG, так что текст ниже похоже не сильно актуален.
Подробнее как это сделать в этом видео
В описании все нужные приложения для скачивания.
но и тут НО
видимо на 100 прошивке прикрыли эту "дыру", манипуляция 1-2-3-4-5-6-7 не срабатывает в меню заставки.
либо я что то делаю не сильно правильно.
Подскажите, кто прошит на 100 прошивку, у вас работает способ захода в инженерное меню описанное в видео?
Вот собственно и все.
Вроде собрал все рабочие ссылки. Там ничего сложного.
Ну и по традиции данного блога, задал вам вопросы 🙂