Открыть HEX файл прошивки чаще всего требуется при работе с микроконтроллерами — например, когда нужно проверить дамп памяти ATmega или STM32, сравнить две версии прошивки или исправить один байт конфигурации. Проблема в том, что двойной клик по такому файлу в Windows ничего осмысленного не покажет: система не знает, какой программой его обработать.
Причина проста: расширение .hex используется в нескольких разных форматах. Это может быть текстовый Intel HEX, Motorola S-Record или просто бинарный дамп с нестандартным расширением. От того, какой именно формат у вашего файла, зависит выбор инструмента. Ниже разберём, как определить тип файла и чем его открыть для просмотра, анализа и редактирования.
Как определить формат HEX файла
Первое действие — открыть файл обычным текстовым редактором, например Notepad++ или даже стандартным «Блокнотом». Это безопасная проверка, которая ничего не меняет в файле, если вы не сохраните изменения.
Посмотрите на первые символы строк:
- 🔹 Строки начинаются с двоеточия
:— это Intel HEX, самый распространённый формат прошивок для AVR, PIC и многих ARM-микроконтроллеров. - 🔹 Строки начинаются с буквы
Sи цифры (например,S1,S2) — это формат Motorola S-Record. - 🔹 Виден нечитаемый набор символов — перед вами бинарный файл, который просто получил расширение
.hex. - 🔹 Видны читаемые строки вроде имён функций или текстовых сообщений — файл может содержать отладочную информацию, это тоже полезный признак.
Просмотр в текстовом редакторе
Если файл оказался текстовым Intel HEX, для базового просмотра достаточно Notepad++. Вы увидите строки вида :100000000C9435000C944D000C944D00C1, где каждая строка — это запись с адресом, данными и контрольной суммой. Человеку такой вид мало о чём говорит, но он позволяет убедиться, что файл не повреждён и имеет корректную структуру.
Для сравнения двух версий прошивки удобно использовать функцию сравнения файлов. В Notepad++ это плагин Compare, также подойдут WinMerge или Beyond Compare. Различия в записях покажут, какие области памяти изменились между версиями.
⚠️ Внимание: не сохраняйте HEX файл из текстового редактора, если не уверены в результате. Случайное изменение хотя бы одного символа нарушит контрольную сумму строки, и программатор откажется прошивать такой файл — это лучший сценарий. Худший, если контрольная сумма где-то не проверяется.
Hex-редакторы для бинарного просмотра
Когда нужно увидеть прошивку как массив байтов с адресами, используются hex-редакторы. Они показывают данные в шестнадцатеричном виде рядом с ASCII-представлением, что позволяет находить текстовые строки, таблицы и характерные последовательности.
| Программа | Тип | Особенности |
|---|---|---|
| HxD | Бесплатный hex-редактор | Простой интерфейс, сравнение файлов, расчёт контрольных сумм |
| 010 Editor | Платный, есть пробный период | Шаблоны для разбора структур, мощный поиск |
| WinHex | Условно-бесплатный | Криминалистический анализ, работа с образами памяти |
| Hex Fiend | Бесплатный, macOS | Быстрая работа с большими файлами |
| Notepad++ | Бесплатный текстовый редактор | Просмотр текстовых Intel HEX, сравнение через плагины |
Обратите внимание: hex-редактор показывает файл как есть, но не преобразует Intel HEX в «плоский» бинарный образ. Если вам нужен именно образ памяти микроконтроллера, сначала выполните конвертацию — об этом ниже.
Конвертация HEX в BIN и обратно
Для полноценного анализа текстовый Intel HEX часто преобразуют в бинарный формат. Классическая утилита для этого — srec_cat из пакета SRecord. Она работает из командной строки и поддерживает множество форматов.
srec_cat firmware.hex -Intel -o firmware.bin -Binary
Обратное преобразование выполняется аналогично, с указанием базового адреса, если он нужен:
srec_cat firmware.bin -Binary -o firmware.hex -Intel
Также конвертировать форматы умеют среды программирования микроконтроллеров: утилита objcopy из набора GNU binutils входит в состав тулчейнов для AVR и ARM. Некоторые программы-прошивальщики, например AVRDUDE или фирменные утилиты производителей чипов, тоже позволяют считать прошивку и сохранить её в другом формате.
☑️ Подготовка к работе с HEX файлом
Дизассемблирование и глубокий анализ
Если задача — понять логику работы прошивки, одного просмотра байтов недостаточно. Нужен дизассемблер, который превратит машинный код в ассемблерные инструкции. Здесь критично знать архитектуру микроконтроллера: код для AVR и код для ARM Cortex-M — это совершенно разные наборы инструкций.
Из инструментов чаще всего применяют:
- 🛠 Ghidra — бесплатный фреймворк для реверс-инжиниринга с поддержкой множества архитектур.
- 🛠 IDA Pro / бесплатная IDA Free — классический дизассемблер с интерактивным анализом.
- 🛠 radare2 / Cutter — открытый набор инструментов с графическим интерфейсом.
Перед загрузкой файла в дизассемблер его обычно конвертируют в BIN и указывают базовый адрес загрузки — его можно найти в документации (даташите) на конкретный микроконтроллер. Без правильного базового адреса и выбранной архитектуры дизассемблер покажет бессмысленный набор инструкций, это самая частая ошибка новичков.
Почему дизассемблер показывает «мусор»
Наиболее вероятные причины: неверно выбрана архитектура процессора, указан неправильный базовый адрес загрузки, файл не сконвертирован из Intel HEX в чистый бинарный образ, либо прошивка зашифрована или упакована загрузчиком. Проверьте эти пункты по очереди, начиная с архитектуры.
Редактирование прошивки и контрольные суммы
Точечное изменение байтов — легитимная задача: например, правка серийного номера, калибровочных данных или констант конфигурации. Для этого файл конвертируют в BIN, правят в hex-редакторе, затем возвращают в HEX. Прямая правка текстового Intel HEX тоже возможна, но требует пересчёта контрольной суммы каждой изменённой строки вручную или скриптом.
⚠️ Внимание: многие устройства проверяют целостность прошивки при старте по собственной контрольной сумме или цифровой подписи. Изменённый файл может быть отвергнут загрузчиком, а в худшем случае устройство перестанет запускаться. Перед прошивкой модифицированного файла убедитесь, что у вас есть способ восстановить оригинал, и сверьтесь с документацией на конкретное устройство.
Также учитывайте, что перепрошивка может нарушить условия гарантии, а для некоторых категорий устройств — требовать специальных прав. Если вы не уверены в последствиях, ограничьтесь чтением и анализом без записи в устройство.
Частые вопросы
Можно ли открыть HEX файл обычным «Блокнотом»?
Да, если это текстовый формат вроде Intel HEX — вы увидите строки с двоеточиями и шестнадцатеричными данными. Но для удобной работы лучше использовать Notepad++ с подсветкой синтаксиса, а для анализа данных — hex-редактор.
Чем отличается HEX файл от BIN?
BIN — это чистый бинарный образ памяти: байты идут подряд без служебной информации. Intel HEX — текстовый формат, где каждая строка содержит адрес, данные и контрольную сумму. Один и тот же код можно представить в обоих форматах, конвертация выполняется утилитами вроде srec_cat.
Файл не открывается ни в одном редакторе осмысленно. Что делать?
Возможно, прошивка зашифрована или упакована производителем — такое встречается, например, в обновлениях бытовой техники и автомобильных блоков. Проверьте энтропию данных: равномерный «шум» без повторяющихся паттернов и читаемых строк — признак шифрования. Без ключа или алгоритма распаковки от производителя такой файл проанализировать не получится.
Можно ли восстановить исходный код на C из HEX файла?
Полностью — нет. Дизассемблер покажет ассемблерный код, а декомпиляторы могут дать лишь приблизительное C-подобное представление без имён переменных и комментариев. Исходная структура программы при компиляции теряется безвозвратно.
Какой программой прошить HEX в микроконтроллер после правки?
Это зависит от микроконтроллера и программатора: для AVR часто используют AVRDUDE, для STM32 — STM32CubeProgrammer, для PIC — фирменные утилиты Microchip. Точный способ записи и поддерживаемые форматы уточняйте в документации на ваш чип и программатор.