扫描图像文件或磁盘以查找图案并返回其位置

扫描图像文件或磁盘以查找图案并返回其位置

假设我有一个块设备或一个图像文件。假设我还有一个字节序列或一个字符串或一些搜索模式。我如何才能获取此类模式或字符串出现的位置?有没有什么工具可以做到这一点?

答案1

一个简单的解决方案是使用

grep -aob "string to find" /dev/blockdev
  • “a”开关将文件视为文本,因此它显示输出,“o”开关将输出限制为您正在搜索的偏移量和字符串,这样您就不会得到二进制垃圾,“b”开关告诉它也打印字节偏移量。

答案2

这个问题有多个答案,取决于你想搜索的具体内容。

如果你想找到所有字符串在二进制文件中,则命令是字符串: 从手册

字符串(1)

姓名

字符串- 打印文件中可打印字符的字符串。

....对于给定的每个文件,GNU字符串打印长度至少为 4 个字符(或使用以下选项给出的数字)且后跟不可打印字符的可打印字符序列。默认情况下,它仅打印目标文件初始化和加载部分的字符串;对于其他类型的文件,它会打印整个文件中的字符串。

如果你有兴趣在二进制文件中搜索二进制字符串, 您可以使用命令行工具(据我所知,不在存储库中):

bgrep 是一个用于在二进制文件中搜索二进制字符串出现的实用程序。顾名思义,它的界面和设计模仿了无处不在的“grep”命令,用于在文本文件中搜索文本模式的出现。

或者,你可以使用以下策略:

cat YourFile | hexdump -C | grep YourPattern

再次使用hexdump:来自手册

十六进制转储(1)

姓名

十六进制转储- ASCII、十进制、十六进制、八进制转储

我使用方便的-C格式:

-C标准的十六进制+ASCII 显示。以十六进制显示输入偏移量,后跟十六个空格分隔的两列十六进制字节,后跟以 ''|'' 字符括起来的 %_p 格式的相同十六个字节。

而有些人更喜欢以下-c格式:

-C单字节字符显示。以十六进制显示输入偏移量,后跟每行 16 个以空格分隔、三列、空格填充的输入数据字符。

相关内容