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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 28 29 30 31 32 33 < 34 > 35 36 37 38 39 40 .. 123 >> Следующая

проверять данное условие.
Если памяти достаточно, СНЕСК_МЕМ вернет нам сброшенный флаг переноса и в
регистр es будет установлен 64-килобайтный блок памяти, который мы можем
использовать.
Если памяти не хватает, СНЕСК_МЕМ вернет нам установленный флаг переноса.
Подпрограмма контроля памяти будет выглядеть так:
VIRUS:
call СНЕСК_МЕМ ;памяти достаточно? jc GOTO_HOST_LOW ;нет, передать
контроль жертве call JUMP_HIGH ;прыжок к сегменту верхней памяти call
FIND_FILE ;найти новую жертву jc GOTO_HOST_HIGH ;нет, передать контроль
жертве call INFECT_FILE ;да, инфицировать ее GOTO_HOST_HIGH: ;прыжок
к жертве из нового
;блока памяти
GOTO_HOST_LOW: ;прыжок к жертве из
первоначального блока памяти
Если вирусу не хватает памяти, он бездействует и позволяет жертве
выполняться нормальным образом. Но, обычно при загрузке СОМ-программы ей
предоставляется вся доступная системная память. То есть любая память,
выше PSP и принадлежащая DOS, становится доступной для нашего вируса.
Главное, чтобы вирус не задействовал 64 К блок, который начинается с PSP.
Наша "зверушка" должна разместиться в данном сегменте в офсете 100Н -
прямо за жертвой, к которой он прикрепился. В конце этого сегмента
размещается стек СОМ-программы. Если Example испортит такой порядок, у
нас возникнут проблемы. Поэтому вирусу лучше использовать 64К блок прямо
над тем местом, где он обитает - если.только тот доступен для
использования. Но это нужно проверить. Каким образом?
Мы можем изменить количество памяти, выделенной для
114
ГЛАВА 3. Сложные СОМ-инфекторы
программы, с помощью "хакерского" прерывания 21Н - то есть выставив
желаемое количество параграфов памяти (16-байтовых блоков) в регистре Ьх
и вызвав DOS-функцию 4АН. При неудачной попытке'DOS установит флаг
переноса и поместит в Ьх количество доступных параграфов. Так как нам
требуется 2*64К байтов памяти, мы назначаем память следующим образом:
mov ah,4AH
mov bx,2000H ;2000H*16 = 2*64K
int 21H
Если эта функция успешно возвращается, то памяти хватает. Если нет, то
памяти недостаточно. При удачном исходе мы модифицируем память, и жертве
это может не понравиться. Возможно, она тоже хочет безраздельно править
на доступной памяти. Поэтому наш добрый и воспитанный вирус должен вновь
назначить жертве всю доступную память.
А какое количество памяти доступно? Чтобы выяснить это, мы попытаемся
назначить память с явным перебором (допустим, мегабайт - bx-OFFFFH). Это
гарантировано приведет к неудаче, но зато возврат даст нам доступное
количество памяти в Ьх.
Затем мы еще раз вызовем функцию 4АН с правильным значением.
Подпрограмма СНЕСК_МЕМ будет выглядеть так: СНЕСК.МЕМ:
mov ah,4AH ;модифицируем назначенную память mov Ьх,2000Н ;мы хотим 2*64К
int 21Н ;установка с, если памяти недостаточно
pushf
mov ah,4AH ;переназначение всей доступной памяти mov bx.OFFFFH int 21Н
mov ah,4AH ;bx имеет действительно доступное
количество памяти
int 21Н popf
ret ^возврат к вызову Если памяти достаточно, наш вирус начинает
действовать. Он
¦и*;
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
прыгает в верхний 64 К блок памяти и начинает выполняться. За эту фазу
отвечает подпрограмма JUMP_HIGH. Сначала она помещает копию вируса в
новый сегмент, используя инструкцию rep movsb (та переносит число байтов,
указанное в сх из ds:si в es:di).
Обосновавшись в памяти, вирус стартуется в ds: 100Н (его длина дается в
OFFSET HOST - 100Н, где OFFSET HOST является адресом старта жертвы на
один байт ниже конца вируса). То есть, мы перемещаем вирус вверх с
помощью следующего кода:
mov si, 10ОН mov di,OFFSET HOST mov cx,OFFSET HOST - 10ОН rep movsb
Далее, используя DOS-функцию 1AH, вирус перемещает DTA (область обмена с
диском) в офсет 80Н нового сегмента. Этим самым мы оберегаем командную
строку. Затем JUMP_HIGH передает контроль той копии вируса, которая
размещена в верхнем сегменте. Для этого мы извлекаем из стека офсет
возвратного адреса для JUMPJHIGH.
Когда JUMP HIGH вызывается основной подпрограммой контроля, инструкция
call помещается в стеке сразу после нее (в нашем случае это значение
108Н).
Когда выполняется ближний возврат, данный адрес выносится из стека в
командный указатель ip. Чтобы добраться до верхнего сегмента, мы
захватываем офсет возврата с помощью выталкивания его из стека, затем
помещаем в стек верхний сегмент и возвращаем офсет обратно.
В конечном счете JUMP_HIGH возвращается, используя инструкцию дальнего
возврата retf. Это действие загружает в стек регистровую пару cs:ip с 4-
байтовым адресом и передает контроль новому сегменту - в нашем случае,
верхнему сегменту, где копия вируса ожидает своего выполнения.
Механизм поиска файла
Захватив верхний сегмент, вирус начинает процесс инфекции. Подпрограмма
поиска похожа на те, которые мы уже обсуждали. Для обнаружения файлов с
расширением СОМ она
пн
ГЛАВА 3. Сложные СОМ-инфекторы
использует DOS-функции Search First/Search Next. Отличием является то,
что данный механизм поиска вызывает другую подпрограмму - FILE_OK.
Предыдущая << 1 .. 28 29 30 31 32 33 < 34 > 35 36 37 38 39 40 .. 123 >> Следующая