Что такое hex-редактор
Hex-редактор (шестнадцатеричный редактор) — программа, которая отображает содержимое файла не как текст и не как изображение, а как последовательность байтов. Каждый байт записывается двумя шестнадцатеричными цифрами: от 00 до FF, то есть от 0 до 255 в десятичной системе.
В отличие от текстового редактора, который пытается «прочитать» байты через кодировку и показывает мусор вместо управляющих символов, hex-редактор показывает всё без исключения. Это делает его незаменимым инструментом для работы с бинарными данными: файловыми заголовками, исполняемыми файлами, образами дисков, протоколами передачи.
Как устроен интерфейс
Типичный экран hex-редактора делится на три зоны:
| Зона | Содержание | Пример |
|---|---|---|
| Смещение (offset) | Адрес первого байта строки | 00000010 |
| Hex-данные | Байты в шестнадцатеричном виде, обычно по 16 в строке | 4D 5A 90 00 03 00 … |
| ASCII-представление | Те же байты, прочитанные как текст | MZ............. |
Количество столбцов в hex-зоне — степень двойки: чаще всего 8 или 16. При 16 столбцах одна строка занимает ровно один «параграф» (0x10 байт), и адреса идут кратно 16 — удобно для навигации.
Навигация
- Переход по смещению — вводите hex-адрес, и курсор перемещается к нужному байту.
- Поиск — ищете hex-последовательность (
89 50 4E 47— сигнатура PNG) или текстовую строку. - Закладки — помечаете важные позиции, чтобы быстро возвращаться.
Когда нужен hex-редактор
Проверка сигнатур файлов
Каждый формат начинается с характерной последовательности байтов. Открыв файл в hex-редакторе, можно за секунду определить его тип, даже если расширение изменено или отсутствует:
| Сигнатура (hex) | Формат |
|---|---|
FF D8 FF | JPEG |
89 50 4E 47 0D 0A 1A 0A | PNG |
50 4B 03 04 | ZIP (также DOCX, XLSX, JAR) |
25 50 44 46 | |
4D 5A | EXE / DLL (PE) |
Редактирование заголовков
Иногда нужно изменить один-два байта в структуре файла — например, подправить значение в заголовке прошивки или изменить флаг в метаданных. Перекомпилировать весь файл ради этого избыточно: hex-редактор позволяет сделать точечную правку.
Восстановление повреждённых файлов
Если файл повреждён, но большая часть данных цела, hex-редактор позволяет найти испорченный участок — часто это «обнуленный» диапазон или случайно перезаписанный заголовок — и попытаться восстановить структуру вручную.
Анализ протоколов и форматов
При разработке парсеров и драйверов полезно видеть реальные байты, которые приходят по сети или читаются с устройства. Hex-редактор помогает сопоставить документацию формата с реальными данными.
Сравнение бинарных файлов
Два варианта одного файла с разным поведением? Откройте оба в hex-редакторе с функцией сравнения (diff) — различающиеся байты будут подсвечены.
Практические примеры
Пример 1: определение кодировки
Открываем текстовый файл, где кириллица отображается «кракозябрами». В hex-зоне видим байты D0 9F D1 80 D0 B8. Это последовательность UTF-8: D0 9F = «П», D1 80 = «р», D0 B8 = «и». Значит, файл в UTF-8, а программа-просмотр пытается прочитать его в Windows-1251.
Пример 2: поиск спрятанного текста
В бинарном файле нужно найти email-адрес. Выполняем поиск ASCII-строки @ — редактор покажет все вхождения, и рядом в ASCII-панели будет виден полный адрес.
Пример 3: патч бинарного файла
Нужно заменить строку DEBUG на RELEASE в скомпилированной программе. Обе строки одинаковой длины (5 символов), значит, структура файла не пострадает. Находим 44 45 42 55 47 и заменяем на 52 45 4C 45 41 — ошибка, «RELEASE» длиннее. Вместо этого ищем коротший тег или используем строку той же длины: RELEA — или находим альтернативный подход. Главный принцип: длина данных после правки не должна меняться, если формат не допускает сдвигов.
Шпаргалка по шестнадцатеричной системе
| Dec | Hex | Bin | Dec | Hex | Bin |
|---|---|---|---|---|---|
| 0 | 0 | 0000 | 8 | 8 | 1000 |
| 1 | 1 | 0001 | 9 | 9 | 1001 |
| 2 | 2 | 0010 | 10 | A | 1010 |
| 3 | 3 | 0011 | 11 | B | 1011 |
| 4 | 4 | 0100 | 12 | C | 1100 |
| 5 | 5 | 0101 | 13 | D | 1101 |
| 6 | 6 | 0110 | 14 | E | 1110 |
| 7 | 7 | 0111 | 15 | F | 1111 |
Один hex-разряд = 4 бита (ниббл). Два разряда = 1 байт. Поэтому FF = 255, а 0A = 10.
Полезные привычки при работе с hex-данными
- Всегда делайте копию перед редактированием. Одно неверное изменение — и файл может стать нечитаемым.
- Проверяйте endianness (порядок байтов). Число
0x1234в little-endian хранится как34 12, в big-endian — как12 34. Многие форматы и архитектуры используют разные порядки. - Используйте поиск по шаблонам, а не визуальный просмотр. В файле размером в мегабайты найти нужный байт глазами невозможно.
- Помните про выравнивание. Структуры в скомпилированных программах часто содержат padding-байты для выравнивания по границе 4 или 8 байт — они могут выглядеть как
00и не нести смысловой нагрузки. - Сверяйтесь со спецификацией формата. Не угадывайте назначение байтов — откройте документацию (например, формат PNG чётко описан в спецификации W3C).
Частые вопросы
Чем hex-редактор отличается от обычного текстового?
Текстовый редактор интерпретирует байты как символы по таблице кодировки и скрывает непечатные. Hex-редактор показывает каждый байт как число — два шестнадцатеричных разряда — и позволяет редактировать любые данные, не только текст.
Почему для отображения байтов используют именно шестнадцатеричную систему?
Байт содержит 8 бит и принимает значения от 0 до 255. В hex-системе любое такое значение укладывается ровно в два разряда (00–FF). Двоичная запись слишком длинная (восемь цифр), десятичная — неудобна для битовых операций, поскольку не кратна степени двойки.
Можно ли повредить файл при редактировании в hex-редакторе?
Да, любое необдуманное изменение байтов может сделать файл нерабочим. Всегда сохраняйте резервную копию перед редактированием. Некоторые редакторы предлагают режим «только чтение», чтобы исключить случайные правки.
Как найти нужный участок данных в большом файле?
Используйте поиск по hex-последовательности (например, «89 50 4E 47» для PNG-заголовка) или по текстовой строке. Продвинутые редакторы поддерживают шаблоны и регулярные выражения, а также переход по известному смещению (offset).
Что такое смещение (offset) в hex-редакторе?
Смещение — это позиция байта относительно начала файла, выраженная в шестнадцатеричном числе. Например, offset 0010 означает 16-й байт от начала. Смещение показывается слева от каждой строки и помогает быстро ориентироваться в данных.
Зачем рядом с hex-данными показывают ASCII-столбец?
ASCII-панель помогает визуально распознать текстовые фрагменты внутри бинарного файла — имена, пути, подписи форматов. Непечатные символы обычно отображаются точкой, чтобы не засорять вывод.