Резидентные
вирусы
DOS предусматривает единственный
способ создания резидентных (TSR)
модулей (помимо драйверов,
указываемых в CONFIG.SYS) - при помощи
функции KEEP (INT 21h, AH=31h или INT 27h).
Многие файловые вирусы для
маскировки своего распространения
используют другой способ -
обрабатывая системные области,
управляющие распределением памяти
(MCB), выделяют для себя свободный
участок памяти, помечают его как
занятый и переписывают туда свою
копию. Некоторые вирусы внедряют
свои TSR-копии в свободные участки
памяти в таблице векторов
прерываний, в рабочие области DOS, в
память, отведенную под системные
буферы, в блоки памяти UMB, EMS и XMS.
Известны два способа проверки
резидентным вирусом наличия своей
копии в памяти компьютера. Первый
заключается в том, что вирус вводит
новую функцию некоторого
прерывания, действие которой
заключается в возврате значения
"я здесь". При старте вирус
обращается к ней, и, если
возвращенное значение совпадает со
значением "я здесь", то память
компьютера уже заражена и
повторное заражение не
производится. При проверке вторым
способом вирус просто сканирует
память компьютера. Оба способа
могут в той или иной мере
сочетаться друг с другом. При
инфицировании оперативной памяти
вирус ищет свободное место в памяти
и записывает туда свою копию. Затем
вирус переопределяет одно или
несколько прерываний, необходимых
ему для поиска заражаемых файлов,
для выполнения деструктивных
действий или звуковых и
видеоэффектов.
При инфицировании файлов
нерезидентные и некоторые
резидентные вирусы ищут на диске
(дисках) эти файлы при помощи
функций DOS FindFirst и FindNext (INT 21h,
AH=11h,12h,4Eh,4Fh). Резидентные вирусы
используют более широкий список
функций DOS, при обращении к которым
происходит заражение файла.
Фактически в этом списке
присутствуют все функции, по
значениям входных или выходных
параметров которых можно
определить имя файла, к которому
идет обращение (к таким параметрам
относятся значения
соответствующих регистров или
областей памяти). В результате к
"вирусоопасным" функциям
прерывания 21h относятся функции
выполнения (EXEC, AX=4B00), загрузки в
память (AH=4Bh), поиска (FindFirst и FindNext,
AH=11h,12h,4Eh,4Fh) создания (Create, AH=3Ch),
открытия (Open, AH=3Dh), закрытия (Close,
AH=3Eh), изменения атрибутов (ChMode, AH=43h),
переименования (Rename, AH=56h), и
некоторые другие функции работы с
файлами.