Еще более «продвинутый» метод, используемый в компьютерных вирусах, предусматривает поиск «жертв» во всех каталогах дискового устройства. Он основан на следующих предпосылках.
Если в байте атрибутов, помещаемом перед вызовом функции 4Eh в регистр CL, установить бит с номером 4, то в список перечисляемых файлов попадут не только обычные файлы, но и каталоги. Для того чтобы переместиться в найденный таким образом каталог, операционная система MS-DOS предоставляет программисту функцию с кодом 3Bh. Перед ее вызовом достаточно указать в регистровой паре DS:DX адрес пути к указанному каталогу. Конечно, этого мало для полноценной навигации по файловой системе. Как минимум потребуются еще: Сама процедура поиска тоже довольно нетривиальна. Каталоги на дисковом устройстве образуют древовидную структуру, и для того чтобы побывать в каждом узле этого дерева, необходимо реализовать рекурсивный алгоритм их обхода. Эта задача сравнительно легко решается на языках высокого уровня, таких как Паскаль или Си, но вызывает ряд затруднений при попытке использовать язык Ассемблера. Необходимо для каждого узла иметь свой уникальный контекст и уметь организовывать «откаты» в том случае, когда обход дочерних ветвей для данного узла завершен. Для этого адрес контекста приходится сохранять в стеке… одним словом, для начинающих ви — русописателей задача рекурсивного обхода дерева каталогов часто оказывается слишком сложной. Еще один недостаток такого рода вирусов — довольно долгая, сразу заметная для чуткого уха и зоркого глаза работа. Немудрено, что вирусы, использующие этот метод, можно пересчитать по пальцам, и больше половины из них относятся к классу HLL. Вот несколько примеров:
Вирусописатель может позволить себе заражать лишь некоторые программы, автор же антивируса обязан проверять «на вшивость» все файлы на указанном диске. Поэтому специалисту, разрабатывающему антивирус-сканер, умение обходить дисковые каталоги просто необходимо.





Свежие комментарии