- PVSM.RU - https://www.pvsm.ru -
Слишком часто я вижу, что почти все hex-редакторы выглядят так:

Каждый раз, когда я открываю их, мне становится жаль бедного человека, которому приходится пользоваться этим (особенно, если этот человек - я!). Простой список байтов затрудняет поиск важных или интересных вещей среди массива данных. давайте, попробуйте найти в этих байтах единичный c0:

Но стоит подсветить байты:

И становится гораздо проще выделить уникальный байт, если он другого цвета! Человеческий действительно хорош в распознавании визуальных образов — при условии правильного формата
Вот еще несколько примеров:
Этот файл начинается с магических байт [2]KPS, за которыми следует набор 32-разрядных целых чисел (little-endian [3]) в диапазоне от 0 до 999 (0x3e7). Цвета позволяют быстро распознать, что каждое 32-разрядное целое число относительно маленькое, поскольку два старших байта всегда равны 00 00. Если присмотреться, можно заметить и другие закономерности, например, цифры, отсчитывающие каждые 0x18 байт, начиная с 0xс
Если вам интересен этот конкретный формат файла, то код, который его парсит [4], довольно прост, даже если вы не программист. Есть даже вики-страница [5] с представляемыми данными, если вам нравятся Fossil Fighters [6].
Перейдем ко второму примеру.
Этот фрагмент, начинающийся с 0x14, содержит длинный ряд увеличивающихся 32-разрядных целых чисел (снова little-endian). Каждое из них является индексом к более поздней точке файла, к структуре [7], обычно длиной около 0x3c байт. примерно равномерно расположенные индексы создают очень красивые радужные градиенты.
Третий пример:
Эти данные сжимаются с использованием алгоритма Хаффмана [8], в частности, кода, совместимого с Nintendo DS BIOS [9]. сначала кодируется 0x20 байт используемого дерева Хаффмана, затем 0x90 байт сжатого битового потока — фактического содержимого сжатого файла.
Между этими двумя частями есть большая разница, которую трудно заметить без помощи цветов. Дерево в основном содержит байты в диапазоне 00-0f (плюс несколько нижних 80 и c0), но в битовом потоке байты равномерно распределены по всему диапазону 00-ff.
Битовый поток гораздо более красочный и хаотичный, потому что хорошие алгоритмы сжатия выводят данные, которые визуально выглядят случайными. В идеале, любые закономерности, которые вы заметили бы в данных, должны были в свою очередь замечены алгоритмом, а затем использованы для уменьшения размера сжатых выходных данных.
Пример 4:
Этот заключительный пример взят из растровых данных [10] для следующего изображения:

Как и все другие примеры, он взят из игры Fossil Fighters для Nintendo DS, а именно из спрайта ямы, которую игрок делает, выкапывая окаменелости:

Поскольку в растровом изображении используются 4-битные цветовые индексы, каждая цифра hex-кода кодирует ровно один пиксель изображения. я думаю, что результат в основном говорит сам за себя, но стоит отметить выделение в правом нижнем углу отверстия. В обычном шестиугольнике вы, возможно, и сможете различить общую форму отверстия, особенно если посмотрите на ascii-панель справа, но с помощью цвета вы сможете рассмотреть невероятное количество деталей!
Если вы раньше использовали HEX-редактор с подсветкой байтов, вы, возможно, заметили что-то необычное в том, как я выбираю цветовое кодирование байтов
В большинстве цветных шестнадцатеричных редакторов есть несколько категорий, по которым они сортируют байты, например, 00 байт, формат ASCII для печати, пробелы ASCII, другие ASCII, не-ASCII или ff-байты.
Например, hexyl по умолчанию использует следующие категории:

Которые в конечном итоге выглядят примерно так:

Этих обширных категорий достаточно, чтобы выделить общие шаблоны, такие как повторяющиеся нулевые байты и строки ASCII. Они также создают достаточно вариативности для визуального отслеживания при прокрутке, что, на мой взгляд, весьма полезно. Прокрутка полностью монохромного hex-файла может дезориентировать.
я, однако, иду дальше, и у меня всего 18 групп: по одной для каждого ведущего ниббла [11] (`0X`, 1X, 2X …), плюс две дополнительные для 00 и выше:

Наличие большего количество цветов позволяет распознавать более сложные паттерны, такие как смещения по возрастанию в примере 2 или различные разделы в примере 3. Текст в формате ASCII по-прежнему узнаваем, но вместо сплошного голубого он окрашен в различные оттенки зеленого и оранжевого:
С другой стороны, UTF-8, отличный от ASCII, выглядит совершенно по-другому, со своим собственным уникальным паттерном, который виден только при наличии большого количества цветовых групп:
Можно привести еще миллион примеров, таких как отрицательные числа в two’s complement ( [12]«дополнительный код [12]») [12] (bd ff ff ff ff), машинный код, зашифрованные данные, цветовые палитры, матрицы преобразования и так далее, но, надеюсь, приведенных мной достаточно, чтобы донести свою точку зрения.
Красочный вывод в hex формате полезен по той же причине, что и подсветка синтаксиса в коде: он использует мощные возможности нашего
Существует множество инструментов, использующих подсветку, вот некоторые из них, о которых я знаю:
Утилиты для HEX-просмотра:
hexyl [13] — категории байтов по умолчанию, опция градиента;
xcd-rgb [14] — полная радужная байтовая раскраска;
hevi [15] — использует цвета для обозначения разделов для определенных типов файлов;
xxd — параметр для категорий байтов по умолчанию отключен.
HEX-редакторы:
Hexerator [16] — полная радужная раскраска байтов и множество других функций;
REHex [17] — несколько вариантов цвета (включая пользовательский), по умолчанию отключены;
Hex Fiend [18] — опция для категорий байтов по умолчанию отключена; пользовательские цвета, если вы готовы работать над этим [19].
Если вы знаете другие хорошие инструменты, пожалуйста, дайте мне знать! Если вы работаете с любыми инструментами, которые отображают hex-данные, я настоятельно рекомендую добавить цвета, в идеале с большим количеством групп (не стесняйтесь копировать мои!). По крайней мере, сделать 00 более незаметными, чем другие байты, чрезвычайно полезно
Основная цель этой статьи — привлечь внимание к тому, что эта функция существует. Она предоставляет множество полезных фишек практически без каких-либо недостатков, и о ней должно знать как можно больше людей. Если вы хотите отправить Issue/PR на добавление подсветки для инструмента, который вы используете чаще всего, я надеюсь, что эта статья послужит объяснением того, почему ее стоит добавить
Во время написания этой статьи я фактически начала создавать свой собственный пользовательский шестнадцатеричный редактор под названием hexapoda [20] >_<. он вдохновлен, в частности, Helix и Teehee, модальным редактированием, несколькими курсорами и операциями выделения (написан на Rust с использованием Ratatui!). Если достаточное количество людей захотят, я могла бы доработать его и написать несколько документов, чтобы любой мог им пользоваться, но пока это только для меня :3
Автор: DrArgentum
Источник [21]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/podsvetka/452620
Ссылки в тексте:
[1] мозг: http://www.braintools.ru
[2] магических байт : https://en.wikipedia.org/wiki/List_of_file_signatures
[3] little-endian: https://en.wikipedia.org/wiki/Endianness
[4] то код, который его парсит: https://github.com/simonomi/carbonizer/blob/6c311b6a2801576033cd42a8ba95461cee2ac6d1/Sources/Carbonizer/files/ff1/KPS.swift#L4-L25
[5] вики-страница: https://simonomi.dev/fftechwiki/file-formats/KPS/
[6] Fossil Fighters: https://en.wikipedia.org/wiki/Fossil_Fighters
[7] структуре: https://github.com/simonomi/carbonizer/blob/6c311b6a2801576033cd42a8ba95461cee2ac6d1/Sources/Carbonizer/files/ff1/DAL.swift#L20-L107
[8] алгоритма Хаффмана: https://en.wikipedia.org/wiki/Huffman_coding
[9] Nintendo DS BIOS: https://problemkaputt.de/gbatek.htm#biosdecompressionfunctions
[10] растровых данных: https://github.com/simonomi/carbonizer/blob/6c311b6a2801576033cd42a8ba95461cee2ac6d1/Sources/Carbonizer/models/Texture.swift#L5-L28
[11] ниббла: https://en.wikipedia.org/wiki/Nibble
[12] two’s complement (: https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4
[13] hexyl: https://github.com/sharkdp/hexyl
[14] xcd-rgb: https://hacktivis.me/projects/xcd-rgb
[15] hevi: https://codeberg.org/arnauc/hevi
[16] Hexerator: https://crumblingstatue.github.io/hexerator-book/0.4.0/hexerator.html
[17] REHex: https://rehex.solemnwarning.net
[18] Hex Fiend: https://hexfiend.com
[19] если вы готовы работать над этим: https://lobste.rs/c/jspwpw
[20] hexapoda: https://simonomi.dev/hexapoda
[21] Источник: https://habr.com/ru/companies/timeweb/articles/1034682/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1034682
Нажмите здесь для печати.