Удаление VBA-макросовТеперь рассмотрим вопрос, как «лечить» обнаруженные в документах вирусы. В начале потока «WordDocument» размещается большой заголовок FIB, в котором для нас наиболее интересны два поля. Полезно процитировать «фирменное» описание второго из этих полей, ярко характеризующее отношение Microsoft к разглашению своих секретов: Undocumented size of undocumented structure not documented above. В потоке «1 Table» хранятся сведения о расположении и именах всех макросов. Любая правильная таблица макросов начинается с байта FFh и заканчивается байтом 40h. Таким образом, для очистки потока «xTable» можно в заголовке «WordDocument» установить длину 2, а зарезервированное в потоке «xTable» под описатели макросов поле «почистить», поместив в начало слово 40FFh. Кстати, очень похоже «мухлевал» вирус Macro. Word97.Xaler, заставляя встроенный в MS Word антивирус искать описатели макросов там, где их не было. Антивирус отказывался оповещать о наличии макросов, а вот виртуальная машина была более недоверчивой, обнаруживая и исполняя макросы из потоков, описанных в поддереве, начинающемся с подкаталога «Macros». Поэтому завершающим шагом лечения является «VBA-эктомия», то есть удаление из документа всех потоков, связанных с макросами… ну или хотя бы их общего корня — каталога «Macros». Достаточно переименовать его, и виртуальная машина не найдет в документе ничего, предназначенного для выполнения.

Разумеется, описанный выше способ обнаружения и удаления макровирусов — далеко не единственный.

Мимикродонов не стоит выслеживать и нападать на них именно справа… К ним можно просто подойти и есть — с хвоста или с головы, как угодно. Продемонстрируем на конкретном примере основные приемы, которые можно использовать против макровирусов. Пусть объектом для показательного «вскрытия» послужит несложный макровирус Wazzu, который существует в обоих вариантах — и на языке WordBasic для MS Word 6.0/7.0 , и на языке VBA для MS Word 97 .

Еще интересные статьи :