专栏首页Opensource翻译专栏Hexdump如何工作【Linux-Command line】

Hexdump如何工作【Linux-Command line】

Hexdump可帮助查证二进制文件的内容。

了解hexdump的工作原理吧。

图片来源:Lewis Cowles, CC BY-SA 4.0

Hexdump是一种实用程序,可以以十六进制,十进制,八进制或ASCII显示二进制文件的内容。 它是一种检查工具,可用于数据恢复,逆向工程和编程。

了解基础

Hexdump可以以很少的工作量提供输出,根据你正在查看的文件的大小,可能会有很多输出。 为实现本文目的,创建一个1x1 PNG文件。 可以使用GIMPMtpaint等图形应用程序来执行此操作,也可以使用ImageMagick在终端中创建它。

这是使用ImageMagick生成1x1像素PNG的命令:

可以使用file命令确认此文件是PNG:

你可能想知道file命令如何确定文件类型。 巧合的是,这就是Hexdump所揭示的。 目前,你可以在所选的图像查看器中查看一个像素的图形(它看起来像是“.”),也可以使用hexdump查看文件中的内容:

你所看到的是通过以前从未使用过的lens得到的示例PNG文件的内容。 这些数据与你在图像查看器中看到的数据完全相同,并且以你可能不熟悉的方式进行了编码。

提取熟悉的字符串

仅仅因为默认数据转储似乎毫无意义,并不意味着它就没有有价值的信息。 你可以使用“--canonical”选项将此输出或至少实际翻译的部分转换为更熟悉的字符集:

在右列中,你会看到与左侧相同但以ASCII形式显示的数据。 如果仔细看,可以发现一些有用的信息,例如文件的格式(PNG),以及文件创建和最后修改的日期和时间(从最底部开始)。 点表示ASCII字符集中不存在的符号,这是可以预期的,因为二进制格式不限于普通的字母和数字。

file命令从前8个字节知道该文件是什么。 libpng specification警示程序员寻找什么。 可以看到,在此图像文件的前8个字节内,特别是字符串PNG。 这很重要,因为它揭示了file命令如何知道要报告的文件类型。

你还可以控制hexdump显示多少字节,这对于大于一个像素的文件很有用:

你不必将hexdump限制为PNG或图形文件。 你还可以针对每天运行的二进制文件运行hexdump,例如lsrsync或要检查的任何二进制格式。

用hexdump实现cat

如果阅读了PNG规范,你可能会注意到前8个字节中的数据看起来与hexdump提供的数据有所不同。 实际上,它们是相同的数据,但是使用不同的转换来显示。 因此,hexdump的输出是真实的,但对你而言并不总是直接可用,这取决于你要查找的内容。 因此,hexdump具有用于格式化和转换其转储的原始数据的选项。

转换选项可能会变得很复杂,因此先进行一些琐碎的练习很有用。 这里是通过重新实现cat命令格式化hexdump输出格式的简短介绍。 首先,在文本文件上运行hexdump以查看其原始数据。 通常,你可以在硬盘驱动器上的某个位置找到GNU General Public License(GPL)许可证的副本,也可以使用任何方便的文本文件。 你的输出可能会有所不同,但是以下是在系统上(或至少部分系统上)查找GPL副本的方法:

对它运行hexdump:

如果文件的输出很长,请使用“--length“(或“-n”缩写)使其易于管理。

原始数据可能对你没有任何意义,但是你已经知道如何将其转换为ASCII:

该输出很有帮助,但笨拙且难以阅读。 要格式化hexdump的输出超出其自身选项所提供的范围,请使用“--format”(或“-e”)以及专门的格式化代码。 用于格式化的简写类似于printf命令使用的简写,因此,如果你熟悉printf语句,你可能会发现hexdump格式化更容易学习。

在hexdump中,字符序列%_p告诉hexdump在系统的默认字符集中打印字符。“ --format”选项的所有格式符号必须用单引号引起来:

$ hexdump -e'"%_p"' /usr/share/doc/libblkid-devel/COPYING
This library is fre*
 software; you can redistribute it and/or.modify it under the terms of the GNU Les*
er General Public.License as published by the Fre*
 Software Foundation; either.version 2.1 of the License, or (at your option) any later.version..*
The complete text of the license is available in the..*
/Documentation/licenses/COPYING.LGPL-2.1-or-later file..

此输出更好,但仍不方便阅读。 传统上,UNIX文本文件采用80个字符的输出宽度(因为很久以前,监视器往往只能容纳80个字符)。

尽管此输出不受格式限制,但可以通过附加选项强制hexdump一次处理80个字节。 具体来说,通过将80除以1,可以告诉hexdump将80字节视为一个单位:

$ hexdump -e'80/1 "%_p"' /usr/share/doc/libblkid-devel/COPYING
This library is free software; you can redistribute it and/or.modify it under the terms of the GNU Lesser General Public.License as published by the Free Software Foundation; either.version 2.1 of the License, or (at your option) any later.version...The complete text of the license is available in the.../Documentation/licenses/COPYING.LGPL-2.1-or-later file..

现在,文件已以80字节的块进行处理,但失去了换行的感觉。 可以使用“\ n”字符添加自己的字符,该字符在UNIX中代表新行:

你现在(大致)已使用hexdump格式实现了cat命令。

控制输出

实际上,格式化是使hexdump有用的方式。 现在,至少在原则上已经熟悉hexdump格式,可以使hexdump -n 8的输出与官方libpng规范所述的PNG标头的输出匹配。

首先,你知道要hexdump以8字节的块形式处理PNG文件。 此外,通过整数识别,你可能知道PNG规范以十进制表示,根据hexdump文档,它由“%d”表示:

可以通过在每个整数后面添加一个空格来使输出完美:

现在,输出与PNG规范完美匹配。

Hexdumping --为了乐趣与利益

Hexdump是一个引人入胜的工具,不仅可以教你更多有关计算机如何处理和转换信息的知识,而且还可以教你文件格式和已编译二进制文件的功能。你可以在工作期间全天随机尝试对文件运行hexdump。 你无法预料自己会发现什么样的信息,也料想不到何时能收获实用信息。

原文链接:https://opensource.com/article/19/8/dig-binary-files-hexdump

原文作者:Seth Kenlon(Red Hat)

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在命令行进行sort排序【Linux-Command line】

    使用sort命令重组数据,可以从Linux,BSD或Mac终端以对你有意义的格式进行。

    QRosie
  • 常用Linux 命令速查表【Linux-Command line】

    常用Linux 命令速查表——下载我们的新版Linux命令速查表,以便执行常见任务

    QRosie
  • Linux chgrp和newgrp命令简介【Linux-Command line】

    在近期的文章中,我介绍了chown命令,该命令用于修改系统上文件的所有权。 回想一下,所有权是分配给对象的用户和组的组合。 chgrp和newgrp命令为管理需...

    QRosie
  • 云计算的特征主要有哪些

    云计算中的硬件与软件资源,都可以通过按需配置来满足客户的业务需求。云计算资源中的动态配置及动态分配,并且这些资源支持动态的扩展。

    CloudBest
  • Java 之 Lombok 必知必会

    在目前众多编程语言中,Java 语言的表现还是抢眼,不论是企业级服务端开发,还是 Andorid 客户端开发,都是作为开发语言的首选,甚至在大数据开发领域,Ja...

    闻人的技术博客
  • Python选择结构注意事项

    以百分制成绩转换为字母等级成绩为例,简单介绍一下Python选择结构需要注意的事项。

    Python小屋屋主
  • Spring Cloud Gateway 整合Eureka路由转发

    前面我们对Spring Cloud Gateway进行了一个入门的学习,具体文章可以查看《Spring Cloud Gateway 网关尝鲜》进行学习。

    猿天地
  • 用数据分析的方法教你如何获得一份美好的爱情~

    一 为什么做爱情战略分析? 基于对爱情的三个重要假设 1、爱情是稀缺的情感资源: 由于是稀缺资源,因此爱情存在竞争和选择,只有理性决策,才能在有限的资源约束下对...

    小莹莹
  • 从0开始做系统之vue

    不知道有人见过造房子或者建设工程没有。最基本的是水泥,沙子,然后跟钢精一起凝结成混凝土。如果要按照传统的方法,在施工现场,要将沙子,水泥和水按照一定的比...

    赵云龙龙
  • 关于ORA-01779问题的分析和解决 (r4笔记第22天)

    最近同事问我一个问题,是关于一个update语句的问题,需求有点特别,结果在使用update语句尝试了各种方法后,仍然是不依不饶的报出ORA-01779的错误。...

    jeanron100

扫码关注云+社区

领取腾讯云代金券