Обнаружение неверных разделов ресурса в PE файлах - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь выполнить определенные вычисления, используя ресурсы в файле PE.Для этого я выполняю следующие действия:

  1. Получить RVA раздела ресурсов из заголовка

    PEHeader.DataDirectory [IMAGE_DIRECTORY_ENTRY_RESOURCE] .VirtualAddress

  2. Преобразование вышеуказанного RVA в смещение файла

  3. Достигните начала раздела ресурсов и просмотрите дерево ресурсов

  4. Достигнитеуходит (фактические ресурсы) и выполняет вычисления.

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

  • RVA раздела ресурсов присутствует в DataDirectory, но фактический раздел ".rsrc" отсутствует
  • Раздел ".rsrc" присутствует, но без заголовка раздела
  • Раздел «.rsrc» присутствует, но его заголовок содержит значения мусора в поле PointerToRawData или SizeOfRawData.
  • Я сталкиваюсь со значением мусора в таких полях, как OffsetToData / OffsetToDirectory на полпути при обходе дерева ресурсов

При столкновении с вышеуказанными ситуациями мой код падает с ACCESS_VIOLATION_EXCEPTIONS или выдает противоречивые результаты.

Мой вопрос заключается в том, что, помимо проверки указателей / значений NULL, как мне обрабатывать описанные выше случаи, когда заголовки и указатели разделов ресурсов указывают на / содержат что-то ненужное.

...