Фундаментальные основы хакерства

       

Обработка исключений в реальном и защищенном режимах


Когда возникает отладочное исключение (как, впрочем, и любое другое исключение вообще), процессор заносит в стек регистр флагов, адрес следующей (или текущей – в зависимости от рода исключения) выполняемой инструкции и лишь затем передает управление отладчику.

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

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

Сказанное справедливо для Windows NT, но неприменимо к Windows 9x – эта операционная система не использует должным образом всех преимуществ защищенного режима и всегда "замусоривает" стек отлаживаемой задачи, независимо от того находится ли она под отладкой или нет.



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