Сканирование файла изображения или диска на наличие рисунка и возврат его местоположения

2245
Melab

Скажем, у меня есть блочное устройство или файл изображения. И скажем, у меня также есть последовательность байтов или строка или какой-то шаблон поиска. Как я могу получить позиции вхождений такого шаблона или строки? Есть ли инструменты для этого?

2

2 ответа на вопрос

2
davidgo

Простое решение будет использовать

grep -aob "string to find" /dev/blockdev 
  • переключатель «a» обрабатывает файл как текст, поэтому он отображает вывод, переключатель «o» ограничивает вывод смещением и искомой строкой, поэтому вы не получаете двоичный мусор, а переключатель «b» сообщает ему чтобы распечатать смещение байта также.
0
MariusMatutiae

На этот вопрос есть несколько ответов, в зависимости от того, что именно вы хотите найти.

Если вы хотите найти все строки символов в двоичном файле, то команда является строкой : из Руководства ,

строки (1)

название

strings - печатать строки печатаемых символов в файлах.

.... Для каждого заданного файла в строках GNU печатаются последовательности печатаемых символов длиной не менее 4 символов (или число, указанное в приведенных ниже параметрах), за которыми следует непечатаемый символ. По умолчанию он печатает только строки из инициализированных и загруженных разделов объектных файлов; для других типов файлов он печатает строки из всего файла.

Если вместо этого вы заинтересованы в поиске двоичного файла для двоичной строки, вы можете использовать bgrep (не в репозиториях, AFAIK):

bgrep - это утилита для поиска вхождений двоичных строк в двоичных файлах. Как следует из названия, его интерфейс и дизайн смоделированы по вездесущей команде «grep», используемой для поиска вхождений текстовых шаблонов в текстовых файлах.

В качестве альтернативы вы можете использовать следующую уловку:

cat YourFile | hexdump -C | grep YourPattern 

Это использует hexdump: снова из руководства ,

шестнадцатеричный (1)

название

hexdump - ascii, десятичный, шестнадцатеричный, восьмеричный дамп

Я использую удобный -Cформат:

-C канонический шестнадцатеричный + ASCII дисплей. Отобразите входное смещение в шестнадцатеричном формате, за которым следуют шестнадцать разделенных пробелами двух столбцов шестнадцатеричных байтов, за которыми следуют те же шестнадцать байтов в формате% _p, заключенные в символы '' | ''.

в то время как некоторые люди предпочитают -cформат:

-c Однобайтовое отображение символов. Отобразите смещение ввода в шестнадцатеричном формате, за которым следуют шестнадцать разделенных пробелами трехстрочных символов, заполненных пробелами, входных данных на строку.