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


14

二进制文件包含字符串和一些数字,如果执行 od -c filenamestrings filename,则可以正确看到字符串。但是,数字呢?它们采用某种奇怪的格式。

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

0000000 036 \ 0 032004 SD \ 0 \ 0 \ 0 \ 0序列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 035003 \ 0 @ 3×233º004 \ 0Ñ\ a \ 0 \ 0
0000160ä\ 0 032 \ f E r \ 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 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。


4
以“解读”它,你需要知道什么格式它的存储英寸
凯文-

有人告诉我数字是二进制格式,特别是二进制整数。这对我的问题有帮助吗?

不,计算机上的所有内容都是二进制的,您需要知道文件的布局-每个数字在哪里,每个数字是什么意思。您从哪里获得此文件?
凯文(Kevin)2012年

为了澄清,我也有普通文件。[seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Date = 20120307]普通文件中的标记之一的值为ascii,普通文件通常用于读取日志,但要确保它具有正确的值,但格式不同,我们正在查看此二进制文件。

“标准”十六进制转储的右侧通常是该数据的ASCII表示。如果您看到此文本:not text在该ASCII视图中,并不表示读取文件的程序是ASCII。例如。数字7957706749327538292被编码为64位Little-Endian无符号整数时。在ASCII视图中看起来像这样:not text
Peter.O 2012年

Answers:


4

有很多存储数字的方式-ASCII(可以具有特定于语言环境的变体,例如使用','分隔小数部分或作为成千上万的分组),二进制整数(可变位数)/浮点数/双精度(所有根据字节序架构以及生成文件的软件是否将表示形式形式化而可能有所不同,BCD(未压缩,压缩,定点和其他变体),双五进制编码的十进制...

没有标准。


19

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

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

file filename

如果出现类似以下内容:

filename: data

而且您完全不知道格式是什么,它来自什么程序,它的用途是什么或关于的内容filename,那么您可能应该放弃。

八进制转储输出

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

十六进制转储输出

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

整数

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

我现在可能会忘记更多。

这仅是来自一台常见的现代计算机体系结构的一维整数统一数组。如果您的数据具有某种复杂性,那么事情将变得如此繁琐,以至于赢得彩票比仅仅猜测格式变得容易得多。而且,除非您知道格式,否则您必须猜测(一个有根据的猜测,但一个猜测)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.