Я знаю, что это древний вопрос, который я вырываю из мертвых, но там является программным решением.
Сначала проанализируйте формат PE. Для этого есть все виды решений, поэтому я не буду вдаваться в подробности. Достаточно сказать, что это большая тема, чем я могу здесь рассказать. Если вы решите использовать свой собственный, будьте осторожны с различиями между 32-разрядными и 64-разрядными исполняемыми файлами.
После анализа PE-файла пропустите заголовок DOS, подпись NT, заголовок файла (a.k.a. COFF-заголовок), необязательный заголовок и, наконец, перейдите в каталог данных. Каждый из этих каталогов имеет RVA и размер. Найдите RVA и размер каталога конфигурации (10-я запись в списке).
Здесь мы можем начать обнаружение. Если RVA или размер равен нулю, SafeSEH не включен. Если размер отличается от 0x40, он был создан с помощью компилятора, который (вероятно) был уязвим к ошибке *1000* MS12-001 обхода SafeSEH . Не доверяйте значению размера - оно не обязательно соответствует до размера данных в нем, из-за некоторых странностей с Windows XP - см. Предыдущую ссылку для получения дополнительной информации.
Если RVA и размер кажутся разумными, следуйте RVA до структуры Load Configuration . Разберите это, затем прочитайте значения SEHandlerTable
и SEHandlerCount
. Если указатель таблицы обработчика равен нулю (то есть равен нулю), тогда SafeSEH не включен. Если число обработчиков равно нулю, обработчики не зарегистрированы, хотя SafeSEH может быть включен.