КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Вирус начинает работу
Заголовок вируса Для разработки вируса мы, как и раньше, будем использовать COM формат. Естественно,в резидентном вирусе будут использованы некоторые блоки, созданные нами в предыдущей главе. Поэтому на их работе мы останавливаться не будем, а вместо этого сделаем акцент на новых приемах, реализованных в программе. Итак, начнем: prg segment assume cs:prg,ds:prg,es:prg,ss:prg org 100h start: jmp vir;Передача управ-;ления вирусному;коду... org 110hПриведенные команды и директивы выполняют те же самые функции, что и аналогичные, использованные нами при создании нерезидентной вирусной программы. Несколько забегая вперед, отметим, что наш вирус будет работать так:
После перехода на метку " vir " начинается исполнение вирусной программы. Поэтому продолжим: (Собственно это и есть начало обработчика прерывания Int 28h) Обратите внимание на команду, записанную в машинном коде сразу за меткой "vir". Сейчас мы попробуем разобраться, зачем она потребовалась. Как вы знаете, наш вирус должен быть резидентным и состоять из двух частей. При этом секция инициализации исполняется только в транзитном (нерезидентном) режиме, а резидентная часть - только в резидентном. Команда db 0ebh;90h - Для рези- db push_len;90h дентной; работы.играет роль "переключателя" между транзитным и резидентным кодами. При заражении вирус записывает в файл команду перехода, которая при запуске зараженного файла передает управление на "push_len" байт вперед, где как раз и начинается секция инициализации. Если же попытаться выполнить эту команду в резидентном режиме, т. е. когда код вируса получил управление, находясь в памяти,это приведет к зависанию компьютера. Чтобы такого не происходило, секция инициализации при установке вирусного кода в память записывает сразу за меткой "vir" две команды "NOP", или код: 9090h. Все приведенные далее команды относятся к резидентной части. После записи флагов в стек вирус проверяет состояние переменной " tg_infect ", и если она равна " 1 ", переходит к метке " vir_2 ". Если же "tg_infect" равна " 0 ",то вирус просто вызывает старый обработчик INT 28h и отдает управление прерванному процессу.Чуть позже мы рассмотрим, как формируется значение переменной "tg_infect". Поскольку приводимый обработчик активно работает со стеком,есть смысл предусмотреть в нем собственный стек. Поэтому сразу за меткой " vir_2 " запишем команды, переключающие стек на специальную область данных вируса "newstack": Последней запишем команду, сбрасывающую "tg_infect" в ноль. Этим мы защитим вирусный код от повторного вхождения. Теперь необходимо вызвать старый обработчик INT 28h, иначе наш вирус будет " топить " другие резидентные программы, которые перехватывают это же прерывание. Поэтому запишем: pushf;Вызываем старый db 9ah;обработчик old_28h dw 0;INT 28h... old_28h_2 dw 0Обработчик здесь вызывается как дальняя процедура. Команда "CALL" записана в виде машинного кода, а поля "old_28h" и "old_28h_2" заполняются секцией инициализации при установке вируса в память. * Обратите внимание на команды переключения стека. Они необычны тем,что от адреса ячеек памяти "ss_save", "sp_save", "tg_infect" и "help_word" отнимается число 110h. Дело в том, что при компиляции исходного текста COM - программы адреса ячеек памяти вычисляются исходя из того, что DS указывает на начало ее PSP. Кроме того, в самом начале вируса мы записали директиву "org 110h". Но ведь к вышеуказанным ячейкам памяти вирус обращается в резидентном режиме, да еще и относительно CS. А CS указывает строго на начало обработчика, а не на начало PSP, как это было при компиляции! Поэтому относительный адрес ячеек необходимо уменьшить на 110h, что мы и сделали. Этот прием будет использован еще несколько раз при построении вирусных обработчиков прерываний, поэтому полезно будет понять, на чем он основан.
Дата добавления: 2014-11-20; Просмотров: 483; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |