Comments 11
помним, что всё что угодно может быть настроено в исполнителе, отключаем прерывания, все прерывания, сбрасываем настройки интерфейсов,
А вотчдог так отключить нельзя, или перенастроить?)
Мимокрокодил, но в STM32 (и возможно в GD32 как в аналоге) IWDG отключается только после сброса микроконтроллера. У программиста есть только два выбора - включать IWDG если он нужен или не включать IWDG если он не нужен. Поэтому иногда даже делают задержку настройки всякой периферии после включения, которая может превратить микроконтроллер в кирпич, чтобы дать шанс программатору стереть кривую прошивку.
Даже у IWDG можно открыть регистры на запись и перезаписать значения прескалера и счётчика на максимальные - в контроллерах не предусмотрена даже опция смены открывающей запись константы, не говоря уже про шифрацию. Это будет проще, чем отправлять за раз по 16 байт. И очень редко программисты высчитывают окно вачдога впритык по тактам - обычно не заморачиваются и ставят что-то в районе секунды, чтобы при зависании автоматически перезагрузилось.
Помню в Атмеге 128 можно было пин батарейного питания дернуть на землю и спокойно слить прошивку). Возможно тут тоже есть специально предусмотренные бэкдоры.
Это как так? И что такое "пин батарейного питания". Для АВР есть какие-то дешёвые методы слива залоченной прошивки?
Глитчинг. Довольно популярная техника, подходит для разных архитектур. Питание просаживается коротким импульсом в момент чтения фьюзов, чтобы bootrom прочитал отсутствие бита защиты от чтения.
А, так вот как это называется.
Были такие 3G-модемы залоченные, от ZTE - там в них прошивку можно было обновить "методом кнопки", кратковременный разрыв питания при загрузке модема.
Это avr, там нет никакого bootrom(пользовательский бутлоадер разве что).
Биты защиты, они же fuses - это отдельно от flash и eeprom. И они работают, скорее как PLA, т.е. не считываются и не "инициализирует", а постоянно держат отладочный интерфейс выключенным.
Так что вопрос, есть ли простые методы слить прошивку в домашних условиях, без вскрытия корпуса, электронных микроскопов и прочего дорогого оборудования?
Статью нейронка писала? Что вот это значит?
вочдог переваривает ассемблерную порцию «корма
ассемблерный код сбрасывает вочдог стандартным методом, как и родная прошивка. Кто что переваривает?
Народ! В терминологии GD есть FWDT (в STM IWDG), его жестко можно включить на этапе прошивки, прям бит сбросить, а еще есть более коварная вещь WWDT (в STM WWDG), тут хуже, в окно не попал, швах! А перенастроить можно, но, тут реально рабочий вариант для любого, даже самого "лютого" WDT, подождать 1.5 минуты или 20 секунд, пофиг, для дампа защищенной прошивки, задача не пачками же дампить? ...эммм, странное дело, а никого не удивило что можно слить обычным программатором? ...и глитчить питание микроконтроллера, от которого кстати контроллеру может стать плохо... банально сгорит, а ещё глитчинг может переключить битики во встроенной FLASH памяти MCU.
dmitryrf - Вы ТРОЛЬ? Суть статьи в чем? А Вы "докопались" до стилистики, стилистика - мое личное дело.
Результат-то есть? Получается слить?
Судя по схеме из даташитов DMA тоже через FMC с флешью общается, а не как у вас нарисовано. И по описанию, вроде, защита включается, пока подключён отладчик.
Никакого Си.
Компилятор Си точно такой же код сгенерил бы. Не обязательно прям в ассемблер лезть, и будет понятнее, что происходит.
И не понятно, зачем так извращаться с быстрым чтением. Сливать SRAM через отладчик можно и одновременно с выполнением кода, сбрасывающего вачдог, когда надо. Обычная прошивка флеши через отладчик именно так и происходит, ибо другого вменяемого интерфейса для записи в чипе просто нет.
ROP Level 1 в GD32F4: «А метлой дверь подпёр?» Или как нежно слить защищенную прошивку через программатор