Bash 的文件雕刻无法使用 grep 找到十六进制值 FFD8 或 FFD9

File carving with Bash can't find hex values FFD8 or FFD9 with grep

我希望有人能帮我解决我的文件雕刻脚本。 我想在原始格式 (.dd) 的图像文件中找到文件头和相应的脚注作为十六进制值。

对于其他页眉和页脚,我的脚本运行良好但不适用于 JPG 文件的页眉和页脚:FFD8 和 FFD9 这是我目前的处理方式:

grep -obUaP "\xFF\xD8" image_file.dd

我想取回搜索到的字符串页眉和页脚位置的偏移量,以便稍后用 dd 提取它们。 我用 grep 将图像文件作为二进制文件处理。

例如,当我使用我的模式通过此搜索在图像中查找 JFIF 时,我发现了很多匹配项:

grep -obaUP "\x4A\x46\x49\x46" image_file.dd

但是 none 使用 FFD8!

那么有谁能给我提示为什么我找不到这些简单的十六进制值吗?

Man grep 说:

it can be helpful to use -a or to set LC_ALL='C' in the environment, in order to find more matches even if the matches are unsafe for direct display

所以,尝试:

LC_ALL=C grep -obUaP "\xFF\xD9" file

在脚本中使用上面的内容,与命令行完全一样,只需在 grep 命令前面加上 LC_ALL=C,与上面完全一样。