Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #58, СЕНТЯБРЬ 2005 г.

Stealth patching своими руками

Крис Касперски

Спецвыпуск: Хакер, номер #058, стр. 058-050-8


Впрочем, при желании к реестру можно даже не обращаться. Защита отключается на лету сбросом бита WP в регистре CR0 (WP - Write Protection). И точно так же устанавливается вновь, словно никто ничего и не трогал :). Весь код укладывается в несколько ассемблерных команд, что намного элегантнее труднопроизносимых ключей реестра (наверное, в Microsoft разработчикам платят как журналистам - за каждый байт).

(Ассемблерный код, отключающий/включающий защиту ядра на лету)

mov ebx, cr0 ; получаем текущее значение регистра CR0

push ebx ; кладем его копию на стек

and ebx, ~0x10000 ; сбрасываем WP бит

mov cr0, ebx ; загоняем обновленное значение в CR0, отключая защиту

… ; модифицируем код ядра

pop ebx; ; достаем сохраненную копию CR0 из стека

mov cr0, ebx ; загоняем ее в регистр CR0, возвращая защиту в прежний вид

Кстати, модификация ядерных функций при работе на многопроцессорных машинах эпизодически вгоняет систему в синий экран, что создает определенные проблемы. Более корректный (но и более заметный) путь сводится к правке таблицы экспорта и активному использованию "семафоров". Патч ядра - это не шутка! Необходимо иметь опыт работы с симметричными многопроцессорными системами (SMP - Symmetric Multi-Processing) и знать кучу вещей из самых разных предметных областей. Но дорогу осилит идущий! Падает тот, кто бежит!

Вывод

Всякую защиту можно взломать! Проверка собственной целости не спасает. Клиентское приложение, работающее на прикладном уровне, неизбежно обречено на поражение. Внедрение в ядро операционной системы - это термоядерное оружие, сметающее любые преграды на своем пути. Чем активнее совершенствуются защитные системы, тем активнее их начинают ломать. Воззвания к закону только подливают масла в огонь, поощряя поиски легальных путей взлома, а законодательство очень инертно. Однажды принятые законы действуют десятилетия, а для компьютерной индустрии это целая вечность. Кстати о вечности. Надо бы совершить вылазку на кухню и что-нибудь захомячить :).

Нора мыщъх'а

Мыщъх поднял экспериментальный ftp-сервер, раздающий свои заначки в электронном виде.

IP-адрес: 83.239.33.46 (доменного имени пока нет)

Порт: 21 (стандартный)

Логин: xakep

Пароль: xakep

Папка: /pub

Приблизительное время работы: с 14:00 до 06:00 (мыщъх - ночной зверь). При возникновении проблем рекомендуется установить пассивный режим ftp-клиента. Никаких ограничений на количество подключений нет. Канал - 500 мегабит, так что налегайте. Только не все сразу ;). Банов не ставят: мыщъх - добрый сисоп :).

Все описанное в статье - просто информация. Если решил что-то проделать в реале, всегда думай о последствиях для своей задницы.

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

Отключить защиту можно через драйвер, так как он исполняется на нулевом конце, что и требуется.

Любой драйвер может модифицировать содержимое таблицы прерываний IDT.

Смотри WINNT.H, если нужна структура CONTEXT.

Закон жизни: чем активнее совершенствуются защитные системы, тем активнее их начинают ломать.

Назад на стр. 058-050-7  Содержание