Как считать прошивку из микроконтроллера
Перейти к содержимому

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

  • автор:

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

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

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

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

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

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

Ведущий производитель электрического оборудования компания MORNSUN выпустила серию источников питания на DIN-рейку LI100-20BxxPR3 c выходами на 12, 15, 24 и 48 В. ИП позиционируются для умных домов, а так же используются в составе оборудования для промышленной автоматизации, различных производственных машин, рельсовых систем транспортировки и другого оборудования, работающего в условиях неблагоприятной окружающей среды.

Компания MEAN WELL продолжает активное развитие номенклатуры, осваивая новые направления и обновляя существующую продукцию с учетом возрастающих требований. В настоящий момент в Компэл представлено множество недавно вышедших новинок MEAN WELL.
MEAN WELL выпустил ряд таких новинок как мощные высоковольтные управляемые источники питания, DC/DC-преобразователи со сверхшироким входом (с креплением на DIN-рейку и на шасси), полностью обновил линейку зарядных устройств (ЗУ), DC/AC-преобразователей (инверторов) и ИБП для охранно-пожарных систем. Кроме того, выпущены специальные источники питания с выходным напряжением в виде ШИМ для светодиодных лент и модулей управляемых по DALI2 и 0…10 В, а также другая продукция.

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

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

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

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

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

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

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

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

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

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

ESP8266 Урок 3. Читаем прошивку ESP-01. Часть 1

В данном занятии мы попытаемся разобраться, какие файлы прошиваются в микроконтроллер ESP8266, в частности в ESP-01, а также попытаемся считать прошивку из контроллера, так как вот об этом информации очень мало, хотя она вполне может пригодиться, так как нередко многие хотят вернуть программное обеспечение в контроллер, которое было в нём при его приобретении.

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

Для начала скачаем следующие визуальные инструменты:

  1. Flash Download Tools,
  2. ESPlorer,
  3. nodemcu-flasher (Nodemcu firmware programmer)

Данные программы найти не сложно, первый — на официальном сайте Espressif, второй — на сайте https://esp8266.ru/esplorer/ , а третий — на GitHub https://github.com/nodemcu/nodemcu-flasher .

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

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

Чтобы работать с контроллером ESP8266 в консоли, есть два пути. Первый — скачать готовый esptool для windows и работать с ним, но это не совсем правильно. Хотя бы потому, что самые свежие версии не так легко найти, так как разработчик данного инструмента установочные и исполняемые файлы в формате exe не хранит. Поэтому есть второй путь — установить Python, скачать esptool через инструментарий Python и затем пользоваться самой последней версией.

Для этого, если у нас ещё не установлен Python, или установлена старая версия, то необходимо его установить.

Скачиваем и устанавливаем последнюю версию интерпретатора с официального сайта Python

Также надо будет установить галку для прописывания пути в переменные среды, чтобы наш Python запускался из любого места

Возможно, что Python будет «видеться» только после перезагрузки (так устроены переменные среды в Windows). Поэтому, проверим «видимость». Для этого сразу зайдём в папку, в которую мы будем сохранять нашу считанную прошивку и из которой впоследствии будем прошивать другие, и запустим командную строку, в которой введём следующую команду

Если мы видим версию, значит Python «виден», а если видим что-то наподобие вот такого

то тогда перезагружаемся и проверяем ещё раз.

Если всё нормально, то продолжаем дальше.

Дальше надо будет установить утилиту esptool. Для этого используем следующую команду

Ниже мы видим совет обновить pip (инсталлятор пакетов). Ну, раз просят, давайте попробуем обновить

Теперь у нас ещё и обновлённый pip.

В принципе, я пробовал деинсталлировать после этого esptool, а затем его установить заново, ничего не изменилось, поэтому этого делать не обязательно.

Проверим доступность esptool, узнав его версию

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

Но для начала давайте разберёмся, какие нам необходимы файлы для прошивки нашего контроллера и с каких адресов данные файлы шьются. Хоть мы и не будем его прошивать, но, так как прошивку мы будем считывать не кусками, а целым дампом полностью всей FLASH-памяти, то мы потом будем хотя бы знать, что и где в нашем дампе искать, чтобы не прошивать потом целиком, а разделить на нужные файлы.

Официальная прошивка от Espressif для пользования AT-интерпретатором состоит из нескольких файлов и адреса заливки их во FLASH-память ESP8266 зависят от объёма данной памяти, а также её организации.

Откроем мануал по использованию AT-команд и мы увидим в нём для нашего объёма FLASH-памяти следующую картину

Давайте считаем всю нашу FLASH-память из модуля.

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

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

Делается это в с помощью наших двух кнопок в следующем порядке

  1. Нажимаем и удерживаем кнопку сброса (RESET),
  2. Нажимаем и удерживаем кнопку прошивки (FIRMWARE),
  3. Отпускаем кнопку сброса (RESET),
  4. Отпускаем кнопку прошивки (FIRMWARE).

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

Теперь, чтобы считать всю FLASH-память нашего ESP и сохранить её в файл, в командной строке мы вводим следующую строку

Пойдёт процесс считывания. В командной строке мы не устанавливаем скорость обмена, она выставится по умолчанию. Как установить скорость, мы разберёмся в уроке, когда будем прошивать контроллер.

Теперь об остальных параметрах в строке

—port COM5 — тут, я думаю понятно, мы говорим утилите, что работать мы будем с портом COM5,

read_flash — а здесь мы говорим то, что мы будем именно читать из памяти FLASH

0x00000 0x100000 — читаем с адреса 0 байты размером в 1 мегабайт (в шестнадцатеричном выражении — 0x100000).

flash_esp01_full.bin — имя файла, в который сохранится наш дамп.

После того, как процесс считывания закончится, мы видим, что в нашей папке появился файл с дампом FLASH-памяти

В следующей части нашего урока мы выделим из считанного байта FLASH-памяти модуля ESP-01 файлы прошивки.

Различные модули ЕSP8266 можно приобрести здесь Модули ЕSP8266

Переходник USB to TTL можно приобрести здесь ftdi ft232rl

STM32 Shellcode: firmware dump over UART

Alexander Olenyev

In one of the previous articles, we talked about stack overflow and overwriting the stack pointer to the desired function address — Stack Buffer overflow in STM32.

RCE (remote code execution) is a complete attack that uses such an exploit. In order to perform it, one writes shellcode functions to the buffer and puts the shellcode address to the stack pointer. As a result, the code that is written to the buffer gets executed.

And there the fun begins. To be honest, when preparing the article, we didn’t have an objective to write a complete shellcode solution, and that’s why we selected the buffer size randomly. Randomly small 🙂

O_o buffer size is 20 bytes plus some stack space for local variables. Later, we ended up with 32 bytes total (to be the same as that 32 x “.” from python script)

What can be packed into 32 bytes? ��

Challenge accepted, let’s do some shellcode. What is gonna be the purpose of shellcode? Let’s try to dump the whole chip firmware. We have USB and UART interfaces initialized. The latter is easier to work with, so let’s stick with UART as a channel to be used for dumping the firmware.

Algorithm for working with UART is the following:

  • wait for the flag UART_FLAG_TXE (Transmit Data Register Empty)
  • write the next byte of the firmware to the register UART->DR (data register)
  • increment the pointer to the next byte of the firmware
  • return to step one

In addition, we need to ensure the operability of our code:

  • need to allocate some space on the stack (decrement stack pointer)
  • write the valid address to the link register

In order to avoid checking the flag UART_FLAG_TXE in a loop, we can call HAL_Delay(1). The UART will work at 115200 kbps and 1-millisecond delay is just enough.

We could’ve looked up and used the function HAL_UART_Transmit() but then our shellcode will be dependant on the location of a certain function in the chip’s memory. We can do the same to replace HAL_Delay() with a waiting loop.

If we work directly with peripheral registers then our code will work independently from whether certain functions are present in the firmware or not. With literally 2–3 register writes we can enable UART and start transmitting data.

So, the final version of the shellcode will look something like this:

The code is easier to write code using C (even with assembly insertions), compile it and check the disassembly result. Then you can tweak it the way you want:

After packing the shellcode into the python script and some testing, we get the following code:

Сливаем дамп флешки STM32 стандартными инструментами

Как считать прошивку контроллера который не был залочен? До очень просто.

Подключаем плату через st-link и запускаем программу STM32CubeProgrammer или ST-LINK Utility.

Обе программы имеют вполне годный консольный help и документацию, в которой он, по сути, дублируется.

STM32CubeProgrammer. Сохраняет прошивку в bin, hex, srec

В port выбирается используемый интерфейс, далее идет адрес старта прошивки (0x08000000), размер прошивки (0x20000) и название файла куда будет сохранена прошивка.

ST-LINK Utility. Сохраняет прошивку в файл.

Ключ -c выполняет подключение, ключ -Dump переводит программу ST-LINK в режим чтения прошивки, далее идет адрес старта прошивки (0x08000000), размер прошивки (0x20000) и название файла куда будет сохранена прошивка.

Сравнить слитый файл с прошивкой на микроконтроллере можно через следующую команду в ST-LINK Utility. Выведет первый не совпавший адрес.

Конечно, удобнее сравнивать файл прошивки с дампом в GUI. Он выводит два окошка с файлами где красным подсвечены не совпавшие секции.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *