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
Новое место для вирусов
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.
AMI BIOS обладает своими специфическими особенностями при размещении в микросхемах Flash-памяти, которые базируются на использовании функции E0h прерывания INT 16h. Самое интересное состоит в том, что однажды внесенный в эту память вирус может запретить повторно использовать указанную функцию. Это запретит антивирусным программам воспользоваться ею в процессе удаления вируса из BIOS компьютера. Исходя из этого, авторам антивирусных программ придется трассировать INT 16h, чтобы получить оригинальный вектор.