我有一个二进制文件。如果我用 vi 打开它,它会显示人类可读的文本和二进制字符的序列。仅使用 Bash 提取人类可读部分的最佳方法是什么?
我在想,也许我们可以通过 grep 或 sed 模式来做到这一点?
cat file1.bin | grep '????' > newfile.txt
使用
strings
实用程序 - 这正是它的设计目的。
安装:
sudo apt-get install binutils
然后像这样使用它:
string filename
这是我在未安装“字符串”实用程序的系统中使用的内容
cat yourfilename | tr -cd "[:print:]"
这会打印文本并一次性删除不可打印的字符,这与“cat -v filename”不同,“cat -v filename”仅打印文本,但需要一些后处理来删除不需要的内容。请注意,某些二进制数据可能是可打印的,因此您仍然会在好数据之间得到一些乱码。我认为如果你可以使用字符串,它也可以消除这些乱码。
如果您使用的是 Debian 发行版,您可能只需 sudo apt install radare2
即可获得
radare2(r2)。
安装 r2 后,无论是使用
apt
、其他发行版上的其他安装程序,还是按照在线指南,您都可以使用 rabin2
来提取二进制文件的文本部分:
$ rabin2 -z your_binary
这通常比
strings
“更好”,因为它只输出二进制文件中有用的 .data
部分。该部分之外的内容并不总是很有用。