Уроки Iczelion'а




Урок 2. Правильность PE файла


В этом туториале мы научимся, как проверить, является ли файл PE-файлом.

Скачайте пример.

Пpимеp:

Как вы можете проверить, является ли данный файл PE-файлом? Hа этот вопрос трудно сразу ответить. Это зависит от того, с какой степенью надежности вы хотите это сделать. Вы можете проверить каждый параметр файла в PE-формата, а можете ограничиться проверкой самых важных из них. Как правило, проверять все параметры бессмысленно. Если критические структуры верны, мы можем допустить, что файл PE-формата. И мы сделаем это допущение.

Основная структура, которую мы будем проверять - это PE-заголовок. Поэтому нам нужно больше узнать о нем. Фактически PE-заголовок - это структура под названием IMAGE_NT_HEADERS. Она определена следующим образом:

IMAGE_NT_HEADERS STRUCT Signature dd ? FileHeader IMAGE_FILE_HEADER <> OptionalHeader IMAGE_OPTIONAL_HEADER32 <> IMAGE_NT_HEADERS ENDS

Signature - это слово, которое содержит значение 50h, 45h, 00h, 00h. Переводя на человеческий язык, она содержит текст "PE", за которым следуют два нуля. Этот член является сигнатурой PE, поэтому мы будем использовать его для того, чтобы определить, является ли данный файл PE-формата.

FileHeader - это структура, которая содержит информацию о физической структуре PE-файла, такой как количество секций, устройство, на которое ориентирован данный файл и так далее.

OрtionalHeader - это структура, которая содержит информацию о логической структуре PE-файла. Hесмотря на "Oрtional" в ее имени, этот член всегда присутствует.

Hаша цель ясна. Если значение сигнатуры в IMAGE_NT_HEADERS pавно "PE", за которым следуют два нуля, тогда файла является PE. Фактически, специально для подобных сравнений Microsoft определила константу под название IMAGE_NT_SIGNATURE, которую мы можем использовать.

IMAGE_DOS_SIGNATURE equ 5A4Dh IMAGE_OS2_SIGNATURE equ 454Eh IMAGE_OS2_SIGNATURE_LE equ 454Ch IMAGE_VXD_SIGNATURE equ 454Ch IMAGE_NT_SIGNATURE equ 4550h

Следующий вопрос: как мы можем узнать, где начинается PE-заголовок? Ответ прост: DOS MZ-заголовок содержит файловое смещение PE-заголовка. DOS MZ-заголовок определен как структура IMAGE_DOS_HEADER. Параметр e_lfanew этой структуры содержит файловое смещение PE-заголовка.




Содержание  Назад  Вперед