SEH на службе контрреволюции

       

Подавление аварийного завершения приложения


Независимо от того, каким путем shell-код захватил управление, он может зарегистрировать свой собственный обработчик структурных исключений. Это делается приблизительно так:

PUSH handler               ; заносим адрес нашего SEH-обработчика

PUSH FS:[00000000h]        ; заносим адрес на предыдущий SEH-фрейм

MOV  FS,[00000000h], ESP   ; регистрируем новый SEH-фрейм

Листинг 7 регистрация собственных обработчиков структурных исключений

Теперь, если shell-код нечаянно дотронется до запрещенной ячейки или совершит другую ошибку подобного типа, атакуемое приложение уже не будет захлопнуто операционной системой и управление вновь возвратиться shell-коду, давая ему понять, что туда ходить не надо и следует немедленно сменить тактику поведения, используя резервные алгоритмы жизнеобеспечения.

Исключения в процессе работы shell-кода могут происходить многократно, главное – следить за тем, чтобы не переполнился стек. Предельно допустимая степень вложенности хоть и велика, но все же не безгранична.



Содержание раздела