Чем прошить процессор boo ree

Обновлено: 07.07.2024

Имеем ноутбук Acer Aspire ES1-572 на платформе Compal B5W1S LA-D671P , залитый в районе мультиконтроллера и большое желание заставить этот ноутбук работать. Будем менять и прошивать мультиконтроллер.

После замены мультиконтроллера, нас у него интересуют следующие ноги:

  • 59-ая нога ( KSI4 ) - сигнал CS
  • 60-ая нога ( KSI5 ) - сигнал CLK
  • 61-ая нога ( KSI6 ) - сигнал MOSI
  • 62-ая нога ( KSI7 ) - сигнал MIOS
  • 42-ую ногу ( KSO3 ) на время прошивки необходимо замкнуть на землю.

На программаторе все эти сигналы подписаны.

Обязательно соединяем землю программатора с землей платы. Так же мультиконтроллер необходимо запитать, подав 3.3V на любую из питающих ног, к примеру, 22, 33, 96, 111, 125.

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

Подпаиваться к контактам мультиконтроллера не очень удобно. Будем работать с разъемом клавиатуры, ведь эти контакты напрямую идут туда.

Сначала я собирался припаять проводки к плате программатора. Но решил, что прошиваю мультиконтроллер не в последний раз и каждый раз паять проводки мне будет конкретно лень. Поэтому побыстрому сколхозил вот такую приблуду.

Красный провод будет у меня 3.3V; покрашенный черным фломастером - GND Красный провод будет у меня 3.3V; покрашенный черным фломастером - GND

В будущем из шлейфиков от мертвых клавиатур можно наделать переходников для разных платформ и обходиться без паяльника.

На этом будем считать, что все шаги по подключению программатора к мультиконтроллеру завершены. Переходим к программной части.

Прошивать мультиконтроллер будем с помощью программы Postal3 и драйвера для работы Postal3 с CH341А .

После того, как драйвера на программатор CH341A установлены, заменяем в папке с Postal3 файл SiUSBXp.dll файлом из свежескачанного архива с драйвером. Так же в папку с Postal3 копируем файл CH341DLL.DLL из папки с родной программой от CH341A .

Теперь надо настроить Postal 3 для работы с CH341A . Запускаем программу, сходу ставим галку "Other" и жмем кнопку "Settings" .

В открывшемся окне ставим галку "tag/SPI" и рядом в выпадающем списке выбираем "КВ9012" (пусть вас это не смущает мультиконтроллеры KB9012 и KB9022 шьются одинаково). Скорость выбираем максимальную.

Переходим на вкладку "Misc" . Там ставим галку "SPI Read Short Step(slow)" .

Переходим на вкладку "Com Settings" . Отмечаем галками все все опции "UsbXpress" .

Сохраняем настройки кнопкой "OK" . И попробуем прочитать содержимое мульта.

Процесс небыстрый. Чтение у меня заняло чуть более получаса. Еще столько же - процесс верификации, ибо кое-кто забыл в настройках снять галку автоматической верификации. Потом еще полчаса на запись и еще раз полчаса на верификацию.

Кошка, ожидаемо, проявила интерес к этому действу. Пришлось плату спрятать в пакет, чтоб не искушать зверька торчащими во все стороны проводами.

После прошивки устройства Combo №3 А7 официальной прошивкой версии V2004 яркость устройства упала на 90%, практически ничего не разобрать что происходит на экране. Проблем при прошивке не было никаких. Низкая яркость именно при подключении штатного питания.
При подключении устройства по usb к компьютеру, яркость экрана не снижается, т.е. все работает как надо.
По телефонному разговору с сотрудником компании он сказал, мол да, есть такой косяк. Из вариантов или искать самому какую-то другую прошивку (а нафига тогда интересно нужны официальные) или отдавать им устройство на ремонт (только в Москве).
В общем ни тот, ни другой вариант меня не устраивает, поэтому хочу спросить, кто-то пробовал вылечить данный баг?

Прибавь яркость на устройстве,вторая кнопка справа нажать 3 раза. После прошивок настройки по умолчанию ставятся заводские. Какую версию показывает Ваш регистратор после обновления? У меня почему то v0000, а не v2004.
С яркостью та же беда, и ещё пропал звук, нет приветствия, громкость на 5 и тишина.

Ребята, после прошивки V2004 перестала работать радарная часть, не ловит передвижные радары, о уведомляет только о камерах, что зашиты в базу. У кого нибудь было что-то подобное?

Добавлено 08.09.2017, 10:00:

Ребята, после прошивки V2004 перестала работать радарная часть, не ловит передвижные радары, о уведомляет только о камерах, что зашиты в базу. У кого нибудь было что-то подобное?

Добавлено 08.09.2017, 10:02:

И стал подозрительно греться при работе.

ебята, после прошивки V2004 перестала работать радарная часть, не ловит передвижные радары, о уведомляет только о камерах, что зашиты в базу. У кого нибудь было что-то подобное?

есть такое, отсутствие звукового сигнала в момент детектирования диапазонов. То есть, при обнаружении диапазона К - индикатор показывает (и на 1-3 и на 3 и выше), что обнаружен сигнал радаром, но
к этому сигналу нет звукового сопровождения, хотя устройство работает со звуком (GPS обнаружен, приветствие и сигналы из карты (светофоры)). Использовал в режимах ТРАССА, ГОРОД, ГОРОД1 и 2, но звук сигнала радара так и не услышал. Писал в поддержку, но ответа пока нет.

Другая проблема! Устройству чуть больше года (т.е. гарантия как бы закончилась).
В течение года проблем не было, девайс радовал. но не давно стал постоянно срабатывать ложно радар в диапазонах К, лазер и Х. При этом, если даже физически отключить данные диапазоны, оповещение продолжается! Иногда лечится перезагрузкой устройства в момент оповещения. Все обновления с официального сайта.
Написал в поддержку - пока молчат((( Ответили из поддержки. Любой каприз за Ваши деньги! Только плати. Причину скажут после получения устройства. Карта дохнет 3-я уже на данном аппарате.Что делать?Карты 10 класс 32Gb.Не бывало такого.Разьём вроде в норме.

Печально, нет почти ничего про девайс. Есть проблема с картой памяти. Девайс работает только если флешку изъять. Со вставленной работать не хочет, перезагружается. Началось с того, что произвел прошивку штатным способом, и через пару часов работы он стал перезагружаться. Официальная поддержка предложила два варианта возникновения проблемы. В первом виноват был я т.к. не выключил устройство когда оно начало перезагружаться! По этой причине оно теперь нуждается в поездке в Москву. Правда я не заметил в инструкции такого пункта: через 5 секунд после начала перезагрузки выключите устройство и поставьте другую флешку. Второй спец. сказал что это совпало с выходом из строя флешки и она убила устройство из за того, что была неправильная флешка с неправильной скоростью. Я использовал Тошибу exceria u3, которая щас летает на дроне и пишет успешно 4К. И в принципе не понимаю, как можно уничтожить программу медленной скоростью флешки. Подскажите, у кого была проблема такого типа, как то удалось решить, или возили в единственный сервис в Москву

В жизни любого радиолюбителя наступает момент, когда собранный своими руками программатор хочется заменить на что-то купленное и с бОльшими возможностями. Или расширить номенклатуру совместимых кристаллов. На Алиэкспресс можно найти огромный ассортимент универсальных программаторов и готовые адаптеры для установки микросхем памяти и контроллеров. В подборке будут интересные модели для AVR (ATMega/ATTiny), для PIC, STM8/STM32, для EEPROM, для Zigbee контроллеров и адаптеры.


Все больше становится доступного программного обеспечения, с помощью которого можно настраивать по себя различные модули и устройства. А конкретно, CC-Debugger может использоваться для программирования и отладки систем на базе 8051, например, модулей CC2531, на базе которых производятся гаджеты для умного дома и «интернета вещей». Работает с программным обеспечением IAR и SmartRF Studio.


Хороший пример использования предыдущего отладчика CC-Debugger — это заливка адаптированной прошивки в компактный USB донгл для сети Zigbee. С помощью модифицированного Zigbee трансмиттера можно привязывать устройства в свою сеть, создавать собственные Zigbee-мосты, анализировать протоколы датчиков и так далее.


Один из лучших программаторов для AVR — это классический USBASP, компактный и универсальный программатор, для загрузки программного обеспечения через интерфейс ISP. В комплекте есть кабель для загрузки через ISP на 10 контактов. Подходит не только для семейства ATMEGA8, но и для новых ATMEGA128. Работает в Win7.


А это еще один вариант USB ISP программатора для AVR (семейства ATMega и ATTiny). В отличие от предыдущего имеет выбор питания кристалла (5V или 3.3V джампером), а также в два раза меньшую стоимость. Интерфейс для программирования ISP, но есть смысл воспользоваться отдельным адаптером с ISP10 на ISP6 для удобства работы с компактными отладочными платами Arduino.


Устройство представляет собой полноценный uart-мост и эмулятор последовательного порта. Предназначен для прошивки микросхем памяти (24 EEPROM и 25 SPI flash 8pin/16pin) и микроконтроллеров по spi (AVR, PIC, Singlechip STC). Подходит для восстановления флэш-памяти BIOS USB. Для работы с контроллерами Атмел используется программное обеспечение AVR CH341A или AVRDUDE


Для работы с устройствами от STMicroelectronics рекомендую использовать программатор ST LINK. По ссылке версия ST-Link V2, который подходит для чипов семейств STM8 и STM32. Удобен для загрузки встроенного программного обеспечения на контроллер прямо в составе схемы, а также для отладки работы и поиска ошибок. В комплекте есть 4-pin кабель. Цена смешная — полтора бакса.


А вот если нужен адаптер посерьезнее, то есть смысл посмотреть недорогой программатор SWD, который совместим со всеми функциями J-Link. В данной модели интерфейс упрощен до четырех линий: VCC, SWDIO, SWCLK, GND. Но, по сравнению с обычными, этот вариант быстрый и эффективный. Подключается через MicroUSB, корпуса, увы, не предусмотрено. Цена всего 2 бакса.


Один из лучших USB программаторов для PICmicro контроллеров и ключей KeeLOQ производства компании Microchip Technology. В лоте на выбор есть модели: PICKIT3, PICKIT2 или PICKIT 3,5. Лучше брать последние версии устройства. В комплекте идет плата расширения с ZIF-сокетом (PIC ICD2). Полный схемотехнический аналог фирменного программатора PICKIT 3 компании Microchip.


Новейшая версия универсального USB программатора EZP2019 с высокоскоростным интерфейсом SPI с большим набором адаптеров для EEPROM, клипсами и диском с программным обеспечением. Этот вариант несколько лучше дешевого программатора CH341A. Является усовершенствованной версией программаторов EZPO2010/EZP2013. В комплекте есть все необходимое для работы.


Есть еще один хороший вариант — универсальный программатор TL866II, но он не поместился в текст статьи, о нем будет позже.


Есть у меня знакомый, который занимается ремонтом автомобильного железа. Он как-то принес мне микроконтроллер, выпаянный из блока управления автономного отопителя. Сказал, что его программатор это не берет, а ему хотелось бы иметь возможность переливать прошивки туда-сюда, т.к. блоков много, в железе они часто одинаковые, а вот агрегаты, которыми они управляют отличаются. И вроде и блок есть взамен неисправного, но ПО разное и заменить просто так нельзя. Так как задачка была интересной, решил покопаться. Если тема интересна и вам, прошу под кат.

Подопытным оказался M306N5FCTFP. Это микроконтроллер группы M16C/6N5. Ядро M16C/60 разработано Mitsubishi, а т.к. преемником этой компании по части МК с 2003 года является Renesas, то сейчас эти микроконтроллеры известны именно под этим брендом.

Немного о самом микроконтроллере

Камешек представляет собой 16-разрядный микроконтроллер в 100-выводном QFP корпусе. Ядро имеет 1 МБайт адресного пространства, тактовая частота 20МГц для автомобильного исполнения. Набор периферии так же весьма обширный: два 16-разрядных таймера и возможность генерации 3-фазного ШИМ для управления моторами, всякие UART, SPI, I2C естественно, 2 канала DMA, имеется встроенный CAN2.0B контроллер, а также PLL. На мой взгляд очень неплохо для старичка. Вот обзорная схемка из документации:


Так как моя задача выдрать ПО, то так же весьма интересует память. Данный МК выпускался в двух вариантах: масочном и Flash. Ко мне попал, как выше уже упоминалось, M306N5FCTFP. Про него в описании сказано следующее:

  • Flash memory version
  • 128 KBytes + 4K (дополнительные 4K — так называемый блок А в подарок пользователю для хранения данных, но может хранить и программу)
  • V-ver. (автомобильное исполнение с диапазоном +125°C)

Как вытащить из устройства то, что разработчики втащили

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


Как видно из картинки выше, память разбита на 2 части: пользовательская область, и область загрузчика. Во второй как раз с завода залит загрузчик по умолчанию, который умеет писать, читать, стирать пользовательскую память и общается через асинхронный, синхронный, либо CAN-интерфейс. Указано, что он может быть переписан на свой, а может быть и не переписан. В конце концов это легко проверяется попыткой постучаться к стандартному загрузчику хотя-бы через UART… Забегая вперед: производитель отопителя не стал заморачиваться своим загрузчиком, поэтом копать дальше можно в этом направлении. Сразу оговорюсь, что есть еще способ параллельного программирования, но т.к. программатора для этого у меня не было, я не рассматривал этот вариант.

О защите от считывания


Все бы было совсем просто, если бы в загрузчике не была предусмотрена защита от несанкционированного доступа. Я просто приведу очень вольный перевод из мануала.

Функция проверки идентификатора

Используется в последовательном и CAN режимах обмена. Идентификатор, переданный программатором, сравнивается с идентификатором, записанным во flash памяти. Если идентификаторы не совпадают, команды, отправляемые программатором, не принимаются. Однако, если 4 байта вектора сброса равны FFFFFFFFh, идентификаторы не сравниваются, позволяя всем командам выполняться. Идентификатор — это 7 байт, сохраненных последовательно, начиная с первого байта, по адресам 0FFFDFh, 0FFFE3h, 0FFFEBh, 0FFFEFh, 0FFFF3h, 0FFFF7h, и 0FFFFBh.

Таким образом, чтобы получить доступ к программе, нужно знать заветные 7 байт. Опять же, забегая вперед, я подключился к МК, используя тот же «M16C Flash Starter» и убедился, что комбинации из нулей и FF не проходят и этот вопрос придется как то решать. Здесь сразу же всплыла мысль с атакой по сторонним каналам. Уже начал прикидывать в голове платку, позволяющую измерять ток в цепи питания, но решил, что интернет большой и большинство велосипедов уже изобретено. Вбив несколько поисковых запросов, довольно быстро нашел на hackaday.io проект Serge 'q3k' Bazanski, с названием «Reverse engineering Toshiba R100 BIOS». И в рамках этого проекта автор решал по сути точно такую же задачу: добыча встроенного ПО из МК M306K9FCLR. Более того — на тот момент задача им была уже успешно решена. С одной стороны я немного расстроился — интересная загадка разгадана не мной. С другой — задача превратилась из поиска уязвимости, в ее эксплуатацию, что обещало гораздо более скорое решение.

В двух словах, q3k точно по такой же логике начал изучение с анализа потребляемого тока, в этом плане он был в гораздо более выгодных условиях, т.к. у него был ChipWhisperer, этой штукой я до сих пор не обзавелся. Но т.к. его первый зонд для снятия тока потребления оказался неподходящим и вычленить из шумов что-то полезное у него не получилось, он решил попробовать простенькую атаку на время отклика. Дело в том, что загрузчик во время выполнения команды дергает вывод BUSY, чтобы проинформировать хост о том, занят он, или готов выполнять следующую команду. Вот, по предположению q3k, замер времени от передачи последнего бита идентификатора до снятия флага занятости мог послужить источником информации при переборе. При проверке этого предположения перебором первого байта ключа действительно было обнаружено отклонение по времени только в одном случае — когда первый байт был равен FFh. Для удобства измерения времени автор даже замедлил МК, отключив кварцевый резонатор и подав на тактовый вход меандр 666кГц, для упрощения процедуры измерений. После чего идентификатор был успешно подобран и ПО было извлечено.

Первый блин — граблями

Ха! Подумал я… Сейчас я быстренько наклепаю программку к имевшейся у меня STM32VLDiscovery c STM32F100 на борту, которая будет отправлять код и измерять время отклика, а в терминал выплевывать результаты измерений. Т.к. макетная плата с целевым контроллером до этого подключалась к ПК через переходник USB-UART, то, дабы ничего не менять на макетке, работать будем в асинхронном режиме.


Когда при старте загрузчика вход CLK1 притянут к земле, он понимает, что от него хотят асинхронного общения. Собственно потому я его и использовал — подтяжка была уже припаяна и я просто соединил проводами две платы: Discovery и макетку с целевым M306.

Заметка по согласованию уровней:

Т.к. M16 имеет TTL-уровни на выводах, а STM32 — LVTTL (упрощенно, в даташите подробнее), то необходимо согласование уровней. Т.к. это не устройство, которое, как известная батарейка, должно работать, работать и работать, а по сути подключается разок на столе, то с трансляторами уровней я не заморачивался: выходные уровни от STM32 пятивольтовый МК переварил, в смысле 3 вольта как «1» воспринимает, выходы от М16 подаем на 5V tolerant входы STM32 дабы ему не поплохело, а ногу, которая дергает RESET M16 не забываем перевести в режим выхода с открытым стоком. Я вот забыл, и это еще +2ч в копилку упущенного времени.
Этого минимума достаточно, чтобы железки друг друга поняли.

Логика атакующего ПО следующая:


  1. Устанавливаем соединение с контроллером. Для этого необходимо дождаться, пока завершится сброс, затем передать 16 нулевых символов с интервалом более, чем 20 мс. Это для того, чтобы отработал алгоритм автоопределения скорости обмена, т.к. интерфейс асинхронный, а МК о своей частоте ничего не знает. Стартовая скорость передатчика должна быть 9600 бод, именно на эту скорость рассчитывает загрузчик. После этого при желании можно запросить другую скорость обмена из пяти доступных в диапазоне 9600-115200 (правда в моем случае на 115200 загрузчик работать отказался). Мне скорость менять не нужно, поэтому я для контроля синхронизации просто запрашивал версию загрузчика. Передаем FBh, загрузчик отвечает строкой вроде «VER.1.01».
  2. Отправляем команду «unlock», которая содержит текущую итерацию ключа, и замеряем время до снятия флага занятости.

    Команда состоит из кода F5h, трех байт адреса, где начинается область идентификатора (в моем случае, для ядра M16C, это 0FFFDFh), длина (07h), и сам идентификатор.
  3. Измеряем время между передачей последнего бита идентификатора и снятием флага занятости.
  4. Увеличиваем перебираемый байт ключа (KEY1 на начальном этапе), возвращаемся к шагу 2 до тех пор, пока не переберем все 255 значений текущего байта.
  5. Сбрасываем статистику на терминал (ну или выполняем анализ «на борту»).

В итоге, для всех значений результаты были идентичны. Полностью идентичны. Тактовая частота таймера у меня была 24Мгц, соответственно разрешение по времени — 41,6 нс. Ну ок, попробовал замедлить целевой МК. Ничего не поменялось. Здесь в голове родился вопрос: что я делаю не так, как это делал q3k? После сравнения разница нашлась: он использует синхронный интерфейс обмена (SPI), а я асинхронный (UART). И где-то вот здесь я обратил внимание на тот момент, который упустил вначале. Даже на схемах подключения для синхронного и асинхронного режимов загрузчика вывод готовности назван по-разному:


В синхронном это «BUSY», в асинхронном это «Monitor». Смотрим в таблицу «Функции выводов в режиме Standart Serial I/O»:



«Семён Семёныч…»

Упущенная вначале мелочь завела не туда. Собственно, если в синхронном режиме это именно флаг занятости загрузчика, то в асинхронном (тот, который serial I/O mode 2) — просто «мигалка» для индикации работы. Возможно вообще аппаратный сигнал готовности приемопередатчика, оттого и удивительная точность его поднятия.

В общем перепаиваем резистор на выводе SCLK с земли на VCC, припаиваем туда провод, цепляем все это к SPI и начинаем сначала…

Успех!


В синхронном режиме все почти так же, только не требуется никакой предварительной процедуры установки соединения, упрощается синхронизация и захват времени можно выполнить точнее. Если бы сразу выбрал этот режим сохранил бы время… Я снова не стал усложнять и измерять время именно от последнего бита, а запускал таймер перед началом передачи последнего байта ключа, т.е. включаем таймер и отправляем в передатчик KEY7 (на скриншоте выше, из логического анализатора, видно расстояние между курсорами. Это и есть отсчитываемый отрезок времени).

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


По оси абсцисс у нас количество дискрет счетчика, по оси ординат, соответственно, передаваемое значение ключа. Отношение сигнал/шум такое, что даже никаких фильтров не требуется, прямо как в школе на уроке информатики: находим максимум в массиве и переходим в подбору следующего байта. Первые 6 байт подбираются легко и быстро, чуть сложнее с последним: там просто наглый перебор не проходит, нужен сброс «жертвы» перед каждой попыткой. В итоге на каждую попытку уходит что-то около 400 мс, и перебор идет в худшем случае в районе полутора минут. Но это в худшем. После каждой попытки запрашиваем статус и, как только угадали, останавливаемся. Я вначале вообще просто быстренько ручками перебрал идентификатор, вставляя в excel вывод консоли и строя график, тем более, что это была разовая задача, но уже для статьи решил дописать автоматический перебор, ради красивой консольки…


Конечно, если бы разработчик затер загрузчик (заменил своим), так просто выкрутиться не получилось бы, но в автомобильной электронике частенько МК вообще не закрыты. В частности в блоке управления с другого отопителя, в котором был установлен V850 того же Renesas все решилось подпайкой пары проводов и копированием прошивки штатной утилитой. Это в мире ЭБУ двигателем целые криптовойны. Видимо не нравится производителям явление чип-тюнинга и других видов вмешательства… Хотя это как гонка брони и снаряда — железки круче, дороже, но победителя нет…

Читайте также: