专栏首页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 条评论
登录 后参与评论

相关文章

  • 如何将用户添加到Linux桌面【Linux-Command line】

    我在 useradd command 上发布的文章阐述了对Linux系统用户管理的深层理解。Useradd 是一个命令行工具,但你也可以在Linux上通过图形方...

    QRosie
  • 蓝队的反制(2)

     还有几天,某大型全国性交友活动就要开始了,特此为蓝队的朋友们献上一篇简单的反制文章。

    鸿鹄实验室
  • SQL文件的BOM问题导致的invalid character错误及解决

    最近在做数据的搬运工,将Oracle中的数据搬运到ES中,方案很成熟了,使用Logstash的jdbc-input执行SQL,然后将结果输出到ES中。这么简单的...

    大江小浪
  • 9个基本的GNU binutils 工具【Linux-Command-line】

    想象一下,尽管无法访问软件的源代码,但仍然能够理解软件的实现方式,在其中找到漏洞,并且(更好的是)修复了错误。 凡此种种都源于二进制形式。 听起来像是拥有超能力...

    QRosie
  • 私人订制属于自己的Linux系统

    init通过调用/etc/inittab这个配置文件,然后再去执行/etc/rc.d/rc.sysinit的系统初始化脚本

    常见_youmen
  • Linux中hexdump命令用法

    hexdump命令一般用来查看”二进制”文件的十六进制编码,从手册上查看,其查看的内容还要很多,诸如:ascii, decimal, hexadecimal, ...

    砸漏
  • Linux脚本的bom格式开头

        仔细观察下,原来该脚本不小心带了bom文件头。检查一个文件是否带bom头,可以如下检查:

    幽鸿
  • 从零开始内网安全渗透学习

    0x00 win2008(域控) 1、修改计算机名: ? 2、配置固定ip: 其中网关设置错误,应该为192.168.206.2,开始默认的网管 ? 3、服...

    用户1467662
  • 零基础看内网渗透技术

    2、配置固定ip: 其中网关设置错误,应该为192.168.206.2,开始默认的网管

    天钧

扫码关注云+社区

领取腾讯云代金券