Гид по технологиям

Как сравнить два бинарных файла в Linux

6 min read Linux Обновлено 25 Dec 2025
Сравнить бинарные файлы в Linux
Сравнить бинарные файлы в Linux

Ноутбук с Linux и приглашением bash

Быстрые ссылки

  • Сравнение бинарных файлов

  • Защитные хеш‑алгоритмы

  • Поиск отличий

  • VBinDiff

  • В чём разница?

Сравнение бинарных файлов

Linux предоставляет много инструментов для сравнения и анализа текстовых файлов. Команда diff сравнит два текстовых файла и выделит различия с контекстом вокруг них. Команда colordiff добавляет цвета, чтобы визуально отличать изменения.

Разработчики используют diff для сравнения версий исходного кода или текстов. Это быстро и наглядно.

В случае бинарных файлов всё сложнее. Бинарные файлы — это последовательности байтов. В сжатых архивах (tar, zip) байты представляют содержимое и служебные таблицы. В исполняемых файлах байты интерпретируются как машинный код, метаданные, таблицы символов и другие структуры. Изменение даже одного байта может изменить поведение программы.

Внешние признаки, такие как время создания, имя и даже размер файла, можно подделать. Поэтому визуально одинаковые файлы могут различаться внутренне.

Защитные хеш‑алгоритмы

Определение: Хеш‑функция — математическая функция, которая последовательно обходит все байты файла и вычисляет фиксированное представление (хеш). Для целостности чаще всего используют SHA‑256.

Ключевая идея: один и тот же файл всегда даёт один и тот же хеш. Изменение даже одного байта даёт совершенно другой хеш.

Практика: Многие сайты выкладывают хеши (sha256) рядом с загрузками. После загрузки сгенерируйте хеш локально и сравните с опубликованным. Если хеши не совпадают — файл либо повреждён, либо подменён.

Пример команд:

ls -l *.so
sha256sum binary_file1.so
sha256sum binary_file2.so

Генерация хешей для двух бинарных файлов

Совпадающие размеры и метки времени не гарантируют идентичность. Хеши — простой и надёжный индикатор.

Важно: если сайт не публикует хеш, требуйте цифровую подпись или скачивайте из официальных репозиториев.

Поиск отличий

Если хеши не совпадают, полезно понять масштаб и местоположение изменений. Для этого применяют cmp, hexdump, diff и специализированные визуальные инструменты.

Простейшие команды:

diff binary_file1.so binary_file2.so

diff гарантированно малоинформативен для бинарников — он ориентирован на текст.

cmp binary_file1.so binary_file2.so

cmp сообщает смещение первого различающегося байта (offset). Например, «Byte 13451» означает, что с начала файла на позиции 13451 байт отличается.

При добавлении ключа -l cmp выведет список всех отличающихся байтов в форме: номербайта значениевпервом значениево_втором.

cmp -l binary_file1.so binary_file2.so

Использование опции -l с cmp для списка изменённых байтов

hexdump показывает содержимое файла в шестнадцатеричном виде и ASCII‑колонке. Канонический режим -C удобен для чтения:

hexdump -C binary_file1.so

Канонический вывод hexdump для бинарного файла

Чтобы увидеть отличия как у текстовых файлов, преобразуйте дамп в текст и сравните:

diff <(hexdump -C binary_file1.so) <(hexdump -C binary_file2.so)

или

hexdump -C binary_file1.so > binary1.txt

hexdump -C binary_file2.so > binary2.txt

diff binary1.txt binary2.txt

Использование diff и hexdump для получения различий

Обратите внимание на порядок и представление байтов. Некоторые инструменты выводят пары байтов в обратном порядке или показывают значения не в привычном 0x‑формате. Это важно учитывать при анализе смещений.

VBinDiff — визуальное сравнение бинарников

VBinDiff — терминальный интерактивный просмотрщик для бинарных сравнений. Его удобно использовать, если разрешено устанавливать пакеты.

Установка:

sudo apt install vbindiff

или

sudo dnf install vbindiff
# На Arch/Manjaro
sudo pacman -Sy vbindiff

Запуск:

vbindiff binary_file1.so binary_file2.so

Приложение откроет два вертикально/горизонтально сопоставленных окна. Клавиша Enter прыгает к следующему различию, q или Esc — выход.

VBinDiff отображает два бинарных файла

VBinDiff выделяет отличия между файлами

Преимущества VBinDiff:

  • Быстрое визуальное обнаружение блоковых изменений.
  • Удобная навигация и подсветка различий.
  • Можно применять к одиночному файлу для просмотра структуры.

Ограничения: для очень больших файлов терминал может быть медленным.

В чём разница?

Если у вас нет прав на установку ПО — используйте cmp, hexdump и diff. Если установки разрешены — VBinDiff заметно облегчает работу. Вариант с sha256sum обязателен как первый шаг для проверки целостности.

Примечание: сравнение байтов не объясняет причины изменений. Чтобы понять смысл изменённого фрагмента, потребуется дизассемблер или аудит кода.

Когда это может не сработать

  • Файлы подписаны цифровой подписью, но подпись доверенного центра отсутствует. Хеш совпадает, но подпись не проверена.
  • Изменённые байты — только метаданные, а поведение программы не изменилось. Хешы разные, но функционально файл идентичен.
  • Компилятор/сборочная среда добавляют нестабильные метаданные (временные метки, GUID), что приводит к изменению хеша при одинаковой логике.
  • Шифрованные или уменьшенные (packed) исполняемые файлы: прямой hexdump мало что скажет без распаковки.

Альтернативные инструменты и подходы

  • xxd — простая команда, похожая на hexdump, выводит в 16‑ричном виде.
xxd binary_file1.so | less
  • od — старый, но гибкий «octal dump».
  • bsdiff/bspatch — для патчей между двоичными файлами.
  • radiff2 (rizin/ralibs) или radare2 — фреймворки для бинарного анализа и дизассемблинга.
  • binwalk — для поиска встроенных файлов и сжатых данных в бинарнике (полезно для прошивок).
  • strings — извлекает читаемые строки из бинарника; быстрый способ найти маркеры или URL.

Комбинации инструментов часто дают лучший результат: например, binwalk для распаковки, затем hexdump/diff для сравнения распакованных частей.

Мини‑методика проверки целостности и отличий (SOP)

  1. Получите файлы: original.so и suspect.so. Работайте над копиями.
  2. Сравните публичные хеши: sha256sum original.so && sha256sum suspect.so.
  3. Если хеши совпадают — можно считать файлы идентичными (при условии, что источник доверенный).
  4. Если хеши не совпадают — выполните cmp -l, чтобы получить список отличий по байтам.
  5. Создайте hexdump -C для каждой копии и сравните diff.
  6. При необходимости установите vbindiff для интерактивного просмотра.
  7. Для подозрительных изменений используйте binwalk, strings, radare2 для дальнейшего анализа.
  8. Документируйте вывод и при необходимости откатите систему к известной чистой версии.

Чек‑листы по ролям

Администратор:

  • Сохраняю копии обоих файлов в отдельный каталог.
  • Запускаю sha256sum и сохраняю результат.
  • Проверяю журналы обновлений/пакетов.
  • Если файл из пакета — проверяю подпись пакета и версию в репозитории.

Разработчик/инженер сборки:

  • Сравниваю бинарники, полученные в разных средах сборки.
  • Проверяю влияние флагов компиляции и метаданных.
  • Пересобираю в чистой среде и сравниваю хеши.

Аналитик безопасности:

  • Выполняю cmp -l для локализации изменений.
  • Использую radare2/binwalk для поиска внедрённого кода.
  • Ищу IP/URL/строки с помощью strings.
  • Проверяю цифровые подписи и метаданные.

Шпаргалка команд

  • Получить SHA‑256:
sha256sum file
  • Найти первый байт, который отличается:
cmp file1 file2
  • Список всех отличающихся байтов:
cmp -l file1 file2
  • Получить шестнадцатеричный дамп:
hexdump -C file > file.txt
  • Сравнить дампы:
diff file1.txt file2.txt
  • Бинарный визуальный просмотр:
vbindiff file1 file2
  • Быстрая проверка строк внутри бинарника:
strings file | less
  • Поиск встроенных архивов/файлов:
binwalk file

Факто‑бокс: ключевые правила

  • Всегда начинайте с sha256sum. Это самый быстрый фильтр.
  • cmp сообщает смещение первого отличия. Это точка входа для детального анализа.
  • hexdump + diff показывают побайтно, где и как отличаются блоки.
  • VBinDiff удобен для интерактивной визуализации и навигации.

Критерии приёмки

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

Примеры ошибок и крайние случаи

  • Файл содержит динамически встраиваемые конфигурации (например, UUID сборки) — хеш меняется каждый билд.
  • Упаковщик (packer) изменяет представление исполняемого файла, но при запуске поведение идентично.
  • Прошивка содержит встроенную контрольную сумму внутри себя, её изменение приведёт к некорректной работе даже если логика не изменена.

Простое дерево решений

flowchart TD
  A[Начать: есть два файла?] --> B{Есть доступ к установке ПО?}
  B -- Да --> C[Установить vbindiff]
  C --> D[Запустить vbindiff]
  B -- Нет --> E[Выполнить sha256sum]
  E --> F{Хеши совпадают?}
  F -- Да --> G[Файлы совпадают — завершить]
  F -- Нет --> H[Использовать cmp, hexdump и diff]
  H --> I[Документировать и исследовать изменения]

Однострочный глоссарий

  • sha256sum — вычисляет SHA‑256 хеш файла; полезно для проверки целостности.
  • cmp — сравнивает файлы побайтно, сообщает смещение первого отличия.
  • hexdump/xxd — выводят шестнадцатеричный дамп содержимого файла.
  • vbindiff — интерактивный визуализатор для побайтового сравнения.
  • binwalk — инструмент для анализа бинарников и извлечения встроенных файлов.

Резюме

  • Начинайте с sha256sum: это самый быстрый и надёжный тест.
  • Если хеши не совпадают, локализуйте изменения через cmp и hexdump.
  • Для удобной навигации и визуализации используйте vbindiff, когда это возможно.
  • В сложных случаях применяйте binwalk и дизассемблеры для глубокого анализа.

Важно: сравнение байтов — инструмент обнаружения. Для выяснения причин изменений потребуется ревизия сборки, анализ кода и проверка подписи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как настроить несколько мониторов в Windows 11
Компьютеры

Как настроить несколько мониторов в Windows 11

Разрешить Snapchat доступ к камере на Android и iPhone
Мобильные устройства

Разрешить Snapchat доступ к камере на Android и iPhone

Как найти потерянный Siri Remote для Apple TV
Гайды

Как найти потерянный Siri Remote для Apple TV

Зимнее оформление рабочего стола в Linux
Linux

Зимнее оформление рабочего стола в Linux

Войти в Microsoft-аккаунт на Windows
Windows

Войти в Microsoft-аккаунт на Windows

Как конвертировать FBX в OBJ бесплатно
3D

Как конвертировать FBX в OBJ бесплатно