Считывание защищенной прошивки из флеш-памяти 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) запроса на считывание сектора памяти. Итоговый класс приведен в спойлере ниже.
Следует обратить внимание на то, что масочный загрузчик STM32F1хх позволяет считывать за один запрос не более 256 байт прошивки из указанного сектора флеш-памяти. Поэтому при считывании всей прошивки МК необходимо в ходе Vcc-glitch-атаки выполнить несколько запросов на чтение. Затем полученные 256 байт следует разбить на восемь 32-байтных массивов и сформировать из них файл формата HEX.
Настройка параметров ChipWhisperer завершена. Итоговый скрипт на считывание прошивки выглядит следующим образом:
Все закомментированные сообщения print() после строчки except Exception as помогают отслеживать состояние МК при поиске оптимальных параметров glitch-импульса. Для отслеживания конкретного состояния МК достаточно раскомментировать необходимое сообщение print() .
Результаты считывания
На видео продемонстрирована загрузка прошивки на МК через программатор ST-LINK, перевод RDP в состояние защиты и последующее считывание прошивки:
Успешному проведению Vcc-glitch-атаки могут помешать следующие ошибки:
• считывание неверного сектора памяти;
• самопроизвольное удаление прошивки.
Избежать подобных ошибок поможет точный выбор момента атаки путем увеличения частоты работы ChipWhisperer.
После разработки и отладки алгоритма считывания защищенной прошивки мы провели тестовое считывание прошивки программатора ST-LINK-V2.1, который работает на МК STM32F103CBT6. Считанную прошивку мы зашили на «чистый» МК STM32F103CBT6 и установили его вместо заводского. В результате ST-LINK-V2.1 с замененным МК работал в нормальном режиме, будто подмены не было.
Также мы попробовали провести серию атак на STM32F303RCT7. Этот МК в ходе атаки вел себя идентично STM32F103RBT6, но ответ на запрос чтения памяти содержал байт, равный 0х00, что не совпадало с ожидаемым нами результатом. Причина такой неудачи заключалась в более сложном и развитом принципе организации защиты этих МК.
В МК STM32F1xx существует два состояния защиты: защита выключена (Level 0) и включена (Level 1). В старших моделях предусмотрено три состояния защиты: защита отключена (Level 0, RDP = 0x55AA), защита флеш- и SRAM-памяти (Level 2, RDP = 0x33CC) и защита только флеш-памяти (Level 1, RDP принимает любые значения, отличные от 0x55AA и 0x33CC). Поскольку Level 1 может принимать множество значений RDP, установить Level 0 достаточно тяжело. С другой стороны, существует возможность понижения уровня защиты с Level 2 на Level 1 сбиванием одного бита в байте RDP (показано на рисунке ниже), что открывает доступ к SRAM-памяти.
Сравнение значений RDP для разных уровней защиты прошивки
Остается только понять, как этим может воспользоваться злоумышленник. Например, с помощью метода CBS (Cold-Boot Stepping), описанного в этой статье. Этот метод основан на поэтапном снимке состояния SRAM-памяти (периодичность выполнения каждого снимка была в районе микросекунды) после загрузки МК с целью получения ключей шифрования, скрытых паролей или любой другой ценной информации. Авторы предполагают, что метод CBS сработает на всех сериях МК STM32.
Выводы
Подведем итоги наших экспериментов. Выполнение Vcc-glitch-атаки с использованием данных, полученных в результате предыдущего исследования (о котором можно прочитать здесь), заняло у нас несколько дней. А значит, научиться проводить подобные атаки достаточно легко.
Vcc-glitch-атаки опасны тем, что от них сложно защититься. Для уменьшения вероятности успешного проведения подобных атак предлагается использовать МК с более высоким уровнем защиты.

Raccoon Security – специальная команда экспертов НТЦ «Вулкан» в области практической информационной безопасности, криптографии, схемотехники, обратной разработки и создания низкоуровневого программного обеспечения.
ПРОГРАММИРУЕМ С UNIPROF
В настоящее время, все больше людей, интересующихся электроникой, и конструирующих самостоятельно различные устройства, собирают устройства с применением микроконтроллеров. Даже начинающие, рано или поздно приходят к мысли, о необходимости их изучения, потому — что за ними будущее. Из наиболее широко распространенных, и относительно простых для изучения, по крайней мере, относительно других МК, могу назвать микроконтроллеры PIC и AVR.

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

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

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

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

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

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

При выставлении фьюзов, нужно быть очень внимательным, потому что ошибочное выставление некоторых из них, приведет к тому, что микроконтроллер залочится, и перепрошить его через последовательный интерфейс (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
Программа AVRDUDE_PROG: программирование микроконтроллеров AVR ATmega и ATtiny
Популярнейшая программа AVRDUDE_PROG 3.3 предназначена для программирования микроконтроллеров AVR ATmega и ATtiny:
1. Возможность самостоятельного добавления программаторов, настройки скорости программирования и т.п;
2. Возможность самостоятельного добавления МК;
3. Редактирование и настройка отображения Fuses битов;
4. Выбор инверсных или прямых Fuses битов;
5. Окна вывода значений Fuses битов в HEX формате;
6. Сохранение настроек программирования при закрытии программы, т.е. при последующем открытии все настройки восстановятся.

В прошлой статье я рассказал о простом (но очень хорошем) программаторе для прошивки микроконтроллеров AVR ATmega и ATtiny — USBASP AVR программатор. В той же статье я указал какие программы поддерживают данный программатор. Наиболее лучшей из них, на мой взгляд, является программа AVRDUDE_PROG автором которой является Сергей Боднар. О ней мы сегодня и поговорим.
Последняя версия программы AVRDUDE_PROG — 3.3 , из программы всегда можно попасть на сайт разработчика и скачать новые версии.
Программа очень проста в использовании, имеет приятный интуитивно понятный интерфейс на русском языке, поддерживает очень много различных программаторов и практически все микроконтроллеры ATmega и ATtiny. Немаловажно и то, что в программу можно самому вносить изменения — добавлять программаторы, микроконтроллеры, изменять некоторые настройки (все подробно расписано на сайте разработчика).
Программа не требует установки на компьютер, необходимо только разархивировать скачанный файл и можно сразу приступать к работе, поддерживаются все разновидности Windows — от ХР до 10.
Окно запущенной программы AVRDUDE_PROG:

Что есть что:
1:
— окно выбора типа микроконтроллера
— кнопка «Стереть все» — очищает все внутренности микроконтроллера
2:
— чтение калибровочных ячеек микроконтроллера

В данном примере показаны четыре калибровочные ячейки микроконтроллера ATmega8 для внутреннего RC генератора:
ВВ — для частоты 1 МГц (частота по умолчанию)
BD — для частоты 2 МГц
В2 — для частоты 4 МГц
В2 — для частоты 8 МГц
При тактировании микроконтроллера ATmega8 частотой 1 МГц от внутреннего RC генератора (по умолчанию) содержимое первой калибровочной ячейки автоматически учитывается микроконтроллером для подстройки внутреннего генератора. При других частотах — содержимое соответствующей калибровочной ячейки необходимо вручную вводить в регистр микроконтроллера для получения более стабильной частоты (если такое нужно). К примеру, в конструкции «Трехканальный термостат, термоморегулятор, таймер. «, которая работает с тактовой частотой 8 МГц от встроенного генератора с внутренней RC цепочкой, требуется перед прошивкой ЕЕPROM памяти записать в определенную ячейку HEX файла значение калибровочной ячейки для частоты 8 МГц.
3:
— выбор HEX файла для прошивки Flash памяти микроконтроллера, сверка записанного файла с оригиналом, чтение данных из памяти
4:
— выбор HEX или EEP файла для прошивки EEPROM памяти микроконтроллера, сверка и чтение
5:
— выбор программатора (по умолчанию — USBASP)
Если вы будете пользоваться программой скачанной с сайта разработчика то там, по умолчанию (первым в списке), будет идти «USBASP», у меня на картинке 4 разновидности USBASP программатора:
— Usbasp_1M
— Usbasp_4M
— Usbasp_8M
— Usbasp-32кГц
Дело в том, что программатор USBASP позволяет записывать файлы прошивки с двумя скоростями:
— для МК с тактовой частотой 1,5 МГц и выше (без перемычки на J3) — скорость записи 375 кГц
— для МК с тактовой частотой менее 1,5 МГц (с перемычкой на J3) — скорость записи 5 кГц
Для нормальной записи прошивки в МК требуется скорость в 4 раза меньше, чем установленная тактовая частота.
Для прошивки нового МК, у которого по умолчанию тактовая частота 1 МГц, необходимо устанавливать в программаторе перемычку на разъем J3, а сама скорость — 5 кГц, в некоторых случаях начинает нервировать.
Для того, чтобы не портить нервы, не дергаться с перемычкой, я программно установил 4 варианта скорости записи, которые выбираются в зависимости от текущей тактовой частоты МК:
— Usbasp_1M — скорость 187,5 кгЦ, для частот 1-4 МГц
— Usbasp_4M — скорость 375 кГц, для частот 4-8 МГц
— Usbasp_8M — скорость 750 кГц, для частот 8 и более МГц
— Usbasp-32кГц — скорость 4 кГц, для часового кварца
Все эти установки прописаны в самом начале файла «programm.ini» где скорость записи зависит от ключа «-В» и числа после него:


6:
— выбор отображения FUSE битов — прямой (как в UniProf и даташитах) и инверсный (как в PonyProg)
7:
— окно вывода служебной информации о выполняемых и выполненных операциях
Внешний вид окна «FUSES» программы AVRDUDE_PROG:

Тут все просто — расставляем в нужном виде галочки или убираем их и программируем FUSE биты. Если что-то намудрили — нажатие кнопки «По умолчанию» приведет установки FUSE битов в значения «по умолчанию» (сами FUSE биты в МК не изменятся!). Очень внимательно устанавливайте FUSE биты — ошибка может привести к отказу микроконтроллера.
Хочу обратить ваше внимание на самую распространенную ошибку при установки FUSE битов. В большинстве случаев мы изменяем только биты ответственные за выбор источника тактирования и частоту тактирования, к примеру для ATmega8 это: CKSEL0-CKSEL3. По умолчанию у ATMEGA8 тактовая частота 1 МГц от внутреннего генератора — сброшен бит CKSEL0 (стоит галочка). Нам, допустим, нужно установить тактовую частоту 8 МГц от внутреннего генератора — сбросить бит CKSEL2 (поставить галочку), что мы и делаем. Но при этом ЗАБЫВАЕМ УСТАНОВИТЬ БИТ CKSEL0 (убрать галочку)!. В результате, программируя FUSE биты, мы получаем совершенно иной результат — программа не работает, а МК не реагирует на программатор. Забыв сбросить бит CKSEL0 мы получаем другой источник тактирования МК — внешний RC. Отчаиваться не надо, главное разобраться в том, что вы получили в результате. В нашем примере — внешний RC, смотрим даташит, подсоединяем к соответствующим входам МК сопротивление и конденсатор (по схеме из даташита и с нужными номиналами) и восстанавливаем контроль над МК.
Внешний вид окна «Автоматическое программирование» AVRDUDE_PROG:

Здесь можно задать первоначальные настройки для разных случаев использования программы.
Как видите — программа AVRDUDE_PROG проста и понятна в использовании, за что и скажем спасибо Сергею Боднару!
Наука и жизнь в России
Информацией по этой теме я хотел поделиться давно, но как и многие другие проекты, он долго ждал своего часа. Когда лучше делиться чем-то новым? — я думаю что как можно раньше, информация устаревает, а через много времени даже делается ненужной. Но тогда я не мог.
Я думаю, что был одним из тех, кто пытался слить прошивку из микроконтроллера, получить из нее исходный код и переделать под свои задачи. Сам термин Reverse ingeneering подразумевает обратную разработку проекта с целью завладеть чужими интеллектуальными данными. Во многих случаях бывает сложнее написать программу с нуля, чем переделать готовую, а в некоторых случаях вообще невозможно понять алгоритм работы устройства без наличия кода микроконтроллера. Можно также просто клонировать чужую интеллектуальную разработку с целью наживы.
В советские годы наши ученые уделяли достаточно внимания изучению и копированию зарубежных микросхем с целью выпуска отечественных аналогов. В специализированных лабораториях удалялся корпус, защищающий кристалл, и потом послойно фотографировалась маска полупроводников на кристалле — таким образом считывалась вся структура кристалла.
С тех далеких времен много воды в реке утекло, простые микросхемы заменили микроконтроллеры, ПЛИСы и другие программируемые устройства. Теперь не требовалось изготавливать для каждой отдельной задачи новую матрицу, а для реализации задачи достаточно стало написать программу и занести ее в память микросхемы. Это удешевляло производство, ускоряло процесс разработки, но позволяло копировать чужую интеллетуальную собственность. Для избежания этого разработчики программируемых устройств придумали защиты от копирования — биты защиты или более сложные.
Мне приходилось иметь дело с микроконтроллерами семейств PIC, AVR, MSP430, где результат меня порадовал. А также holtek и XMEGA от Atmel, где результат получался половинчатый или вовсе отсутствовал.
Давайте рассмотрим на примере. Мы купили дорогое электронное устройство, разбираем. Находим программируемую микросхему(их может быть несколько), скачиваем datasheet на нее. Мне надо получить с нее прошивку и переделать алгоритм работы. Итак, что нас ждет: практически любой производитель товара защищает микроконтроллер от считывания, поэтому, будьте уверены, что в микроконтроллере установлен как минимум бит защиты.
Для более сложной защиты микроконтроллера используется кодирование данных с ключом шифрования. В каждом отдельном чипе производителем устанавливается свой ключ шифрования. При заливке прошивки, прошивка преобразуется по определенному алгоритму через этот ключ шифрования. В результате в памяти микроконтроллера хранится набор цифр. Даже при считывании прошивки, ее не получится раскодировать. Одним из представителей является семейство XMEGA от Atmel. Но технологии не стоят на месте, и то, что было невозможно три года назад, может быть вполне возможно сейчас.
Если микросхема затерта, и не удается определить ее название, рисуем электрическую схему подключения микроконтроллера, по его выводам питания и размерам корпуса практически всегда можно однозначно определить семейство. В свое время я перелопатил горы datasheets, но нашел нужный микроконтроллер.
Пытаемся считать прошивку и fuses с помощью программатора. Если микросхема имеет какую-либо защиту, не сильно расстраиваемся.
В настоящее время существует, я бы сказал, несколько вариантов получения прошивки из защищенного микроконтроллера — они могут подходить целому семейству, а могут быть различны для разных микросхем одного семейства. Например, если в импульсе понизить/повысить напряжение питания в процессе чтения бита защиты, то возможно его игнорирование, после чего считывается прошивка.
Но чаще применяется декапсуляция (получение прямого доступа к кристаллу химическим травлением, механической обработкой, воздействием температуры) в паре со следующим: после декапсуляции напаивается или удаляется какая-либо перемычка или происходит облучение ультрафиолетом отдельной области битов защиты.

Практический пример декапсуляции можно посмотреть тут http://geektimes.ru/post/127281/. Декапсуляция и все эти способы требуют дорогостоящего оборудования и обширных знаний для каждой отдельной микросхемы (то есть горы убитых на практике микросхем). Благо, что есть фирмы, которые занимаются этим делом. Большинство из них находятся в Китае, цены в них значительно ниже чем в других фирмах, значит с ними мы и будем работать. Сайт, указанный выше, дает ссылку на http://www.mefas.com/. Лично я пользовался услугами другой фирмы — http://www.mikahk.com или http://www.break-ic.com/faq.asp — это одна и та же фирма, имеющая разные доменные имена сайта. Заходим на http://www.mikahk.com и смотрим, какие микросхемы они умеют взламывать…. Там очень большой список различных производителей, и еще больший микросхем. Я не буду его здесь приводить, перейдите по ссылке.
Итак, микросхема PIC16F914 в далеком 2012 году обошлась в 170 долларов. MSP430F415 в 800 долларов. С тех пор цены выросли в полтора раза. Люди в этой фирме умные, переписываться с ними легко на английском языке. Я отправил письмо им на mail типа «I need the Hex file from chip PIC16F914». Они сразу написали стоимость, вероятность считывания почти 100 процентная. Присылать чип только по EMS (дешевле) или DHL почте на адрес: Mikatech Innovative Limited 24E, Lily Silver International Building, Buji, Shenzhen, Guangdong, China 518112. Оплату производил в Сбербанке : перевод за границу без открытия счета в долларах.
Я спросил, а если лапки у микроконтроллера пережженные, они ответили что умеют их восстанавливать. Но, однажды, я отправил им микроконтроллер с пережженным портом программирования — они так и ответили — лапки пережжены, считать прошивку не можем (возможно, не захотели браться или реально не смогли ).
Итак, у нас есть hex (или bin) файл, полученный таким образом или скачанный из интернета без исходного кода. Заливаем его в другой такой же контроллер и смотрим, всё ли работает. Если всё работает, дизассемблируем его. Производителями микроконтроллеров в большом количестве выпускаются различные компиляторы ассемблерного и си кода, но обратный процесс преобразования из машинного кода в язык, на котором пишут программы, разработчикам микроконтроллеров не нужен. И как следствие — это программы сторонних производителей. Их весьма не много.
А если их нет — преобразование можно производить и вручную — например, взяв datasheet на микроконтроллер, можно найти его набор ассемблерных команд и их интерпретацию компилятором. Команды бывают различной размерности, это надо учитывать, чтобы не допустить ошибок при декодировании. Было бы совсем не сложно и написать свою собственную программу дизассемблирования. Но мне ничего этого не потребовалось, для работы с PIC16 есть Picdisasm106.zip, для всех других производителей и семейств я использовал IDA PRO (в 2012году у меня был образ ida61fix.iso). К нему я так же нашел Hex-Rays decompiler — это плагин, позволяющий получить из ассемблерного кода программы код на си. В то время с помощью него я занимался созданием си кода компьютерных программ на платформе x86, но си код для микроконтроллеров он делать не мог (не знаю, может быть, сейчас всё изменилось).
К тому же не все типы микроконтроллеров, выпущенные разработчиками, были в IDA PRO. Это означает, что некоторые регистры микроконтроллера при дизассемблировании будут иметь другое имя, отличное от стандартного и потребуется вручную его переименовывать. Я же создавал новый файл шаблона регистров для микроконтроллера на примере существующих, отсутствующего в списках, называл его нужным именем. Потом у меня появлялся в списках отсутствующий микроконтроллер в IDA PRO. То есть, вы можете добавить микроконтроллер любого производителя, отсутствующего в списках, что не может не радовать. После получения кода из этой программы, код надо адаптировать под среду ассемблера, в которой вы работаете (написать необходимые директивы препроцессора), также, не исключено, что в коде будут ошибки. Под исправленный код создаем проект и компилируем. Полученный hex файл и исходный сравниваем через программу сравнения файлов WinMerge. Находим отличия, и подгоняем так ассемблерный текст, чтобы после компилирования hex файлы стали одинаковы.
Далее в симуляторе (программном или аппаратном) в ходе пошаговой отладки пытаемся понять алгоритм текста, пишем комментарии и после понимания переписываем код на си — и заливаем в микроконтроллер. Переписывание кода на Си самый длительный процесс во всем этом, поэтому рекомендую исправлять код ассемблера без переделки на Си. При исправлении ассемблерного кода обратите внимание, по каким адресам будут располагаться данные во flash и ОЗУ, дело в том что они начнут смещаться относительно исходных и в случае косвенной адресации будет сбой. А косвенная адресация используется всегда, поэтому создавайте метки и указывайте конкретно адреса, с которых начинается каждый кусок подпрограммы.
На самом деле это не сложно. Вот и всё, если будут вопросы — спрашивайте).
708 комментариев
- 18 Ноя 2015 в 07:48 Армен пишет:
здравствуйте, прочитал ваш пост и понял что нашел того кто мне может помоч. Работаю автоэлектриком в Армении но хочу идти в перед и научится программирование ключей и замков мерседес бенца, после долгого изучения по интернету понял что надо научится язык алгоритма ассемблер, вопрос- какая литература нужна для этого, есть какой нибудь программа с помошю которого можно научится и как вы можете мне помоч по этому вопросу? консультация не помешает, буду очень благодарен
Очень познавательная статья, к сожалению стоимость работ по извлечению прошивок из микроконтроллеров китайскими коллегами непомерно высока. За прошивку из MSP430F196 на сайте http://www.mikahk.com запросили 900USD, что при нынешнем курсе (на 5.01.2016 года)составляет 66000 рублей. Так что обольщаться не стоит.
Куда можно обратится по вопросу касаемого логики ATF1508 (слить проект)
Здраствуйте! Подскажите куда обратиться по поводу переделки прошивки с персонификацией ( имееться прошивка в hex) в прошивки лишенную ограничения.
Добрый день, к кому обратиться — есть прошивка с STM32, надо бы отреверсить.
Алексей. пишите на dmitry19.sp@mail.ru — сделаем nsp430 дешевле
Разводилово это. Не повторяйте наших ошибок. Испытано на себе). Отправил им PIC контроллер. Все нормально, получили. Заплатил вперед, начали работать. Через пять дней говорят, что чип оказался с медными проводниками, а они думали что он с алюминием и поэтому испортили. Ладно, поверили, тем более что согласились переделать бесплатно, только надо еще чип выслать. Выслали еще, на этот раз сразу два (на всякий случай). Посылку получили, через неделю высылают прошивку. УРА, думаем. Прошились — ничего не работает. Мы начали копаться, менять программаторы и т.д. потратили кучу времени и сил, пока точно не убедились что код неправильный. ПОсле претензий они выслали какой-то другой вариант кода, согласившись что они что-то напутали. Мы снова обрадовались, ну, думаем наконец-то! Хрена с два. Ничего не работает. Тогда они попросили выслать им готовый девайс,чтобы они все проверили и если не работает, то вернуть деньги. Мы почесали репу и решили отправить девайс. Они его получили и говорят, микросхема в девайсе работает а ту что до этого мы присылали -не работает, поэтому они и код сняли неправильный! Мы говорм, что все было тщательно проверено, тщательно упаковано в антистатику и т.д., что микросхема была 1000% рабочая, но у них один ответ — дескать мы ломаем микросхемы тысячами и ошибка исключена, поэтому они правы, а мы нет. Ну что сказать -не придерешься, логика железная. И конечно никакого возврата, но зато предложили еще раз заплатить, чтобы они сняли прошивку с исправной микросхемы. Мы предложили сначала снять, потом мы заплатим, мы же заинтересованы в этом, но, как несложно догадаться, мы были мягко посланы. Тут мы окончательно протрезвели и убедились, в том что нас просто разводят, и мы конечно высказали все что о них думаем, конечно же в очень мягкой форме, думаю, они остались довольны). Так что, ребята, думайте сами, надо оно вам это иди нет. 99,9 против 0,1 что такая участь ждет и вас тоже. http://www.mikahk.com — мошенники, http://www.break-ic.com — мошенники. Такое наше мнение. Всем удачи в делах!
Answer to above Mr Alexander
You sent us one 16F886 project, we sent you the code, you tested and said the code was not working, we asked you to send us a working device to test, you did send us the PCB, after testing the PCB, we answerd you: «First, we tested the chip on board, we call it master No.2, and proved it was working.
Second, we soldered the master chip we had done for you, we call it master No.1, it was not working.
We compared the inside master No.1 and master No.2, there were slight difference, so our engineer said master No.2 should be a upgraded edition of master No.1, you knew it, right?».
If the code was not working, you should had sent us same master No.1 on the PCB to us, but you send us a PCB which master No.2 work on it and claimed to us hat our code for the master No.1 was not working, wanted us to do the master No.2 for free, I am sure this is a very simple logic, you want us to do 2 chips but you only want to pay once, we are not afraid of your black mail.
Answer to above Mr Alexander
You sent us one 16F886 project, we sent you the PCB, after testing the PCB, we answeredd you : «First, we tested the chip on board, we call it master No.2, and proved it was working.
Second, we soldered the master chip we had get the code for you, we called it master No.1, it was not working.
We compared the code inside master No.1 and master No.2, there was a slight difference, so our engineer said master No.2 should be a upgraded edition of master No.1, you knew it, right?».
I have no idea why some of the text were lost when I upload it.
simply put, this mr Alexander sent us one project, paid the money, we sent him the code, he said the code was not working, sent us another master chip containing different code and complaint we had not done the job, he want us to do 2 project for him at one payment, otherwise he will black mail us.
Thanks for the tips about credit repair on this blog. Things i would advice people would be to give up the actual mentality that they’ll buy right now and pay out later. As a society all of us tend to do that for many things. This includes holidays, furniture, as well as items we would like. However, you have to separate your own wants from all the needs. When you are working to improve your credit rating score you have to make some sacrifices. For example you are able to shop online to save money or you can turn to second hand shops instead of costly department stores with regard to clothing. https://zyprexaolanzapine.com/#
leekoil
atlanta braves visor hat 300 womens air jordan 6 low 90 nike soccer t shirts for cheap marvel coach wallet nike free run 2 femmes size 7.5 air force 1 worldwide pack noir