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

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

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

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

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

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

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

DD 5СН из первого FCB
DD 6СН из второго FCB
FINISH:
end CSpawn
86
Глава 3. Сложные СОМ-инфекторы
Переписывающие вирусы обладают серьезными недостатками. Они разрушают
атакованные программы, в связи с чем заслужили название "бешенных"
вирусов. Тем не мейее, они являются начальным этапом компьютерной
вирусологии - что-то вроде таблицы умножения. Следующим шагом в познании
Искусства является паразитический тип вируса. Инфицируя программы, он не
разрушает их.
л
\
Описывая паразитические вирусы, Dark Avenger использовал еще одну цитату
из 49-й главы "Книги Бытия": *Иуда! Тебя восхваляют братья твои. Рука
твоя на хребте врагов твоих; поклоняются тебе сыны отца твоего... Он
привязывает к виноградной лозе осленка своего и к лозе лучшего винограда
сына ослицы своей...".
Что имел в виду великий визард? Дело в том, что паразитический вирус
прикрепляется к жертвам без нанесения вреда ('"его рука на их хребте, и
они поклоняются ему"). Он не оставляет явных признаков в виде скрытых или
переименованных файлов. Вместо этого он просто вставляется в существующий
программный файл выбранной жертвы, и пользователь может заметить инфекцию
только по слегка увеличенному размеру программы и новой дате файла
("поклоняются тебе сыны отца твоего*).
Паразитический вирус может прикрепляться к концу жертвы ("привязывать
осленка к виноградной лозе*) или к началу
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
атакованной программы ("к лозе лучшего винограда"), используя копию
("сына ослицы своей"). Каждая стратегия имеет преимущества и недостатки.
В данном виде вируса усложнены не только концепции, но и код. При
создании переписывающего вируса мы не заботились о жертве - она
злонамеренно разрушалась.
Но теперь наша цель заключается в безвредной модификации жертвы, чтобы
она могла выполняться, как раньше, и одновременно с этим хранить в себе
вирус. То есть нам придется рассмотреть влияние вируса на жертву. Здесь
на первый план выходит управление памятью. Приготовьтесь освоить базовые
принципы вирусного программирования. Именно они создают основу
мастерства.
1. Паразитический вирус, который крепится к концу жертвы
У вирусов, прикрепившихся к началу жертвы, имеется один общий недостаток.
Они медленные, потому что им приходится читать жертву с диска и вновь
записывать ее на диск. Вирусы, которые крепятся к концу файла, записывают
на диск только свой код, поэтому они работают быстрее.
Кроме того, им не нужен большой буфер для загрузки жертвы, то есть они
могут действовать на минимуме доступной памяти. Конечно, память на
современных машинах всегда в избытке, но в эпоху расцвета СОМ-инфекторов
проблема памяти стояла остро. Как бы там ни было, большая часть
паразитических
вирусов крепится к концу своих жертв.
Паразитические вирусы, не разрушающие атакованные СОМ-файлы, должны
выполняться перед жертвой. Когда жертва получает контроль, мы теряем все
свои позиции.
Программа может назначить память или модифицировать стек. Она может
переписать данные вируса или стать резидентом памяти. Поэтому,
88
ГЛАВА 3. Сложные СОМ-инфекторы
Вирус
Toad3
(длина-
1вЗбайта)
Программа-
жертва
(длина=200
байтов)
После инфицирования
Офсет 100h
Прыжок к основному телу вируса
Программа- жертва
Основное тело вируса
Блок данных вируса
3 первых байта программы-жертвы
3 байта в длину
Рис. 5. Логика действия паразитического СОМ-инфектора
89
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
создавая новый вирус, который будет выполняться после жертвы, мы должны
хорошо разбираться в работе выбранной программы.
Здесь речь может идти только об узкой специализации. Если же мы хотим
написать вирус для широкого ранга программ, нам нужно выполнить его до
старта жертвы.
Так как СОМ-программа всегда стартует с офсета 100Н (что соответствует
началу файла), паразитический вирус должен модифицировать начало того
файла, который он инфицирует, даже если его основное тело располагается в
конце файла.
Обычно модифицируется только несколько байтов начала файла - и это, как
правило, делается с помощью размещения инструкции прыжка для старта
вируса (см. рис. 7).
Управление данными и памятью
Основная проблема, с которой сталкивается данный тип вируса, заключается
в том, что при инфицировании новых файлов его код будет менять свои
позиции. Если он заражает COM-файл длиной в 1252Н байтов, он будет
выполняться в офсете 1352Н. А если он будет инфицировать 2993Н-байтовый
файл, то ему придется выполняться в офсете 2А93Н.
К счастью, ближние прыжки и вызовы всегда кодируются с использованием
относительной адресации, так что изменение офсетов не будет для нас
большой проблемой. Чтобы проиллюстрировать относительную адресацию,
рассмотрим вызов в подпрограмме CALLME:
cs: 180 call CALL_ME cs:183
cs:327 CALL_ME:... ret
Предположим, что CALL ME размещается в офсете 327Н, а вызов к CALL ME
находится в 180Н. Тогда вызов кодируется как Е8 А4 01. Здесь Е8 является
опкодом для CALL, а слово 01А4Н -
Предыдущая << 1 .. 21 22 23 24 25 26 < 27 > 28 29 30 31 32 33 .. 123 >> Следующая