SEH на службе у контрреволюции Крис Касперски aka мыщъх Спецвыпуск Xakep, номер #045, стр. 045-048-5 ЛИСТИНГ Регистрация собственных обработчиков структурных исключений PUSH handler ;заносим адрес нашего SEH-обработчика PUSH FS:[00000000h] ; заносим адрес на предыдущий SEH-фрейм MOV FS,[00000000h], ESP ; регистрируем новый SEH-фрейм Теперь, если shell-код нечаянно дотронется до запрещенной ячейки или совершит другую ошибку подобного типа, атакуемое приложение уже не будет захлопнуто операционной системой. Управление вновь возвратится к shell-коду, давая ему понять, что туда ходить не надо и следует немедленно сменить тактику поведения, используя резервные алгоритмы жизнеобеспечения. Исключения в процессе работы shell-кода могут происходить многократно, главное – следить за тем, чтобы не переполнился стек. Предельно допустимая степень вложенности хоть и велика, но все же не безгранична. Что почитать? Будучи вполне легальным механизмом взаимодействия с операционной системой, структурная обработка исключений неплохо документирована. Было бы очень полезно почитать "F.A.Q: Exception Handling" из MSDN. Там же ты найдешь замечательную статью Мэтта Питерека "A Crash Course on the Depths of Win32 Structured Exception Handling". Из русскоязычных авторов лучше всего о структурных исключениях рассказывает Volodya – читай его статью "Об Упаковщиках В Последний Раз” на wasm.ru. Много интересного содержит также заголовочный файл EXCPT.H, входящий в состав SDK. Заключение В структурную обработку исключений был изначально заложен огромный потенциал, только-только начинающий раскрывать себя. Описанные здесь способы перехвата управления – первые ласточки. За структурными исключениями – будущее! Нас ждут десятки хитроумных трюков, которые еще предстоит найти. И какие бы изощренные защитные механизмы ни придумывались, у нас есть что им противопоставить! Глобальное развертывание цепочки структурных исключений 1 – возникла исключительная ситуация; 2 – операционная система анализирует TIB (Thread Information Bock – Информационный Блок Потока) для поиска первого SEH-фрейма в цепочке; 3 – операционная система передает управление первому SEH-обработчику; 4 – обработчик прикидывается шлагом и уходит в отказ; 5 – операционная система переходит к следующему фрейму в цепочке; 6 – операционная система передает управление SEH-обработчику; 7 – этот обработчик не знает, что делать с исключением; 8 – операционная система переходит к следующему фрейму; 9 – операционная система передает управление SEH-обработчику; 10 – этот обработчик обрабатывает исключение (не обработать его он не может, так как это первичный обработчик, просто прихлопывающий приложение от безысходности). SEH в шутку расшифровывают как Sexual Exception Handling. Защита от переполнения буфера, встроенная в Windows 2003 Server, функционирует именно на основе SEH. С помощью ключевых слов try и except разработчик может назначить свой обработчик исключений. Указатель на текущий SEH-обработчик всегда содержится в первом двойном слове TIB'а, лежащего по адресу fs:[00000000h]. |