Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Азбука хакера 3. Компьютерная вирусология - Собейкис В.Г.

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 99 100 101 102 103 104 < 105 > 106 107 108 109 110 111 .. 123 >> Следующая

KRNL386.EXE. Оно остается постоянным для
лоп
ГЛАВА 9. Вирусы под Windows
каждой программы, которая использует KERNEL. Связь числовой
функциональной ссылки с именем lopen является трюком. Это выполняется с
помощью сканирования таблицы нерезидентных имен в KRNL386.EXE. Каждое имя
в таблице ассоциируется с уникальным числом. Вот это число мы и хотим
использовать. Вы можете написать небольшую утилиту, которая будет
показывать вам эту информацию. Для файловых функций I/O соответствующими
числами являются:
Jopen 85
Jread 82
Jwrite 86
Jclose 81
llseek 84
Полная запись таблицы перемещения для вызова _1ореп будет выглядеть так:
DB 3,1 '.импортированное порядковое числительное,
;32-битный указатель DW OFFSET BEL1 ;офсет указателя для перемещения DW 1
'.модуля KERNEL DW 85 ;функция Jopen
Если вы имеете много вызовов для чтения и записи в программе, вы будете
совершать и множество перемещений. Поскольку каждое перемещение занимает
время для размещения в новом месте, нам лучше кодировать чтение и запись
как вызовы к одной локации памяти, которай вызывает KERNEL. При таком
подходе все необходимые файловые I/O можно выполнить с помощью пяти
перемещений.
Caro Magnum использует менеджера таблицы перемещений, который легко
добавляется простым увеличением размера переменной ARELOCS и добавлением
дополнительных записей в таблицу. Отметим, что когда вирус копирует себя
в файл, он должен следить за этими перемещениями. Так как при загрузке
вируса динамический редактор связей изменяет значения в памяти, вирус
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
должен вернуть их обратно к 0000:FFFF перед копированием их в новый файл.
В противном случае программа больше не сможет загружаться и выполняться.
Особенности защищенного режима
Вирус Cam Magnum должен действовать под Windows в защищенном режиме,
поэтому особое внимание мы обращаем на сегменты кода и данных. Это
особенно важно, когда вирусный код записывается на диск. Например, DOS-
функция записи 40Н записывает данные из ds:dx на диск. Но вирусный код
размещается в cs, и мы не можем просто переместить cs в ds, иначе
произойдет сбой общей защиты. То же самое касается функций Windows API.
Поэтому вирус должен поместить свой код в буфер дисковых I/O в сегменте
данных и затем переписать его из этого буфера на диск.
В защищенном режиме сегментные регистры не содержат адресов. Вместо них
они содержат селекторы. Селекторы - это указатели на таблицу
дескрипторов, которая содержит фактические линейные адреса сегмента. Этот
дополнительный уровень сложности решается микропроцессором. Обычно
селекторы имеют значения 8,16, 24 и т. д.
Но когда вы адресуетесь к сегменту с ds-8, процессор ищет этот селектор в
таблице дескрипторов и узнает, где он может получить нужное вам значение.
Оно добавляется в офсет и соответствующим образом устанавливает адресные
линии. Обычно селекторы назначаются и поддерживаются операционной
системой. Вы не можете установить ds-32 и затем сделать что-то с ним. В
ответ вы получите сбой общей защиты. Поэтому, если программа хочет
получить новый сегмент данных, она запрашивает его у операционной
системы, и та возвращает значение селектора, которое может быть
использовано в ds.
Для преодоления этой проблемы вирус может использовать три метода. Во-
первых, он может применять стек для сохранения данных. При таком подходе
вирус создает для себя область временных данных, получая доступ к нему с
помощью регистра Ьр. Во-вторых, программа может создать новый селектор
данных и установить его базовый адрес в том же адресе, что и у текущего
кодового селектора. В-третьих, можно создать новый сегмент данных. Именно
этот последний вариант и использует вирус Cam Magnum.
ГЛАВА 9. Вирусы под Windows
Управление памятью и DPMI
Caw Magnum назначает память для личного сегмента данных, используя DPMI
(DOS Pwtected Mode Interface - DOS-интерфейс защищенного режима). Мы
могли бы сделать то же самое, вызвав функции Windows API, но знакомство с
DPMI вам не помешает. Главным преимуществом вызовов DPMI является
уменьшение количества перемещений, которое мы должны вставить в таблицу
перемещений. DPMI вызывается с помощью прерываний, поэтому, в отличие от
вызовов API, перемещения не обязательны.
DPMI отвечает за все системное управление низкоуровневого защищенного
режима. Он назначает память и манипулирует селекторами, таблицами
дескрипторов и т. д. (то есть делает то, что и Windows). Даже если вы
вызываете Windows API для назначения какой-то памяти, конечным
результатом будет прерывание 31Н (которое DPMI использует для всех своих
функциональных вызовов). Чтобы создать сегмент данных, как это делается в
функции CREATEDS, нам необходимо выполнить следующие действия.
1. Назначить память, используя DPMI-функцию 501Н. Эта функция возвращает
линеный адрес места, где начинается эта память, и индекс, чтобы ссылаться
на нее.
2. Назначить дескриптор/селектор с помощью DPMI-функции 0. Эта функция
Предыдущая << 1 .. 99 100 101 102 103 104 < 105 > 106 107 108 109 110 111 .. 123 >> Следующая