Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Как вирус может заразить EXE - файлСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Как и при заражении COM - программ, при заражении EXE-файлов вирусный код может записываться в конец, начало или в середину файла.Запись в конец файла, как и в предыдущем случае,реализуется наиболее просто,и кроме того,предохраняет от многих трудностей при отладке. Поэтому мы создадим вирус, работающий имено по такому принципу. Для того,чтобы при старте зараженной программы код вируса получил управление, следует соответствующим образом модифицировать заголовок EXE - файла. Для этого исходные значения CS0 и IP0 заменяются на точку входа в вирусный код, а значения SS0 и SP0 "переключаются" на собственный стек вируса. Кроме того, поскольку при заражении изменяются длина загрузочного модуля и длина файла, необходимо скорректировать поля заголовка по смещению 02h, 03h, а также 04h, 05h. Вот и все. Может показаться, что создать вирус,заражающий EXE-файлы, намного сложнее, чем COM - вирус. Однако это не так. Прочтите эту главу, и вы убедитесь в этом! Работа вируса в зараженной программе Рассмотрим теперь действия вируса при получении им управления. Итак, вирус функционирует по такому алгоритму:
Естественно, перед корректировкой вирус обязан сохранить исходные параметры заголовка -ведь они потребуются при передаче управления вирусному коду. После коррекции заголовок записывается на диск.
Начало работы Как и COM - вирус, EXE - вирус лучше разрабатывать в формате COM. Это убережет нас от многих ненужных трудностей. Поэтому напишем стандартное начало COM программы: prg segment assume cs:prg,ds:prg,es:prg,ss:prg org 100hКак вы помните, директива "assume cs:prg,ds:prg,es:prg,ss:prg" назначает сегментные регистры сегменту с именем PRG, а директива "org 100h" резервирует место для PSP вирусной программы. Вирус получает управление В отличие от COM - вируса,наша запускающая программа после запуска не будет заменять в памяти свои первые три байта командой перехода на функцию DOS завершения программы. По этой причине можно не бояться, что в заражаемый файл попадет испорченный вирусный код (см. п. 1.17 предыдущей части). Отсюда следует, что директива " org 110h" нам не потребуется. Значит,можно сразу переходить "к делу": vir: mov ax,cs;AX = CS... db 2dh;SUB AX,00h sub_ds dw 0; mov ds,ax; mov ss,ax; mov ah,1ah;Переключим DTA lea dx,new_dta;на соответству-;ющий массив в int 21h;области данных;вируса...При компиляции относительные адреса всех ячеек памяти определяются относительно DS, который указывает на начало PSP. Но в зараженной программе при передаче управления на код вируса регистр CS будет указывать на параграф, с которого начинается этот код, а не на начало PSP, а регистр DS вообще окажется настроенным на начальный сегмент программы! Единственный способ получить доступ к данным вируса заключается в установке DS = CS.А с учетом размера PSP в 10h параграфов значение DS следует уменьшить как раз на эту величину. При заражении того или иного файла поле " sub_ds " для него будет заполняться значением 10h. Поскольку запускающая программа имеет COM-формат, для нее CS = DS = SS = ES, и все они указывают на начало PSP. Поэтому значение DS корректировать не нужно, и в поле "sub_ds" запускающей программы помещается ноль. Дальше вирус переключает DTA на массив "new_dta", расположенный в области данных вируса. Поскольку начальный сегмент программы станет известным при ее запуске,можно будет без особого труда восстановить адрес исходной DTA. Ищем подходящий файл Теперь наш вирус может заняться поиском файла-жертвы. Как мы договорились, вирус будет заражать EXE-файлы, значит, такой файл и нужно найти. Но поскольку фрагмент, который производит поиск файлов с тем или иным расширением уже был создан, остается только воспользоваться им, внеся некоторые изменения: Вы, вероятно, уже поняли,что каждая новая программа оставляется нами из ранее разработанных блоков, как из конструктора.Это сильно упрощает работу и сокращает время на составление программ. Было бы странно не воспользоваться готовыми фрагментами и заново преодолевать все трудности! Вместе с тем, использованный фрагмент пришлось несколько модифицировать,чтобы он смог правильно работать в новой программе. Первое внесенное изменение состоит в дублировании исходных значений заголовка программы, из которой стартовал вирус. В комментариях рассказано, зачем это потребовалось. Следующее изменение вызвано тем, что EXE - файл может быть длиннее 64 Кбайт.Поэтому для установки указателя на последний байт файла недостаточно просто вычесть единицу из его размера. Например,пусть длина файла равна 10000h байт. В этом случае из DTA будут считаны такие числа:CX = 0001h и DX = 0000h (см. выше). Теперь для обращения к последнему элементу файла из пары CX: DX следует вычесть "1". Если просто вычесть единицу из DX, то мы получим следующее:CX = 0001h, DX = 0FFFFh, то есть полностью абсурдное значение. Чтобы такого не происходило, нужно применить команду " вычитание с заемом ", которая будет отнимать от CX значение флага переноса CF - " ноль " или " один ". И последнее - вместо непосредственной установки указателя мы будем просто вызывать процедуру "setpointer ", текст которой несложен и рассматривается в конце главы. Читаем заголовок файла Наш EXE-вирус должен получать управление при старте зараженного файла. С этой целью он может модифицировать заголовок файла,как показано в п. 1.4. Проще всего будет считать заголовок найденной EXE-программы с диска, после чего сделать необходимые изменения и записать его обратно на диск.А так как предыдущий фрагмент вирусной программы уже нашел подходящий EXE - файл, самое время прочитать его заголовок: mmm: xor cx,cx;Установим ука- xor dx,dx;затель на нача- call setpointer;ло файла... mov ah,3fh;И считаем инте- mov bx,descrypt;ресующую нас mov cx,27;часть заголовка;в массив " hea-;der ". Она как lea dx,header;раз занимает 27 int 21h;байт... jnc next_step; jmp restore_dta;Ошибка чтения!Работа фрагмента довольно проста и пояснений не требует.
|
||||
Последнее изменение этой страницы: 2016-07-16; просмотров: 616; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.179.120 (0.007 с.) |