Обнаружение неверных разделов ресурса в PE файлах

Я пытаюсь выполнить определенные вычисления, используя ресурсы в файле 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, как мне обрабатывать описанные выше случаи, когда заголовки и указатели разделов ресурсов указывают на / содержат что-то ненужное.

0 ответов

Другие вопросы по тегам