如何在 Linux/Bash 中提取二进制文件的文本部分?

问题描述 投票:0回答:3

我有一个二进制文件。如果我用 vi 打开它,它会显示人类可读的文本和二进制字符的序列。仅使用 Bash 提取人类可读部分的最佳方法是什么?

我在想,也许我们可以通过 grepsed 模式来做到这一点?

cat file1.bin | grep '????'  > newfile.txt
linux bash sed grep
3个回答
35
投票

使用

strings
实用程序 - 这正是它的设计目的。

安装:

sudo apt-get install binutils

然后像这样使用它:

string filename

3
投票

这是我在未安装“字符串”实用程序的系统中使用的内容

cat yourfilename | tr -cd "[:print:]"

这会打印文本并一次性删除不可打印的字符,这与“cat -v filename”不同,“cat -v filename”仅打印文本,但需要一些后处理来删除不需要的内容。请注意,某些二进制数据可能是可打印的,因此您仍然会在好数据之间得到一些乱码。我认为如果你可以使用字符串,它也可以消除这些乱码。


2
投票

如果您使用的是 Debian 发行版,您可能只需 sudo apt install radare2 即可获得

radare2
(r2)。

安装 r2 后,无论是使用

apt
、其他发行版上的其他安装程序,还是按照在线指南,您都可以使用
rabin2
来提取二进制文件的文本部分:

$ rabin2 -z your_binary

这通常比

strings
“更好”,因为它只输出二进制文件中有用的
.data
部分。该部分之外的内容并不总是很有用。

© www.soinside.com 2019 - 2024. All rights reserved.