Найти библиотеки Windows DLL, не скомпилированные с SafeSEH - PullRequest
0 голосов
/ 23 октября 2009

Я хотел бы узнать, какие из библиотек DLL, расположенных в различных моих установленных программах, были скомпилированы с SafeSEH, а какие нет. Есть ли инструмент, который мог бы дать мне эту информацию, в противном случае, что было бы лучшим решением для кодирования чего-то, что делает эту проверку?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 17 ноября 2010

Также вы можете использовать dumpbin.exe / loadconfig для поиска наличия таблицы обработчика безопасных исключений. Больше информации здесь: http://www.jwsecure.com/dan/2007/07/06/the-safe-exception-handler-table/

1 голос
/ 23 октября 2009

Вы можете начать с этого инструмента, SafeSEH Dump и проверить вывод. Это не должно быть слишком сложно, чтобы запустить его как пакетный список всех ваших библиотек DLL. Вам необходимо создать логин для загрузки. Вот сообщение в блоге , которое также ссылается на SafeSEH Dump, но ссылка для скачивания на этой странице кажется мертвой.

0 голосов
/ 05 мая 2015

Я знаю, что это древний вопрос, который я вырываю из мертвых, но там является программным решением.

Сначала проанализируйте формат 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 может быть включен.

...