При перепрошивке маршрутизатора, материнской платы или блока управления двигателем сравнение двух BIN-файлов — это проверка, которая показывает, какие именно байты изменились между старой и новой версией прошивки. Без такого сравнения невозможно убедиться, что дамп считался корректно, что патч применился в нужном месте, а загруженный из интернета файл не отличается от оригинала в критичных областях.
Сравнение бинарных файлов отличается от сравнения текста: здесь важны смещения (адреса), байтовые значения и контрольные суммы областей. В этой статье разберём, какие программы подходят для сравнения прошивок BIN, как интерпретировать результат и на что обратить внимание перед записью изменённого дампа в память устройства.
Зачем сравнивать файлы прошивок
Задача сравнения возникает в нескольких типовых сценариях. Самый частый — верификация дампа: вы считали прошивку из флеш-памяти программатором и хотите убедиться, что чтение прошло без ошибок. Для этого чтение повторяют два-три раза и сравнивают полученные файлы — они должны совпадать полностью.
Второй сценарий — анализ изменений между версиями прошивки от производителя. Сравнив старый и новый BIN, можно увидеть, какие области были переписаны: калибровки, загрузчик, таблицы данных. Это важно, если вы собираетесь переносить свои правки на обновлённую версию.
- 🔍 Проверка корректности считывания дампа программатором
- 🧩 Поиск отличий между версиями прошивки одного устройства
- 🛠️ Контроль применения патча или ручной правки байтов
- 🧬 Сравнение дампов с двух одинаковых устройств для поиска уникальных областей (VIN, IMEI, калибровки)
Отдельный случай — восстановление «окирпиченного» устройства, когда нужно понять, какая часть дампа повреждена, сравнив его с рабочей копией.
Какие программы подходят для сравнения BIN
Универсальные текстовые diff-утилиты для бинарных файлов не подходят: они либо откажутся работать, либо покажут только факт различия без деталей. Нужны инструменты, умеющие сравнивать файлы побайтово с отображением смещений.
Среди проверенных решений выделяются hex-редакторы с функцией сравнения и специализированные консольные утилиты. Ниже — основные варианты, которые реально применяются на практике.
| Программа | Тип | Особенности сравнения | Платформа |
|---|---|---|---|
| HxD | Hex-редактор | Побайтовое сравнение с подсветкой различий | Windows |
| WinHex | Hex-редактор | Сравнение с отчётом по смещениям | Windows |
| Beyond Compare | Diff-утилита | Hex-режим сравнения файлов | Windows, Linux, macOS |
| cmp / fc /b | Консольные утилиты | Быстрая проверка совпадения файлов | Linux, Windows |
| vbindiff | Консольная утилита | Визуальное сравнение двух бинарников | Linux, Windows |
Выбор зависит от задачи. Для быстрой проверки «совпадают ли файлы» достаточно консольной команды. Для анализа отличий с адресами удобнее графический hex-редактор.
Сравнение в hex-редакторе HxD
HxD — бесплатный hex-редактор, в котором сравнение файлов встроено в меню. Откройте первый файл прошивки, затем выберите в меню Analysis → File-compare → Compare... и укажите второй BIN-файл. Программа подсветит различающиеся байты и позволит переходить между ними клавишами навигации по различиям.
При этом важно понимать, что вы видите: каждая строка отображает 16 байт с указанием смещения от начала файла. Если прошивки различаются, например, только в области 0x7FF0–0x7FFF, это может быть область конфигурации или контрольной суммы, а не сам исполняемый код.
⚠️ Внимание: перед любым сравнением и правкой сделайте резервную копию обоих файлов. Работайте с копиями дампов, а оригинальные считанные файлы храните без изменений — они могут понадобиться для отката.
☑️ Подготовка к сравнению прошивок
Быстрая проверка через контрольные суммы и консоль
Если нужно просто узнать, идентичны ли два дампа, считать контрольную сумму быстрее, чем открывать редактор. В Windows для этого есть встроенная утилита:
certutil -hashfile dump1.bin SHA256
Выполните команду для каждого файла и сравните хеши визуально. Совпадение хешей гарантирует идентичность содержимого. В Linux аналогично работает sha256sum.
Для поиска первого различающегося байта в Windows используется fc /b file1.bin file2.bin, а в Linux — команда cmp -l file1.bin file2.bin, которая выведет список всех различающихся позиций. Это удобно, когда отличий мало и нужно быстро получить их адреса.
Как интерпретировать найденные отличия
Найденные различия сами по себе ещё ничего не значат — важно, где они расположены. В дампах микроконтроллеров и ЭБУ область данных обычно отделена от области кода: отличия в калибровочных таблицах ожидаемы между разными экземплярами устройств, а отличия в коде загрузчика могут указывать на разные аппаратные ревизии.
Обратите внимание на характер изменений. Одиночные разбросанные байты нередко указывают на ошибки чтения или на область счётчиков и адаптаций, которая меняется в процессе работы устройства. Сплошные блоки изменений — признак перезаписанной секции, например обновлённого модуля прошивки.
Разный размер файлов — первый признак того, что дампы несовместимы напрямую: сравнение имеет смысл только для образов одинакового объёма, считанных с одинаковой области памяти.
⚠️ Внимание: не записывайте в устройство дамп, в котором вы не понимаете назначение изменённых областей. Ошибка в области загрузчика способна вывести устройство из строя, и восстановление потребует аппаратного программатора.
Сравнение дампов с уникальными данными устройства
Практически любая прошивка содержит персональные области: серийный номер, сетевые адреса, иммобилайзерные данные, заводские калибровки. При сравнении дампов с двух одинаковых устройств эти области будут отличаться всегда — это норма, а не признак проблемы.
Поэтому при переносе прошивки с одного экземпляра на другой нельзя просто записать чужой дамп целиком. Необходимо определить адреса уникальных областей и перенести их из родного дампа. Где именно расположены эти данные, зависит от конкретной модели устройства — сверяйтесь с документацией или профильными сообществами по вашему оборудованию.
Что делать, если отличий слишком много
Если различается значительная часть файла, проверьте смещение начала сравнения: возможно, один дамп считан с заголовком, а второй — без него, и все байты сдвинуты. Попробуйте выровнять файлы, а также убедитесь, что оба дампа относятся к одной аппаратной ревизии устройства.
Типичные ошибки при сравнении прошивок
Первая ошибка — сравнение файлов разного формата. Прошивка может распространяться как чистый бинарный образ, как Intel HEX или как контейнер с заголовком. Перед сравнением приведите файлы к одному виду, иначе отличия будут в каждом байте.
Вторая ошибка — игнорирование порядка байтов (endianness) при ручном анализе значений. Многобайтовые числа в дампе могут храниться в обратном порядке, и без учёта этого легко неверно истолковать данные.
- 📦 Сравнение контейнера с заголовком и чистого образа без приведения форматов
- 🔀 Игнорирование порядка байтов при чтении многобайтовых значений
- 💾 Работа с единственной копией дампа без резервирования
- 🧷 Доверие дампу, считанному один раз без повторной верификации
Часто задаваемые вопросы
Можно ли сравнить прошивки разных размеров?
Напрямую — нет, побайтовое сравнение требует одинакового объёма. Если размеры отличаются, сначала выясните причину: лишний заголовок, другая область считывания или иной формат файла.
Какая бесплатная программа лучше для сравнения BIN в Windows?
Чаще всего используют HxD — он бесплатен и содержит встроенную функцию сравнения файлов. Для простой проверки идентичности достаточно встроенной команды fc /b.
Что означают отличия в одном-двух байтах между дампами одного устройства?
Возможные причины — изменившиеся счётчики или адаптационные данные, а также нестабильное чтение программатором. Повторите считывание и сравните контрольные суммы, чтобы исключить ошибку чтения.
Можно ли записать чужой дамп в такое же устройство?
Целиком — нежелательно: в дампе есть уникальные области (серийные номера, калибровки, ключи). Безопасный путь — сравнить дампы, найти уникальные области и перенести их из родного файла. Точные адреса зависят от модели устройства.
Чем проверить целостность прошивки перед записью?
Сверьте контрольную сумму файла (SHA-256) с той, что публикует источник прошивки, если она указана. Дополнительно убедитесь, что размер файла соответствует ожидаемому объёму памяти.