Как считать программу с микроконтроллера

как считать с AVR
На столе лежат десяток AVRок. Мне надо найти нужную мне. Установлена прогр. Algoritm Bilder и.

AVR Studia: При поступлении запроса на прерывание по входу INT1 считать содержимое ячейки памяти
Помогите решить задачу: При поступлении запроса на прерывание по входу INT1 считать содержимое.

Как подружить AVR+AVR?
Приветствую Вас уважаемые форумчане! Требуется связать 2 AVR-ки, по классической схеме Master ->.

Как заставить программу считать комбинацию клавиш
Как заставить программу считать комбинацию клавиш(делаю прогу-тест и хочу добавить возможность.

ПРОГРАММИРУЕМ С UNIPROF

В настоящее время, все больше людей, интересующихся электроникой, и конструирующих самостоятельно различные устройства, собирают устройства с применением микроконтроллеров. Даже начинающие, рано или поздно приходят к мысли, о необходимости их изучения, потому — что за ними будущее. Из наиболее широко распространенных, и относительно простых для изучения, по крайней мере, относительно других МК, могу назвать микроконтроллеры PIC и AVR.

Считывание защищенной прошивки из флеш-памяти STM32F1xx с использованием ChipWhisperer

Внешний вид микроконтроллера

По микроконтроллерам AVR, семейств Mega и Tiny, есть много информации в интернете, и огромное количество готовых схем и прошивок для них. Выбравшие для изучения AVR микроконтроллеры (МК), думаю, чаще всего собирают себе, сперва для прошивания МК Программатор Громова. Это очень легкий в сборке программатор, не содержит дефицитных деталей, не требует наладки, и собрать его может даже школьник. Главным недостатком его является то, что для его подключения к компьютеру необходим СОМ порт, который часто отсутствует на современных компьютерах. Я являюсь обладателем относительно современного системного блока, на материнской плате которого производители оставили СОМ порт, и разумеется, собрал себе Программатор Громова, начав свое знакомство с МК AVR.

Программатор Громова самодельный

Выбор оболочек работающих с этим программатором не велик, наиболее распространенные, это Ponyprog и Uniprof. Испробовав в работе обе из них, понял, что к Ponyprog, у меня почему-то душа не лежит, зато Uniprof меня полностью устроила. Так выглядит её рабочее окно:

Рабочее окно программы Uniprof

В настоящий момент программатор не подключен, после подключения программатора к программируемому МК, и подаче на него питания, вместо надписи синим текстом UNKNOWN будет показана модель микроконтроллера. В случае каких-либо проблем, с автоматическим определением типа МК, можно вручную указать его тип в появившемся меню. В настоящее время мощность современных компьютеров очень высока, для того чтобы прошить МК без ошибок, нужно поставить галочку Тормоз, в рабочем окне программы. Особенно это касается прошивания выставленных фьюзов.

Клонирование чипов AVR Atmel.

Иконки программы Uniprof

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

  • READ. Считать прошивку с микроконтроллера. Кликнув по этой иконке, мы считываем записанную ранее прошивку, с чипа микроконтроллера в буфер программы.
  • PROG. Записать прошивку в микроконтроллер. С помощью этой иконки мы записываем прошивку, из буфера программы в память чипа, или прошиваем МК.
  • TEST. Сверка прошивки, записанной в память чипа, с прошивкой в буфере программы.
  • FUSE. Выставление фьюзов. Установка фьюз битов, задающих параметры работы микроконтроллера. О них ниже поговорим отдельно.
  • ERASE. Стереть прошивку микроконтроллера. Перед тем, как залить в чип новую прошивку, мы должны удалить старую из его памяти. С помощью этой иконки, мы и осуществляем стирание.
  • HEX Загрузить прошивку в буфер, (иконка папки). Перед тем как прошить микроконтроллер, мы должны загрузить прошивку в буфер программы, сделать это можно с помощью этой иконки.
  • HEX Сохранить прошивку из буфера (иконка дискеты). Служит для сохранения на компьютере прошивки, снятой с чипа микроконтроллера, и загруженной в буфер. Сохранить прошивку можно, только если микроконтроллер не был защищен от копирования его прошивки, с помощью выставления определенных фьюз битов.

Рассмотрим что это такое, фьюз биты. Такое окно появляется, если мы кликнем на иконку Фьюзы:

Окно Унипроф

У некоторых типов микроконтроллеров, часть фьюзов представленных на скрине может отсутствовать, у других наоборот, могут быть дополнительные фьюзы, которых нет на этом рисунке. Фьюзы делятся на несколько групп: Перечислим их так, как они идут на рисунке, слева направо, это Lock Байт, установка lock битов, защищает прошивку от копирования, Low Байт, это Младший байт. High Байт, это Старший байт. Ext Байт, это Дополнительный байт.

Список фьюзов Тини 2313

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

Онлайн калькулятор фьюзов

При выставлении фьюзов, нужно быть очень внимательным, потому что ошибочное выставление некоторых из них, приведет к тому, что микроконтроллер залочится, и перепрошить его через последовательный интерфейс (SPI) будет невозможно. В таком случае если вы все же напутали с выставлением фьюзов, поищите среди своих знакомых радиолюбителя, с параллельным (высоковольтным) программатором или Реаниматором МК AVR. Также, если вы случайно выставили тактирование, не от внутреннего генератора МК, а от внешнего кварца, и микроконтроллер перестал быть “виден” при прошивании, нужно будет подключить кварц и 2 конденсатора в соответствии со схемой и распиновкой из даташита.

Фузы которые изменять осторожно

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

DWEN, это бит служащий для отладки микроконтроллера, если его изменить, МК будет также недоступен для программирования по SPI. Также нужно обратить внимание, что в некоторых программах-оболочках, фьюз биты выставляются инверсно, Uniprof относиться именно к таким программам. То есть в одних, наличие галочки означает, что бит не запрограммирован, а в других наоборот.

Читайте также:
Как удалить установочные файлы программ

Для того что не ошибиться, можно ориентироваться по биту Spien, есть на нем галочка или нет, так как если микроконтроллер виден, бит Spien запрограммирован, этот бит бывает установлен по умолчанию. В программе-оболочке Ponyprog, галочки ставятся инверсно относительно Uniprof. Автор статьи — AKV.

Originally posted 2018-10-24 00:00:00. Republished by Blog Post Promoter

Как считать программу с микроконтроллера

_________________
Создать электронный мир проще,чем его понять.

_________________
Кто не пил ни разу водки-тот не знает вкус воды!

А проверить это можно я так понимаю тупо прочитав микроконтроллер?

_________________
Создать электронный мир проще,чем его понять.

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Компания Компэл приглашает на вебинар, посвященный литиевым батарейкам и аккумуляторам (химическим источникам тока, ХИТ) производства FANSO и EVE. Мы расскажем об особенностях выбора литиевых батареек для устройств, работающих в импульсном режиме и в широком диапазоне температур, рассмотрим типы батареек, наиболее оптимальных для этих устройств, разберем, на что следует обращать основное внимание, чтобы избежать распространенных проблем. В программу мероприятия также включены вопросы о пассивации/депассивации, влиянии условий эксплуатации на основные параметры батареек, продлении срока службы батарейки и многое другое.

Компания MEAN WELL разработала две новые серии мощных управляемых источников питания – NSP-1600 и NSP-3200 с высотой 1U и выходной мощностью 1600 и 3200 Вт, соответственно. В новых сериях NSP-1600/ NSP-3200 реализована интеллектуальная система управления вентилятором (термостатическое управление). Также за счет исключения нескольких функций, избыточных для некоторых приложений, снижена стоимость этих изделий по сравнению с предшественниками.

Попробывал скопировать прошивку с набора МастерКИТ не получается,наверно они знают о защитных фьюзах.Мало того что у них цены космические,так они и схемы,и печатки и прошивки скрывают зла не хватает !

_________________
Создать электронный мир проще,чем его понять.

_________________
Создать электронный мир проще,чем его понять.

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

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется.
скушно, бабоньки!

_________________
— Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης

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

Часовой пояс: UTC + 3 часа

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Как считать микропрограмму с контроллера?

Как считать микропрограмму с этого контролера: фото прилагается.

стоит бит защита, надо бы её как то обойти, есть у кого нибудь информация ? готов заплатить деньги

6.jpg (114.3 Кб, 0 просмотров)

На фото плохо видна макрировка контроллера, видно что NEC. а дальше не понятно

Если это и можно сделать (я сам лично очень сомневаюсь), то за не малые деньги. Не так уж все просто.

Ну, вот, опять дилетантские псевдоэкономические рассуждения.

Да оборудования для читки защищённых МК никакого особо и не надо. Ну, программатор достаточно навороченый, и всё. А вот принцип защиты и последовательность действий — секрет фирмы (у каждой фирмы — свой). Где софт, где — последовательность кодов, где — ещё что. Вот за знание оного баблосы и берут.

Не знаете принципов — нефиг глупости писать! Значит, вопрос не к вам, а к профи. Другое дело, что напрямую рассказать вам всё это на открытом форуме — не только глупо, но и наказуемо.

Ищите на забугорных хакерских сайтах. Найдёте — и мне, плз, ссылочку в личку, для общего развития.

  1. Как стереть жесткий диск полностью
  2. Как снять водительское сиденье е34
  3. Как создать пользователя гость в windows 10
  4. Какой язык программирования нужен для it

Источник: www.kak-zarabotat-v-internete.ru

ПРОГРАММИРУЕМ С UNIPROF

В настоящее время, все больше людей, интересующихся электроникой, и конструирующих самостоятельно различные устройства, собирают устройства с применением микроконтроллеров. Даже начинающие, рано или поздно приходят к мысли, о необходимости их изучения, потому — что за ними будущее. Из наиболее широко распространенных, и относительно простых для изучения, по крайней мере, относительно других МК, могу назвать микроконтроллеры PIC и AVR.

Внешний вид микроконтроллера

По микроконтроллерам AVR, семейств Mega и Tiny, есть много информации в интернете, и огромное количество готовых схем и прошивок для них. Выбравшие для изучения AVR микроконтроллеры (МК), думаю, чаще всего собирают себе, сперва для прошивания МК Программатор Громова. Это очень легкий в сборке программатор, не содержит дефицитных деталей, не требует наладки, и собрать его может даже школьник. Главным недостатком его является то, что для его подключения к компьютеру необходим СОМ порт, который часто отсутствует на современных компьютерах. Я являюсь обладателем относительно современного системного блока, на материнской плате которого производители оставили СОМ порт, и разумеется, собрал себе Программатор Громова, начав свое знакомство с МК AVR.

Программатор Громова самодельный

Выбор оболочек работающих с этим программатором не велик, наиболее распространенные, это Ponyprog и Uniprof. Испробовав в работе обе из них, понял, что к Ponyprog, у меня почему-то душа не лежит, зато Uniprof меня полностью устроила. Так выглядит её рабочее окно:

Рабочее окно программы Uniprof

В настоящий момент программатор не подключен, после подключения программатора к программируемому МК, и подаче на него питания, вместо надписи синим текстом UNKNOWN будет показана модель микроконтроллера. В случае каких-либо проблем, с автоматическим определением типа МК, можно вручную указать его тип в появившемся меню. В настоящее время мощность современных компьютеров очень высока, для того чтобы прошить МК без ошибок, нужно поставить галочку Тормоз, в рабочем окне программы. Особенно это касается прошивания выставленных фьюзов.

Читайте также:
Как исправить ошибку запуск программы невозможен так как на компьютере отсутствует api ms

Иконки программы Uniprof

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

  • READ. Считать прошивку с микроконтроллера. Кликнув по этой иконке, мы считываем записанную ранее прошивку, с чипа микроконтроллера в буфер программы.
  • PROG. Записать прошивку в микроконтроллер. С помощью этой иконки мы записываем прошивку, из буфера программы в память чипа, или прошиваем МК.
  • TEST. Сверка прошивки, записанной в память чипа, с прошивкой в буфере программы.
  • FUSE. Выставление фьюзов. Установка фьюз битов, задающих параметры работы микроконтроллера. О них ниже поговорим отдельно.
  • ERASE. Стереть прошивку микроконтроллера. Перед тем, как залить в чип новую прошивку, мы должны удалить старую из его памяти. С помощью этой иконки, мы и осуществляем стирание.
  • HEX Загрузить прошивку в буфер, (иконка папки). Перед тем как прошить микроконтроллер, мы должны загрузить прошивку в буфер программы, сделать это можно с помощью этой иконки.
  • HEX Сохранить прошивку из буфера (иконка дискеты). Служит для сохранения на компьютере прошивки, снятой с чипа микроконтроллера, и загруженной в буфер. Сохранить прошивку можно, только если микроконтроллер не был защищен от копирования его прошивки, с помощью выставления определенных фьюз битов.

Рассмотрим что это такое, фьюз биты. Такое окно появляется, если мы кликнем на иконку Фьюзы:

Окно Унипроф

У некоторых типов микроконтроллеров, часть фьюзов представленных на скрине может отсутствовать, у других наоборот, могут быть дополнительные фьюзы, которых нет на этом рисунке. Фьюзы делятся на несколько групп: Перечислим их так, как они идут на рисунке, слева направо, это Lock Байт, установка lock битов, защищает прошивку от копирования, Low Байт, это Младший байт. High Байт, это Старший байт. Ext Байт, это Дополнительный байт.

Список фьюзов Тини 2313

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

Онлайн калькулятор фьюзов

При выставлении фьюзов, нужно быть очень внимательным, потому что ошибочное выставление некоторых из них, приведет к тому, что микроконтроллер залочится, и перепрошить его через последовательный интерфейс (SPI) будет невозможно. В таком случае если вы все же напутали с выставлением фьюзов, поищите среди своих знакомых радиолюбителя, с параллельным (высоковольтным) программатором или Реаниматором МК AVR. Также, если вы случайно выставили тактирование, не от внутреннего генератора МК, а от внешнего кварца, и микроконтроллер перестал быть “виден” при прошивании, нужно будет подключить кварц и 2 конденсатора в соответствии со схемой и распиновкой из даташита.

Фузы которые изменять осторожно

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

DWEN, это бит служащий для отладки микроконтроллера, если его изменить, МК будет также недоступен для программирования по SPI. Также нужно обратить внимание, что в некоторых программах-оболочках, фьюз биты выставляются инверсно, Uniprof относиться именно к таким программам. То есть в одних, наличие галочки означает, что бит не запрограммирован, а в других наоборот.

Для того что не ошибиться, можно ориентироваться по биту Spien, есть на нем галочка или нет, так как если микроконтроллер виден, бит Spien запрограммирован, этот бит бывает установлен по умолчанию. В программе-оболочке Ponyprog, галочки ставятся инверсно относительно Uniprof. Автор статьи — AKV.

Originally posted 2018-10-24 00:00:00. Republished by Blog Post Promoter

Источник: el-shema.ru

Считывание защищенной прошивки из флеш-памяти STM32F1xx с использованием ChipWhisperer

В предыдущей статье мы разбирались с Vcc-glitch-атаками при помощи ChipWhisperer. Нашей дальнейшей целью стало поэтапное изучение процесса считывания защищенной прошивки микроконтроллеров. С помощью подобных атак злоумышленник может получить доступ ко всем паролям устройства и программным алгоритмам. Яркий пример – взлом аппаратного криптокошелька Ledger Nano S с платой МК STM32F042 при помощи Vcc-glitch-атак.

Интересно? Давайте смотреть под кат.

О возможности считывания защищенной прошивки мы узнали из статьи, в которой приведены результаты выполнения Vcc-glitch-атаки – обхода байта защиты RDP через масочный загрузчик (bootloader) для нескольких микроконтроллеров (далее – МК). Также рекомендуем к прочтению статью о взломе ESP32.

Теоретической базой исследования послужило руководство успешного считывания защищенной прошивки для LPC1114 через масочный загрузчик с использованием ChipWhisperer.

Так же, как и в первой статье, мы решили проводить эксперименты на плате МК STM32F103RBT6:

Возможность записи данных в сектор флеш-памяти и RAM-памяти или их чтения, а также выполнения других действий с памятью МК определяется значением байта защиты (для STM32 – RDP). Для разных МК значения и назначение байтов защиты, а также алгоритм их проверки различается.

Аппаратная настройка

Приступим к проведению эксперимента. Для начала необходимо подключить ChipWhisperer к МК согласно рисунку:

Схема подключения ChipWhisperer к STM32 для считывания защищенной прошивки через масочный загрузчик

На схеме зачеркнуты элементы, которые следует удалить из платы STM32F103RBT6 (в отличие от стандартного подключения МК). Стрелками обозначены места подключения ChipWhisperer, а подписями – его пины.

Наличие внешнего кварца, представленного на схеме, не обязательно, поскольку при работе с масочным загрузчиком плата МК STM32F103RBT6 использует внутренний CLOCK с частотой 24 МГц, поэтому синхронизация между ChipWhisperer и МК отсутствует.

Перейдем к настройке ChipWhisperer. Как уже было отмечено выше, рекомендуемая частота работы ChipWhisperer – 24 МГц (или другое кратное значение). Чем выше кратность этой частоты, тем точнее можно настроить момент атаки. Из-за отсутствия синхронизации подбор параметра scope.glitch.offset необязателен, ему можно присвоить любое значение.

Параметры scope.glitch.repeat и scope.glitch.width необходимо подбирать в зависимости от установленной частоты ChipWhisperer. При большом значении частоты все кратковременные импульсы, количество которых устанавливается при помощи scope.glitch.repeat, сливаются в один длительный импульс. Поэтому можно подбирать значение параметра scope.glitch.width, а scope.glitch.repeat зафиксировать, либо наоборот. Мы обнаружили, что оптимальная длительность импульса должна составлять около 80 нс (определяется как ширина импульса на его полувысоте).

Читайте также:
Как создать диск с программами и драйверами

Осталось подобрать значение параметра scope.glitch.ext_offset.

Подбор scope.glitch.ext_offset

Сначала необходимо выбрать момент атаки. Согласно схеме, представленной в документе компании STM, проверка значения байта защиты выполняется после получения запроса на чтение данных сектора флеш-памяти:

Алгоритм ответа на запрос о чтении данных сектора флеш-памяти

Чтобы удостовериться в верности такой схемы проверки, мы считали исполняемый код загрузчика подобного МК без защиты RDP через ST-Link. На рисунках ниже показаны части алгоритма обработки команды Read Memory command.

Общий вид обработки команды чтения памяти (хорошо видны вызов функции проверки RDP и посылка NACK в случае неудачной проверки)

Тело функции проверки RDP

Обратим внимание на тело функции проверки RDP: видно, что происходит чтение регистра по адресу 0x40022000 + 0x1C , логический сдвиг на 30 разрядов и ветвление. Из документации PM0075 Programming manual (STM32F10xxx Flash memory microcontrollers) становится понятно, что 0x40022000 – это базовый адрес контроллера flash memory, а 0x1C – это смещение регистра FLASH_OBR, в котором нас интересует второй бит RDPRT: Read protection, в котором содержится статус защиты RDP.

Необходимый момент проведения атаки – отработка инструкции LDR (загрузки из памяти). Эта инструкция располагается между запросом на чтение прошивки (отправление байта 0x11 с контрольной суммой 0xEE ) и ответом ACK / NOACK МК по UART. Для того чтобы визуально зафиксировать этот момент, необходимо подключить осциллограф к UART1_RX (пин PA10) и UART1_TX (пин PA9), а затем отслеживать изменение напряжения по UART1. В результате осциллограмма атаки по питанию с подобранным значением scope.glitch.ext_offset должна выглядеть примерно так:

Выбор момента проведения атаки

Скрипт считывания прошивки

Теперь необходимо указать момент срабатывания триггера CW_TRIG в коде Python с целью перехвата момента передачи контрольной суммы по UART1_RX. У ChipWhisperer есть библиотека для общения с масочным загрузчиком МК STM32. В штатном режиме эта библиотека используется для загрузки на МК прошивок из руководств при помощи класса class STM32FSerial(object) , расположенного в файле programmer_stm32fserial.py по пути software/chipwhisperer/hardware/naeusb/ . Для активации срабатывания триггера необходимо скопировать этот класс в главный исполняемый скрипт, чтобы метод класса CmdGeneric(self, cmd) стал глобально доступным, и добавить команду scope.arm() до передачи контрольной суммы (0xEE) запроса на считывание сектора памяти. Итоговый класс приведен в спойлере ниже.

Класс для общения ChipWhisperer с STM32

import time import sys import logging from chipwhisperer.common.utils import util from chipwhisperer.hardware.naeusb.programmer_stm32fserial import supported_stm32f from chipwhisperer.capture.api.programmers import Programmer # class which can normally using internal CW library for reading STM32 firmware by UART class STM32Reader(Programmer): def __init__(self): super(STM32Reader, self).__init__() self.supported_chips = supported_stm32f self.slow_speed = False self.small_blocks = True self.stm = None def stm32prog(self): if self.stm is None: stm = self.scope.scopetype.dev.serialstm32f else: stm = self.stm stm.slow_speed = self.slow_speed stm.small_blocks = self.small_blocks return stm def stm32open(self): stm32f = self.stm32prog() stm32f.open_port() def stm32find(self): stm32f = self.stm32prog() stm32f.scope = self.scope sig, chip = stm32f.find() def stm32readMem(self, addr, lng): stm32f = self.stm32prog() stm32f.scope = self.scope #answer = stm32f.readMemory(addr, lng) answer = self.ReadMemory(addr, lng) return answer def stm32GetID(self): stm32f = self.stm32prog() stm32f.scope = self.scope answer = stm32f.cmdGetID() return answer # Needed for connection to STM after reload by reset_target(scope) method def FindSTM(self): #setup serial port (or CW-serial port?) stm32f = self.stm32prog() try: stm32f.initChip() except IOError: print(«Failed to detect chip. Check following: «) print(» 1. Connections and device power. «) print(» 2. Device has valid clock (or remove clock entirely for internal osc).») print(» 3. On Rev -02 CW308T-STM32Fx boards, BOOT0 is routed to PDIC.») raise boot_version = stm32f.cmdGet() chip_id = stm32f.cmdGetID() for t in supported_stm32f: if chip_id == t.signature: # print(«Detected known STMF32: %s» % t.name) stm32f.setChip(t) return chip_id, t # print(«Detected unknown STM32F ID: 0x%03x» % chip_id) return chip_id, None

Следует обратить внимание на то, что масочный загрузчик STM32F1хх позволяет считывать за один запрос не более 256 байт прошивки из указанного сектора флеш-памяти. Поэтому при считывании всей прошивки МК необходимо в ходе Vcc-glitch-атаки выполнить несколько запросов на чтение. Затем полученные 256 байт следует разбить на восемь 32-байтных массивов и сформировать из них файл формата HEX.

Код HEX-конвертера и вспомогательные функции

def int2str_0xFF(int_number, number_of_bytes): return ‘X>’.format(int_number,number_of_bytes_in_string) def data_dividing_from_256_to_32_bytes (data_to_divide, mem_sector, mem_step=32): if mem_sector > 0xFFFF: mem_conversion = mem_sector >> 16 mem_conversion = mem_sector — (mem_conversion > 20) > i*4 temp_addr_string -= ((temp_addr_string >> i*4) > 8) + 1 crcacc = (crcacc_2nd_symbol

Настройка параметров ChipWhisperer завершена. Итоговый скрипт на считывание прошивки выглядит следующим образом:

# string of start HEX file Start_of_File_Record = ‘:020000040800F2’ # string of end HEX file End_of_File_Record = ‘:00000001FF’ length_of_sector = 256 if length_of_sector % 4 != 0: sys.exit(‘length_of_sector must be equal to 4’) output_to_file_buffer = » output_to_file_buffer += Start_of_File_Record + ‘n’ mem_current = mem_start while mem_current < mem_stop: # flush the garbage from the computer’s target read buffer target.ser.flush() # run aux stuff that should run before the scope arms here reset_target(scope) # initialize STM32 after each reset prog.FindSTM() try: # reading of closed memory sector data = prog.stm32readMem(mem_current, length_of_sector) except Exception as message: message = str(message) if «Can’t read port» in message: # print(‘Port silence’) pass elif ‘Unknown response. 0x11: 0x0’ in message: # print(‘Crashed. Reload!’) pass elif ‘NACK 0x11’ in message: # print(‘Firmware is closed!’) pass else: # print(‘Unknown error:’, message, scope.glitch.offset, scope.glitch.width, scope.glitch.ext_offset) pass else: data_to_out = data_dividing_from_256_to_32_bytes (data, mem_current) print(data_to_out) output_to_file_buffer += data_to_out mem_current += length_of_sector output_to_file_buffer += End_of_File_Record + ‘n’ send_to_file(output_to_file_buffer, File_name, directory)

Все закомментированные сообщения print() после строчки except Exception as помогают отслеживать состояние МК при поиске оптимальных параметров glitch-импульса. Для отслеживания конкретного состояния МК достаточно раскомментировать необходимое сообщение print() .

Результаты считывания

На видео продемонстрирована загрузка прошивки на МК через программатор ST-LINK, перевод RDP в состояние защиты и последующее считывание прошивки:

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru