使用“xxd -r”命令不会将整个 ASCII 转换为文本

使用“xxd -r”命令不会将整个 ASCII 转换为文本

我正在参加 CTF(夺旗)挑战,其中一面旗帜隐藏在 ASCII 中

cat /home/alice/flag22
39 64 31 61 65 38 64 35 36 39 63 38 33 65 30 33 64 38 61 38 66 36 31 35 36 38 61 30 66 61 37 64

当我将其输入到xxd并转换为十六进制字符,我只得到整个字符串的一个子集

cat /home/alice/flag22 | xxd -r
d1ae8d569c83e03d

我希望整个字符串9d1ae8d569c83e03d8a8f61568a0fa7d(使用在线工具)。

不知何故,9d8a8f61568a0fa7d被删除了。

9d 1ae8d569c83e03d8a8f61568a0fa7d

我是否没有xxd正确使用该工具?(查看了man xxd但没有发现任何明显的问题)。

答案1

尝试添加-p(普通)选项,如下所示xxd

cat /home/alice/flag22 | xxd -r -p

当我在 macOS 10.5.6(Catalina)上的 Bash 中执行此操作时得到的输出似乎正是您想要的:

9d1ae8d569c83e03d8a8f61568a0fa7d

根据man xxd选项-p执行以下操作:

以 postscript 连续十六进制转储样式输出。也称为纯十六进制转储样式。

man xxd在(恢复)选项下更深层次的内容中-r对此进行了解释;粗体强调是我的:

逆向操作:将十六进制转储转换(或修补)为二进制。如果不写入标准输出,xxd 会将其写入其输出文件而不截断它。使用组合-r -p来读取没有行号信息和特定列布局的纯十六进制转储。任何地方都允许有额外的空格和换行符。

由于您拥有的长字符串十六进制转储没有行或列信息,因此-p需要该选项。

相关内容