К проблеме анализа и определения типа файла
Петрянин Д.Л., Горячев Н.В.
ФГБОУВПО "Пензенский государственный университет" [email protected]. ги
Юрков Н.К.
ФГБОУВПО "Пензенский государственный университет"
Аннотация. В работе приводится теоретическое представление описания форматов файлов и дескрипторов заголовка файла. Детально описывается разбор файла в шестнадцатеричном представлении для определения его типа. Рассказано о проблемах определения типа файлов, при отсутствии расширения. Также описывается проведенный эксперимент с программой, определяющей тип файла, в ходе которого были получены совершенно отличающиеся друг от друга результаты.
Ключевые слова. Файл, формат, тип, структура, архиватор, данные, HEX.
Введение
Формат файла, как спецификация структуры данных, часто указывается в его имени, как часть, отделённая точкой (обычно эту часть называют расширением имени файла). Например, окончание имени (расширение) «.txt» обычно используют для обозначения файлов, содержащих только текстовую информацию, a «.doc» — содержащих текстовую информацию, структурированную в соответствии со стандартами программы Microsoft Word. Файлы, содержимое которых соответствует одному формату (реже — одному семейству форматов), иногда называют файлами одного типа [Гасов и др., 2001].
Так как общепринятая в вычислительной технике концепция файла — неструктурированная последовательность байтов, компьютерные программы (например, входящие в состав операционной системы Windows), сохраняющие в файлах структурированные данные, должны как-то преобразовывать их в последовательность байтов и наоборот (в объектно-ориентированном программировании эти операции называются, соответственно, «сериализацией» и «десериализацией»; для текстовой информации последнее также называется «разбор» или «парсинг»). Алгоритм этого преобразования, а также соглашения о том, как различные фрагменты информации располагаются внутри файла, и составляют его «формат». [Гасов и др., 2001]
Нередки случаи, когда расширение файла не указано и определить, в таком случае, формат файла крайне затруднительно. На одно расширение может приходиться несколько форматов файлов, т.к. файл одного и того же расширения может содержать различные данные и, соответственно,
открываться различными приложениями. В качестве примера можно привести файл с расширением «.BIN» - он может являться как файл двоичных данных, как бинарный видео-файл [Структура BMP файла, 2014] и как исполняемый файл Unix [Структура BMP файла, 2014], [Тихменев и др., 2014]. При открывании такого файла перебором разных программ, результат часто оказывается отрицательным. Программисты соответствующего профиля могут определить формат файла по его содержимому, зная структуру данного файла. В случае отсутствия данной структуры будет проблематично узнать состав файла.
Например, разберем файл неизвестного расширения. Откроем его в шестнадцатеричной форме записи (с помощью HEX редактора - HEX Editor) (рис. 1) и проанализируем его содержимое. Чаще всего в первых байтах (чаще в двух байтах) содержится заголовок файла в определенной последовательности. Эта часть отвечает за формат файла, и называется «дескриптор заголовка файла» (description с англ. - описание). На просторах сети Интернет есть несколько онлайн-ресурсов, которые определяют тип файла по дескриптору заголовка файла, например, самый известный [Структура BMP файла, 2014].
"^Цех-редактор [D:\File] Г_ | &
фсаЧл Гфеека Qpocriotp Догюлпигслььэ ?
0x000000: 424D 36F9 15 0 0 0000 0000 3600 oooo 2800 Ыибщ......S. . . <.
0x000010: 0000 2003 ОПОО 5 002 0000 0100 1600 0000 ~ ...x.........
0x000020: 0000 0800 OOOD 130B 0000 13 0B oooo 0000
0x000030 : 0000 8000 0DDD 0с4в 3709 4634 0647 3309 .......E7.H4.G3.
0x000040 : 4834 8E4B 37 QD 4A3 6 QC47 3308 432F 0944 H4.K7. J6.G3. С/ . D
0x000050: 30 0A 4531 0E 47 3410 4 335 1047 340D 4431 8.El.G4.H5.G4.D1
0x000060: 0A41 2E09 3D2B 123F 2EBC 3827 0B38 270E . A. . 3. . 3' . 8' .
0x000070: 3E2C 8E3E 2C0B 3A2B 093D 2B0F 4633 053C >,->,.:(.=+. F3. <
0x000080; 2908 432F 0D48 3409 4334 0544 3003 442F ),C/.H4.H4.DO.D/
0x000090 : 0748 330D 4C36 0C49 350D 4334 0B46 320A .H3.1С.15.И4.F2.
ОхООООАО : 4531 0944 300A 4531 DB4S 320B 4632 114C El. D0 . El. F2 . F2. L
ОхООООВО: 3B0F 4 A3 6 OD40 3 4 0E 4935 104B 3710 4B37 6.J6.H4.15.K7.K7
ОхООООСО: 0D48 3400 4531 0A47 330C 4B37 104F 3811 ,H4.El.G3.K7.O;.
OxOOOODO : S03C 0E4D 390C 4ВЭ7 0Б4А 360C 4B37 0D4C PC.M9.K7.JË.K7.L
ОхООООЕО: звос 4B37 0D4C 3010 4F3B 1352 3E11 503C 8. K7. L6. O; . R>. P<
OxOOOOFO: 0Ê4A 3605 4430 BC4C 3607 4731 0747 310B . J.6. DO. LS. Gl. Gl.
0x000100: 4E3S 0D4D 370B 4B35 0E4E 3614 543E 0C4C KS.M7.K5.N3.I>.L
0x000110: 360D 4D37 0D4D 370E 4B35 0646 3207 4731 6.M7.M7.K5.H2.Gl
0x000120: 0949 330C 4C36 0047 3308 4733 0647 3389 .13.L6.G3.G3.G3.
0x000130: 4834 8A4B 360B 4C37 3D4E 390E 4F ЗА 0E51 H4.K6.L7.N9.0:.Q
0x000140: 3C0C 4 F ЗА D04D 3839 4E39 0B5D 3E 0 A 4F3A <.0:.MB.ÎJ3.P;.0:
0x000150: 044C 3608 4832 07 4C 3703 4D38 0B50 3B0C .L6.H2.L7.MB.F;.
0x000160: 513C 8C51 3C09 4E39 064B 3604 4934 074C Q<.Q<.N9.K6.14.L
0x000170: 3704 4934 0146 3102 4732 0449 3404 4934 7.14.Fl.G2.14.14
0x000130: 0146 3100 432E 0649 3408 4B36 0A4D 3S0C . Fl. C. .14. K5.M3.
0x000130: 4F3A 0C4F 3A0A 4D33 034B 3606 4934 0043 0:.0:.MB.K6.14.С
GxOOOlAO : 2E03 4631 074A 3507 4A35 0543 3304 4732 .-Fl.J5.J5.H3.G2
QxQOOIBO : C54S 3309 4 A3 5 023F 2B09 4430 0F4A 3612 .H3.J5.7+.DU.36.
GxOOOICO: 4D39 0F4C 3 S OD 4A3 6 0B43 340Б 4334 0342 M9.L0.J6.Hi.Hi.В
OxOOOlDO: 2E85 4430 0049 Si 0A 4B36 0B4C 3709 4A35 ..D0.li.K6.L7.Л5
QxOOOlËO: 0548 3303 4631 0743 3205 4630 0445 2FÛ6 . H3. Pl. H2 . ED. Ё/ .
QxDOOlFO: 4731 0045 33 D В 4933 3546 3002 432D 0748 G1.I3.13.S3.C-.H
0x000200: 320B 4C36 0 E 4 F 390F 5B3A 0C4D 3709 4A34 2.L6.09.F:.M7.J4
П..ППП11 n. /1П E Л ГН"Э c ПТ1 If О С (lin -1 -} с n -ЗТ1П1? ■^C T 'Г TTT П . П . V
Fas:0_| | Ovw size : 1440051
Рис. 1. Открытие файла в НЕХ-редакторе
Первые два байта в нашем файле - '42 4D' (ASCII-дескриптор заголовка: «ВМ»). Введем их на ранее приведенном сайте [Структура BMP файла, 2014] - результат поиска представлен на рис. 2.
Поиск расширений на сайте
Расширение: г
олиеэние ^айла
НЕХ-дескрилтор за полозка' 42 iD
аде п-дргфмглпр зяталоркз
|11оиск|
Реиупьтаты поиска:
Формат тип описание
bmd Игры Файл 3D-мод ели GameCube HEX 42 4D44ÛA
nmp Растровые изображение Точечный рисунок HEX' 42 4D
.rie Растровые изображение Раетровзе изображение RLE HEX 42 4D
Рис. 2. Результат поиска на сайте
Найдено 3 различных формата: в нашем случае подходит под описание 2 (.bmp) или 3 (.rle). RLE отличается от BMP лишь компрессией, поэтому выбираем для нашего эксперимента формат BMP, как самый распространенный.
Структура формата BMP (BitMaP) представлена в таблице 1 [Петрянин и др., 2014].
Согласно приведенной структуре можно прочитать файл, используя параметры, которые находятся в начале файла: на 10 байте от начала файла находится адрес, начиная с которого содержится само изображение. Файл разбит на 3 основных раздела:
• заголовок файла;
• заголовок BITMAP (информация об изображении);
• палитра и данные самого изображения (данные растрового массива).
В файлах BMP информация о цвете каждого пикселя кодируется 1, 4, 8, 16 или 24 бит (бит/пиксель). Числом бит/пиксель, называемым также глубиной представления цвета, определяется максимальное число цветов в изображении. Изображение при глубине 1 бит/пиксель может иметь всего два цвета, а при глубине 24 бит/пиксель - более 16 млн. различных цветов.
Формат данных растрового массива в файле BMP зависит от числа бит, используемых для кодирования данных о цвете каждого пикселя [Петрянин и др., 2014]. Файлы с глубиной 16 и 24 бит/пиксель не имеют таблиц цветов; в этих файлах значения пикселей растрового массива непосредственно характеризуют значения цветов RGB. Порядок цветов в массиве немного изменен: BGR (синий, зеленый, красный) - это следует учесть при чтении файла.
Таблица 1 Структура BMP файла
Смещение от начала файла в байтах Количество байт Назначение
Заголовок файла
0 2 Тип файла (код 424Б - буквы 'ВМ')
2 4 Размер файла в байтах
6 2 0 (Резервное поле)
8 2 0 (Резервное поле)
10 4 Смещение, с которого начинается само изображение (растр).
Заголовок BITMAP (информация об изображении)
14 4 Размер заголовка BITMAP (в байтах) равно 40
18 4 Ширина изображения в пикселях
22 4 Высота изображения в пикселях
26 2 Число плоскостей, должно быть 1
28 2 Бит/пиксель: 1, 4, 8 или 24
30 4 Тип сжатия
34 4 0 или размер сжатого изображения в байтах
38 4 Горизонтальное разрешение, пиксель/м
42 4 Вертикальное разрешение, пиксель/м
46 4 Количество используемых цветов
50 4 Количество "важных" цветов.
Палитра (Карта цветов для N цветов), если используется
54 4*N Палитра
Изображение
Согласно структуре (таблица 1) разработан алгоритм чтения файла формата BMP, он показан на рис. 3.
Рис. 3. Алгоритм чтения файла формата ВМР
Чтение нашего файла произведем с помощью написания программы, по приведенному алгоритму (рис. 3), в среде разработки Delphi. Результат работающей программы представлен на рис. 4.
Анализ 8МР файла
Открыть файл
Инфпр: 1аичя £! ФаЙВв
Размер naitta: '326742 байт
CMiiutmi от качана файла яе самогс изображения байт
Р«мер яготоека BITMAP
Размер изображения: 221 ц492
Число плоскостей: 1
Глубина цвета: 24 бит/п
Сжатие: О
Размер сжатого изображения: 0 бзйт Гори6онта."*1Ш)ч разрешение: 37БО г^лсель/м В ертикаплве разрешений: 3?80 г**сельЛч Количество испопьэаамык useice D Количестве "важных" цветов. О
Рис. 4. Пример работающей программы «Анализ BMP файла»
Проведя данный эксперимент, мы прочитали файл формата BMP побайтно программным способом, а именно: получили все параметры файла, согласно его структуре (таблица 1) и открыли изображение, которое хранилось в файле. Следовательно, имея базу данных (БД) всех возможных расширений и НЕХ-дескрипторов, подобной на сайте [Структура BMP файла, 2014], можно детально (побайтно) прочитать файл смешанного содержания и определить из каких типов данных он состоит, по способу проведенного эксперимента.
Рис. 5. Алгоритм определения типа данных по содержимому файла
Разработанный алгоритм определения типа данных по содержимому файла представлен на рис. 5. По первым байтам файла определяем сам тип файла (блок 1) по БД (блок 3). Если он найден, то далее по содержимому файла находим НЕХ-дескрипторы (от 6 байтов и более) (блок 5), совместно с БД (блок 3) устанавливаем тип данных и подсчитываем его размер (блок 6). Результаты анализа заносятся в таблицу. В том случае, если тип файла не определен (блок 7), то производится анализ содержимого файла вручную: в случае отрицательного результата поиска отдельных фрагментов в БД - определяется новый тип данных, который сохраняется в БД (блок 8). Данный анализ должен проводиться на нескольких файлах одинакового формата, чтобы исключить вероятность ошибки определения типа данных.
По данному алгоритму в среде программирования Delphi разработана программа «Определение типа данных».
Эксперимент
С помощью созданной программы проведем несколько экспериментов. Откроем файл BMP, который анализировали ранее. Результат представлен на рис. 6. Он показывает, что файл состоит на 100% из изображения «Windows Bitmap».
Рис. 6. Результат программы при анализе файла BMP
Если открыть файл другого формата, например, приложение «Mozilla Firefox» (Интернет-браузер, версия 30.0), то увидим следующий результат (рис. 7).
Б ип роделе ние типа данных
1 рЙММф Дд№1Ы Размер в X Расширение Тип [описание]
[iLMjJJM |ЕХЕ| Wwi32 ЕхеоУеЫе MS VistsdC*+ (generic]
33579 байт 14.2*4 ! DLL] Win32 Dynamic Link Library (^enwic)
24SÜ1 байт В.7% ¡ЕХЕ| Win32 ExeciA-able ^generic]
11022 байт 4 .за 1-ЁХЕ) Generic Win/DOS Executable
11022 байт Ü.T4 |.ЁХЁ| DOS Executable Generic
1
[:■.......................... Ч ■ Открыть Ф-^йл для астализ-э ;
Рис. 7. Результат программы при анализе файла приложения «Mozilla Firefox»
Из рисунка 7 видно, что файл содержит код исполняемых файлов разных типов и динамически подключаемую библиотеку (DLL) - 14,2 %. 67,3 % состоит из типа «Win32 Executable MS Visual С++», здесь можно с уверенностью сказать, что анализируемый файл написан в среде разработки Microsoft Visual С++.
При открытии видео файла формата AVI, анализ которого показан на рис. 8, мы видим два пункта: один из которых содержит видео- и аудиоданные, сжатые с использованием разных комбинаций кодеков, другой - RIFF-контейнер для хранения потоковых мультимедиа-данных (видео, аудио, возможно текст).
Размер данны Разгар в % Расширение Тип (с™сание)
265298 кб 50.2% (AV11 AV1
A' I Audio Video Interleaved
Рис. 8. Результат программы при анализе файла AVI
Выводы
Таким образом, серия экспериментов, показала, что зная точную структуру файла определенного формата (на примере спецификации BMP), можно прочитать файл полностью. В противном случае необходимо вручную проводить анализ неизвестного формата файла на состав типа данных, который может оказаться ошибочным.
С помощью, БД НЕХ-дескрипторов и программных средств, возможно определить тип файла [Структура BMP файла, 2014], [Петрянин и др., 2014], [Петрянин и др., 2013]. Проанализировав содержимое файла, можно узнать из каких типов, данных он состоит. Конечно, вручную это сделать крайне затруднительно, а при большом объеме файла -практически невозможно. Поэтому разработан программный продукт для анализа содержимого файлов, позволяющий значительно ускорить такой процесс. Например, видео файл объемом около 700 Мб анализируется меньше полминуты. Трудно сказать, сколько времени займет данная процедура в ручном режиме. Данный анализ поможет при создании системы поддержки принятия решений при сжатии данных, которая была описана в статье [Горячев и др., 2013], [Граб и др., 2011], [Горячев и др., 2013], которая позволит выбрать оптимальный вариант архивации.
Список литературы
[Гасов и др., 2001] Гасов В.М., Цыганенко А.М. Методы и средства подготовки электронных изданий: Учебное пособие, М.: МГУП, 2001, 735 с.
[Горячев и др., 2013] Горячев Н.В. Программные средства теплофизического проектирования печатных плат электронной аппаратуры / Н.В. Горячев, Н.К. Юрков // Молодой ученый. 2013. № 10. С. 128-130.
[Горячев и др., 2013] Горячев Н.В. Исследование и разработка средств и методик анализа и автоматизированного выбора систем охлаждения радиоэлектронной аппаратуры / Горячев Н.В., Танатов М.К., Юрков Н.К. // Надежность и качество сложных систем . 2013. № 3. С. 70-75.
[Граб и др., 2011] Граб И.Д. Алгоритм функционирования компьютерной программы стенда исследования теплоотводов/ И.Д. Граб, Н.В. Горячев, A.B. Лысенко, Н.К. Юрков //Труды международного симпозиума Надежность и качество. 2011. Т. 1. С. 244-246.
[Петрянин и др., 2013] Петрянин, Д.Л. Анализ систем защиты информации в базах данных / Д.Л. Петрянин, Н.В. Горячев, Н.К. Юрков // Труды международного симпозиума Надежность и качество. 2013. Т. 1. С. 115-121.
[Петрянин и др., 2014] Петрянин Д.Л. Структура системы поддержки принятия решений при архивировании данных / Д.Л. Петрянин, Н.К. Юрков // Труды международного симпозиума Надежность и качество. 2014. Т. 1. С. 331-334.
[Структура BMP файла, 2014] Структура BMP файла [Электронный ресурс] // URL: http://c-site.hl.ru/infa/bmp_struct.htm (дата обращения 30.09.2014)
[Тихменев и др., 2014] Тихменев А.Н. Перспективы реализации системы АСОНИКА-К-СЧ в виде «Облачного» сервиса / А.Н. Тихменев, В.Н. Кулыгин, В.В. Жаднов // Новые информационные технологии в автоматизированных системах. 2014. № 17. С. 22-26.