Возможность использовать нестандартные сервисы и в Windows 9XИмеется возможность использовать «нестандартные» сервисы и в Windows 9X. Любое приложение 0-го кольца защиты способно обращаться к системным драйверам, используя механизм прерывания «INT 20h». Естественно, оно должно либо само являться драйвером, либо получить привилегии 0-го кольца защиты при помощи какого — нибудь из известных хакерских «трюков». Речь об этих «трюках» пойдет дальше, здесь же рассмотрим методы обращения к системным сервисам в предположении, что приложение уже тем или иным способом проникло в «нуль». В Win9X предусмотрено обращение к системным драйверам при помощи перехвата исключения, возникающего вследствие вызова прерывания 20h. Формат этого обращения сильно зависит от самого драйвера. В общем случае параметры драйверу передаются и в стеке, и в регистрах. Собственно обращение к драйверу выглядит следующим образом: Для облегчения труда программистов, занимающихся разработкой драйверов Windows, фирма Microsoft определила во включаемых файлах DDK две макродирективы — «VxDCall» и «VMMCall», которые «разворачиваются» в вышеприведенный код. Но справочные данные по идентификаторам драйверов, кодам операции и по параметрам вызова — святая святых фирмы Microsoft. Кое-что можно найти в DDK и MSDN, но основной источник информации — результаты хакерских исследований.

Метод обращения к глубинным сервисам Windows вошел в моду после глобальной эпидемии вируса Win9X. CIH. Получив привилегии 0-го кольца защиты и напрямую программируя различные драйверы, этот вирус не только выполнял сам файловые операции, но и перехватывал обращения от прикладных программ к файловой системе, распределял виртуальную память под свои нужды, писал мусор в сектора винчестера и даже портил Flash-BIOS. Вот как он, например, открывал файлы: Вы обратили внимание, что набор параметров, которым сервисная процедура обменивается с программой через регистры, соответствует функции 716^ — «Extended Create/Open File», появившейся в MS-DOS 7.X и способной работать с длинными именами файлов? Так и должно быть, ведь оба этих системных вызова в конечном итоге обращаются к одному и тому же программному коду!

Еще интересные статьи :