Мы не можем распознать тип файла только по расширению.Можно легко изменить расширение файла с .text на .exe, что не означает, что файл является допустимым исполняемым файлом.
Допустим, мы находимся на платформе Windows:
Portable-Executable [PE] является родным форматом файла Win32.Каждый исполняемый файл использует формат PE-файла, кроме VxD и 16-битных DLL.32-битные dll, exe, COM-файлы, управление OCX, CPL-файлы, исполняемые файлы .NET, драйверы NT для режима ядра - все это в формате PE.Теперь «Перемещение дальше» формата PE имеет предопределенную структуру, состоящую из различных заголовков, заголовков разделов, данных разделов и т. Д., Которые содержат информацию об адресе, размере и исполняемом коде.
Заголовки содержат несколько файлов сигнатур:
например, исполняемые файлы всегда будут иметь значение MZ (0x5A4D) в заголовке DOS и значение PE (0x4550) в заголовке PE.
Из приведенных выше значений мы можем различать как исполняемые, так и неисполняемые файлы.
Теперьпереход к неисполняемому файлу:
Рассмотрим файл .jpg: мы используем различные инструменты для создания файла .jpg.При создании файла .jpg этот инструмент добавляет сигнатуру (что-то вроде 0xd8ff) в заголовочный файл и двоичные данные об изображении в разделе данных.при открытии файла .jpg программа считывает подпись в поле заголовка и, если найдена действительная подпись, рисует изображение на основе двоичных данных в разделе.
Аналогично, файлы .pdf, .mp3, ... будут иметь уникальные подписи.
.text файлы не будут иметь подписи.Данные будут доступны по первому смещению текстового файла.
Информация заголовка может быть просмотрена следующим образом:
CreateFile(...)//ReadMode
CreateFileMapping(...)
MapViewOfFile(...)
Когда отображение файла сопоставлено, информацию заголовка можно получить, используя указанные ниже структурыв winnt.h
IMAGE_DOS_HEADER
IMAGE_NT_HEADER
Подпись должна сопоставляться с полем e_magic IMAGE_DOS_HEADER, а если это MZ (0x5A4D), то снова совпадать с полем Signature IMAGE_NT_HEADER.