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

Быстрые ссылки
Сравнение бинарных файлов
Защитные хеш‑алгоритмы
Поиск отличий
VBinDiff
В чём разница?
Сравнение бинарных файлов
Linux предоставляет много инструментов для сравнения и анализа текстовых файлов. Команда diff сравнит два текстовых файла и выделит различия с контекстом вокруг них. Команда colordiff добавляет цвета, чтобы визуально отличать изменения.
Разработчики используют diff для сравнения версий исходного кода или текстов. Это быстро и наглядно.
В случае бинарных файлов всё сложнее. Бинарные файлы — это последовательности байтов. В сжатых архивах (tar, zip) байты представляют содержимое и служебные таблицы. В исполняемых файлах байты интерпретируются как машинный код, метаданные, таблицы символов и другие структуры. Изменение даже одного байта может изменить поведение программы.
Внешние признаки, такие как время создания, имя и даже размер файла, можно подделать. Поэтому визуально одинаковые файлы могут различаться внутренне.
Защитные хеш‑алгоритмы
Определение: Хеш‑функция — математическая функция, которая последовательно обходит все байты файла и вычисляет фиксированное представление (хеш). Для целостности чаще всего используют SHA‑256.
Ключевая идея: один и тот же файл всегда даёт один и тот же хеш. Изменение даже одного байта даёт совершенно другой хеш.
Практика: Многие сайты выкладывают хеши (sha256) рядом с загрузками. После загрузки сгенерируйте хеш локально и сравните с опубликованным. Если хеши не совпадают — файл либо повреждён, либо подменён.
Пример команд:
ls -l *.sosha256sum binary_file1.sosha256sum binary_file2.so
Совпадающие размеры и метки времени не гарантируют идентичность. Хеши — простой и надёжный индикатор.
Важно: если сайт не публикует хеш, требуйте цифровую подпись или скачивайте из официальных репозиториев.
Поиск отличий
Если хеши не совпадают, полезно понять масштаб и местоположение изменений. Для этого применяют cmp, hexdump, diff и специализированные визуальные инструменты.
Простейшие команды:
diff binary_file1.so binary_file2.sodiff гарантированно малоинформативен для бинарников — он ориентирован на текст.
cmp binary_file1.so binary_file2.socmp сообщает смещение первого различающегося байта (offset). Например, «Byte 13451» означает, что с начала файла на позиции 13451 байт отличается.
При добавлении ключа -l cmp выведет список всех отличающихся байтов в форме: номербайта значениевпервом значениево_втором.
cmp -l binary_file1.so binary_file2.so
hexdump показывает содержимое файла в шестнадцатеричном виде и ASCII‑колонке. Канонический режим -C удобен для чтения:
hexdump -C binary_file1.so
Чтобы увидеть отличия как у текстовых файлов, преобразуйте дамп в текст и сравните:
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
Обратите внимание на порядок и представление байтов. Некоторые инструменты выводят пары байтов в обратном порядке или показывают значения не в привычном 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:
- Быстрое визуальное обнаружение блоковых изменений.
- Удобная навигация и подсветка различий.
- Можно применять к одиночному файлу для просмотра структуры.
Ограничения: для очень больших файлов терминал может быть медленным.
В чём разница?
Если у вас нет прав на установку ПО — используйте 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)
- Получите файлы: original.so и suspect.so. Работайте над копиями.
- Сравните публичные хеши: sha256sum original.so && sha256sum suspect.so.
- Если хеши совпадают — можно считать файлы идентичными (при условии, что источник доверенный).
- Если хеши не совпадают — выполните cmp -l, чтобы получить список отличий по байтам.
- Создайте hexdump -C для каждой копии и сравните diff.
- При необходимости установите vbindiff для интерактивного просмотра.
- Для подозрительных изменений используйте binwalk, strings, radare2 для дальнейшего анализа.
- Документируйте вывод и при необходимости откатите систему к известной чистой версии.
Чек‑листы по ролям
Администратор:
- Сохраняю копии обоих файлов в отдельный каталог.
- Запускаю 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 и дизассемблеры для глубокого анализа.
Важно: сравнение байтов — инструмент обнаружения. Для выяснения причин изменений потребуется ревизия сборки, анализ кода и проверка подписи.
Похожие материалы
Как настроить несколько мониторов в Windows 11
Разрешить Snapchat доступ к камере на Android и iPhone
Как найти потерянный Siri Remote для Apple TV
Зимнее оформление рабочего стола в Linux
Войти в Microsoft-аккаунт на Windows