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 This is a text f
00000010 69 6C 65 20 74 68 61 74 20 49 20 63 72 65 61 74 ile that I creat
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 system..
00000040 49 74 20 63 6F 6E 74 61 69 6E 73 20 6F 6E 6C 79 It contains only
00000050 20 61 20 66 65 77 20 6C 69 6E 65 73 20 6F 66 20 a few lines of
00000060 74 65 78 74 2E 0A 54 68 65 20 45 6E 64 21 0A text..The End!.
上面的显示显示换行(十六进制输出中的“0A”)在右侧的文本中显示为句点。在左侧的行号(十六进制)和右侧的文本之间显示的其他每个 2 字节段都表示一个字符。例如,文本第一行左侧的四个双字节字符串 (54 68 69 73) 对应于右侧所示的单词“This”。如果要将此单词更改为“That”,可以点击向右箭头键到达9,然后键入“1”,然后再次向右点击以到达3并键入“ 4”。右侧显示的文本将相应调整。
您可以使用 ^s 搜索特定字节。系统将提示您输入要搜索的内容。如果要保存更改,请使用 ^x 退出并以“y”响应。按住向下箭头键可在数据行中向下滑动。
在二进制文件中移动将以相同的方式工作,但您必须了解可以在不破坏文件格式的情况下更改文件的哪些部分。
可执行文件通常以如下所示的内容开头:
00000000 7F 45 4C 46 02 01 01 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 命令有时用于网络犯罪调查,因为没有内容对查看器隐藏,因此它可以帮助查找嵌入式恶意软件等。但是,了解您要查找的内容以及可能在哪里找到这些数据会有所帮助。备份您计划编辑的任何文件总是一个好主意,以便在需要时可以轻松恢复到该文件。
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
$ head micro.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命令可用于显示和保存这些文件的内容,以便以后以上面显示的格式进行分析。