Home Text 1
Резба по файлам командой dd

Задача

Меня попросили найти, чем открыть файлы с расширением iraw. С которым я прежде не сталкивался. Однако благодаря богу, гуглю и яндексу быстро выяснил, что это формат, применяемый фирмой Apple и конвертеров в/из него кроме как в AppleStore нету.

Однако внутри в первых же шестнадцати байтах была характерная для JPEG-файлов сигнатура JFIF. И когда я переименовал файл из .iraw в .jpg, программа-просмотрщик картинок ACDSee его открыла. Однако размер этого файла не вязался с размерами картинки - 1.8 Мб для jpeg-а 1000 на 500 пикселей это явно много. Многостраничный? Тогда JFIFов в нём должно быть много. И действительно, команда grep -ac JFIF file.iraw нашла нексколько десятков вхождений.

Что же, логично - файл-контейнер содержит в себе объекты-BLOBы. Как их оттуда извлечь? Команда grep -abo JFIF file.iraw выдала список смещений от начала файла в байтах. Не в чистом формате, но единообразные суффиксы :JFIF элементарно удаляются. Теперь берём острый нож, точнее, команду dd и запускаем её с соответствующими параметрами. Не один раз, а столькь, сколько картинок упаковано в контейнер. Чтобы переложить работу на железную пилу, был написан скрипт:

cnt=0

begin=0


for i in `cat $file.txt|sort -n;echo 99999999`

do

end=`expr $i - 6`

size=`expr $end - $begin`

dd if=$file.iraw of=$file.$cnt.jpg bs=1 skip=$begin count=$size

begin=$end

cnt=`expr 1 + $cnt`

done

В результате работы скрипта файл был порезан на части, каждая из которых успешно открывалась как JPEG-файл. Этот винегрет был заархивирован и передан благодарному пользователю


Хостинг Majordomo.ru Яндекс.Метрика My counter Рейтинг@Mail.ru