如何解释二进制文件的八进制或十六进制转储?

14 od binary hexdump

二进制文件有字符串和一些数字,如果我这样做 od -c filenamestrings filename,我可以正确地看到字符串。但是,数字呢?它们采用某种奇怪的格式。

做完后的文字od -c filename是这样的:

0000000 036 \0 032 004 SD \0 \0 \0 \0 seq 1
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \t \0 ó 002 3 001
0000040 & \0 032 \f O 2 006 \0 \0 \0 osfus 1
0000060 ó 002 3 001 ÿ \r \0 \0 \t \0 \0 @ 3 ×
0000100 233 º 004 \0 é 003 \0 \0 & \0 032 \f O 2 7 \0
0000120 \0 \0 osfeu 1 ó 002 3 001 é 235
0000140 \0 \0 035 003 \0 @ 3 × 233 º 004 \0 Ñ \a \0 \0
0000160 ä \0 032 \f O r E \0 \0 \0 osfap 1

这个怎么破译?

我什至试过 hexdump -C filename

输出是这样的:

00000000 1e 00 1a 04 53 44 00 00 00 00 73 65 71 31 20 20 |....SD....seq1 |
00000010 20 20 00 00 00 00 00 00 00 00 09 00 f3 02 33 01 | .......ó.3.|
00000020 26 00 1a 0c 4f 32 06 00 00 00 6f 73 66 75 73 31 |&...O2....osfus1|
00000030 20 20 f3 02 33 01 ff 0d 00 00 09 00 00 40 33 d7 | ó.3.ÿ......@3×|
00000040 9b ba 04 00 e9 03 00 00 26 00 1a 0c 4f 32 37 00 |.º..é...&...O27.|
00000050 00 00 6f 73 66 65 75 31 20 20 f3 02 33 01 e9 9d |..osfeu1 ó.3.é.|
00000060 00 00 1d 03 00 40 33 d7 9b ba 04 00 d1 07 00 00 |.....@3×.º..Ñ...|
00000070 e4 00 1a 0c 4f 72 45 00 00 00 6f 73 66 61 70 31 |ä...OrE...osfap1|

澄清一下,作为常规文件的主文件有一个显示的属性是某种奇怪的格式,因此我们正在查看原始/二进制文件。

对常规文件进行八进制转储,解决了查看问题。

有了grep 'id=123' regular_file | head -1 | od -c,我就可以看到里面的数字了。我期待 1,它向我们显示为 001。

Ale*_*ios 19

对于计算机科学,我必须记住的第一件事是数据 + 解释 = 有用的信息。一个推论是,如果您缺少数据或解释,您将一无所有。数据本身无法告诉您如何解释它。(您可以拥有告诉您这一点的元数据,但是您也需要知道如何解释元数据

在这种情况下,我建议尝试这样做:

file filename
Run Code Online (Sandbox Code Playgroud)

如果它出现类似的东西:

filename: data
Run Code Online (Sandbox Code Playgroud)

如果你完全不知道它的格式是什么,它来自什么程序,它的用途是什么,或者任何关于filename.

八进制转储输出

od(octal dump) 产生混合文本和八进制转储。非数字是任一可打印的字符,如osf等,或不可打印的字符,如\0(ASCII 0, NUL),或\a(ASCII 7 BEL),或数字基座8,与标准C前缀0(例如032= 26在十进制)。您的文件被解释为8 位字节流。

十六进制转储输出

hexdump生成传统的十六进制转储,其中一列以十六进制列出 8 位字节,另一列显示这些字节对应的 ASCII 字符(如果有)(如果字节值是不可打印的 ASCII 字符,或者根本不是 ASCII 字符) ,.显示在那个位置)。同样,您的文件被解释为8 位字节流。

整数

如果您的文件包含 100% 的二进制整数(即某种整数表示形式的无头、统一、一维数组),那么您必须自己回答以下所有问题:

  • 它们是“正确的”二进制还是二进制编码的十进制 (BCD)?(可能是二进制)
  • 它们的位宽是多少?
  • 如果它们的宽度不是 8 的倍数,它们是像 SMS 消息或 Base64 那样按位打包,还是按字节对齐?
  • 如果它们的宽度是 8 位或更多,字节顺序是什么?它是 Big Endian、Little Endian 还是其他更稀有的种类之一?
  • 整数是有符号的还是无符号的
  • 如果它们是签名的,它们是用二进制补码(更有可能)还是一个补码表示,或者是一些罕见而奇怪的东西?

可能还有更多我现在忘记了。

这仅适用于来自常见的现代计算机体系结构的一维统一整数数组。如果您的数据有任何类型的复杂性,事情就会变得如此复杂,中奖很快就会变得比仅仅猜测格式更容易。而且您必须猜测(有根据的猜测,但只是猜测),除非您知道格式。


sym*_*ean 4

存储数字的方法有很多种 - ASCII(可以有特定于区域设置的变体,例如使用“,”分隔小数部分或作为千位分组)、二进制整数(可变位数)/浮点/双精度(所有这可能会有所不同,具体取决于字节序体系结构以及生成文件的软件是否形式化表示形式)、BCD(未压缩、打包、定点和其他变体)、双五进制编码十进制...

没有标准。