Просмотр и изменение двоичных файлов с помощью команд Linux hexedit и xxd

Системы Linux поддерживают множество файловых редакторов - таких как vi, vim, neovim, ne, GNU Emacs и т. д. Но вы также можете установить редактор, позволяющий просматривать содержимое бинарных файлов и вносить в них изменения, - hexedit.

С помощью hexedit можно редактировать изображения, исполняемые и другие двоичные файлы, хотя для того, чтобы вносить эффективные изменения, не нарушающие формат файла, необходимо знать многое о формате редактируемого файла. В конце концов, вы будете редактировать по одному байту за раз. Это не означает, что вы не можете использовать эту команду для просмотра или редактирования текстовых файлов. Но причин для этого практически нет.

Используйте шестнадцатеричное редактирование

Несмотря на замечание выше о текстовых файлах, в следующем примере hexedit используется для просмотра/изменения текстового файла, но только для того, чтобы проиллюстрировать, как команда отображает содержимое файла, и предложить простой способ освоить работу с hexedit.Шлюз для пограничных вычислений

$ hexedit myfile.txt

00000000 54 68 69 73 20 69 73 20 61 20 74 65 78 74 20 66 Это текст f

00000010 69 6C 65 20 74 68 61 74 20 49 20 63 72 65 61 74 иле, которые я создаю.

00000020 65 64 20 75 73 69 6E 67 20 76 69 20 6F 6E 20 6D ed using vi on m

00000030 79 20 4C 69 6E 75 78 20 73 79 73 74 65 6D 2E 0A y Система Linux...

00000040 49 74 20 63 6F 6E 74 61 69 6E 73 20 6F 6E 6C 79 Он содержит только

00000050 20 61 20 66 65 77 20 6C 69 6E 65 73 20 6F 66 20 несколько строк

00000060 74 65 78 74 2E 0A 54 68 65 20 45 6E 64 21 0A текст... Конец!

На рисунке выше видно, что новая строка ("0A" в шестнадцатеричном формате) отображается как точка в тексте справа. Каждый дополнительный двухбайтовый сегмент, отображаемый между номером строки (шестнадцатеричным) слева и текстом справа, представляет собой символ. Например, четыре двухбайтовые строки (54 68 69 73) в левой части первой строки текста соответствуют слову "Это", показанному справа. Если вы хотите заменить это слово на "Это", нажмите клавишу со стрелкой вправо, чтобы дойти до 9 и набрать "1", затем снова нажмите вправо, чтобы дойти до 3 и набрать "4". Текст, отображаемый справа, будет соответствующим образом изменен.

Вы можете использовать ^s для поиска определенных байтов. Вам будет предложено ввести то, что вы хотите найти. Если вы хотите сохранить изменения, выйдите с помощью ^x и ответьте "y". Нажмите и удерживайте клавишу со стрелкой вниз, чтобы прокрутить строку данных вниз.

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

Исполняемые файлы обычно начинаются примерно так:

00000000 7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00 00 00 00 .ELF............

00000010 03 00 3E 00 01 00 00 00 10 6B 00 00 00 00 00 00 ..>......k......

00000020 40 00 00 00 00 00 00 00 40 22 02 00 00 00 00 00 @…..@”……

00000030 00 00 00 00 40 00 38 00 0D 00 40 00 1F 00 1E 00 ....@.8...@.....

00000040 06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 ……..@…….

00000050 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 @…..@…..

00000060 D8 02 00 00 00 00 00 00 D8 02 00 00 00 00 00 00 ............

00000070 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 …………

ELF в верхней строке справа от . идентифицирует этот файл как ELF-файл. ELF - это универсальный стандарт для исполняемых файлов, но его содержимое не будет читаемым текстом; это будет скомпилированный код. Если вы измените что-либо в этом файле, велика вероятность того, что он больше не будет работать должным образом и может вызвать ошибку сегментации.

Команда hexedit иногда используется в расследованиях киберпреступлений, поскольку в ней ничего не скрыто от зрителя, поэтому она может помочь найти встроенные вредоносные программы и т. д. Однако нужно знать, что вы ищете и где вы можете найти эти данные. Всегда полезно создавать резервные копии файлов, которые вы планируете редактировать, чтобы в случае необходимости их можно было легко восстановить.

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

Используйте xxd

Команда xxd позволяет создать шестнадцатеричный дамп из файла. Другими словами, вы получаете практически тот же вывод, что и hexedit, но xxd только отображает вывод. Он не предоставляет возможности редактировать содержимое файла. В примере ниже мы используем xxd для отображения шестнадцатеричного содержимого в верхней части jpg-файла вместе с доступными переводами шестнадцатеричных символов в символы. Вы можете заметить, что данное изображение, похоже, было создано с помощью Photoshop.

$xxd micro.jpg | head

00000000: ffd8 ffe0 0010 4a46 4946 0001 0100 0048......JFIF.....H

00000010: 0048 0000 ffe1 004c 4578 6966 0000 4d4d .H....LExif..MM

00000020: 002a 0000 0008 0001 8769 0004 0000 0001 .*.......i......

00000030: 0000 001a 0000 0000 0003 a001 0003 0000 ............

00000040: 0001 0001 0000 a002 0004 0000 0001 0000 ............

00000050: 002a a003 0004 0000 0001 0000 0036 0000 .*.......6...

00000060: 0000 ffed 0038 5068 6f74 6f73 686f 7020 .....8Photoshop

00000070: 332e 3000 3842 494d 0404 0000 0000 0000 3.0.8BIM.....

00000080: 3842 494d 0425 0000 0000 0010 d41d 8cd9 8BIM.%.....

00000090: 8f00 b204 e980 0998 ecf8 427e ffc0 0011 .....B~....

Вы также можете перенаправить вывод команды xxd в файл для последующего анализа.

$xxd micro.jpg > micro.txt

$ headmicro.txt

00000000: ffd8 ffe0 0010 4a46 4946 0001 0100 0048......JFIF.....H

00000010: 0048 0000 ffe1 004c 4578 6966 0000 4d4d .H....LExif..MM

00000020: 002a 0000 0008 0001 8769 0004 0000 0001 .*.......i......

00000030: 0000 001a 0000 0000 0003 a001 0003 0000 ............

00000040: 0001 0001 0000 a002 0004 0000 0001 0000 ............

00000050: 002a a003 0004 0000 0001 0000 0036 0000 .*.......6...

00000060: 0000 ffed 0038 5068 6f74 6f73 686f 7020 .....8Photoshop

00000070: 332e 3000 3842 494d 0404 0000 0000 0000 3.0.8BIM.....

00000080: 3842 494d 0425 0000 0000 0010 d41d 8cd9 8BIM.%.....

00000090: 8f00 b204 e980 0998 ecf8 427e ffc0 0011 .....B~....

Обратите внимание, что hexedit использует заглавные буквы в шестнадцатеричных символах, а xxd использует строчные буквы и отображает значение в четырехбайтовых, а не двухбайтовых кусках.

Подведите итоги

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

X

Для заполнения данной формы включите JavaScript в браузере.
Введите данные о продукте, такие как конфигурация интерфейса, среда и т.д., а также другие специфические требования, чтобы получить точное предложение.

ru_RURussian
Для заполнения данной формы включите JavaScript в браузере.
Введите данные о продукте, такие как конфигурация интерфейса, среда и т.д., а также другие специфические требования, чтобы получить точное предложение.