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), и некоторые другие
функции работы с файлами.