Создаем вирус и антивирус
Шрифт:
virtualsize dd 0
RVA dd 0
physicalsize dd 0
physicaloffset dd 0
reserved dd 0,0,0
objectflags db 40h,0,0,0C0h
;Данные, необходимые для заражения файла
peheader:
signature dd 0
cputype dw 0
numObj dw 0
db 3*4 dup (0)
NtHeaderSize dw 0
Flags dw 0
db 4*4 dup (0)
entrypointRVA dd 0
db 3*4 dup (0)
objalign dd 0
filealign dd 0
db 4*4 dup (0)
imagesize dd 0
headersize dd 0
;Область памяти для чтения остатка PE−заголовка и таблицы объектов
vend:
db 1000h dup (0)
ends
end vstart
Глава 4
В этой главе рассказано о макровирусах. Подробно описана процедура и методы заражения файлов. Представлен исходный текст макровируса с подробными комментариями. Приведены основные сведения о языке VBA, его процедурах, функциях, стандартных конструкциях.
Как известно, в последнее время большое распространение получили макро-вирусы. По сведениям из различных источников, на эти вирусы приходится от 70 до 80 процентов заражений. Изложенный ниже материал поможет разобраться в вирусах этого типа.
Инструментарий
Для изучения макро-вирусов понадобится некоторое программное обеспечение. В качестве «полигона» необходим MS-WORD версии 6.0 или выше. Для изучения зашифрованных макросов может пригодиться дизассемблер макросов (автор AURODREPH из VBB). Для более полного понимания всего изложенного ниже желательно иметь базовые знания о WORD BASIC.
Чтобы обезопасить рабочие файлы от плодов экспериментов, настоятельно рекомендуется создать резервную копию шаблона NORMAL. DOT в каталоге WINWORD6\TEMPLATE, так как именно этот документ обычно заражается макро-вирусом. Когда все готово, самое время перейти к основам макро-вирусов.
Общие сведения
Макрос – это программа, написанная на некотором языке, которая используется обычно для автоматизации определенных процессов внутри приложений. В данном случае разговор пойдет о языках Visual Basic for Applications (VBA) и WordBasic (WB), которые Microsoft использует в своих программах (в частности, Excel, Project и PowerPoint используют VBA, а WinWord – WB).
Далее будем считать стандартным языком VBA, так как он представляет собой попытку унифицировать макроязык, сделать его общим для всех программ Microsoft. Несмотря на то, что WB имеет некоторые отличия, в том числе и в синтаксисе, структура кода этих языков похожа. При необходимости будет особо отмечено, что речь идет о WB. Макрос VBA – это вызываемые процедуры. Они бывают двух типов: процедуры-подпрограммы и процедуры-функции.
Процедуры-подпрограммы могут исполняться непосредственно или вызываться из других макросов. Синтаксис их следующий:
Sub <Имя_Макроса>
−> код макроса <−
’Комментарий начинается с апострофа
End SubПример:
’Данный макрос открывает диалоговое окно и выводит сообщение
Sub Stupid_Greeting
MsgBox ”Hello World!”
End SubПроцедуры-функции (также называемые просто функциями) возвращают значение, которое может быть передано в качестве параметра другой процедуре. Их синтаксис:
Function <Имя_Функции>(Аргументы)
−> Инструкции <−
’Комментарий
End FunctionПример:
’Суммирует параметры a и b и возвращает
’результат в переменную ”AddAB”
Function AddAB(a,b)
AddAB=a+b
End FunctionКонечно, в документ можно вставить столько макросов, сколько нужно (или
Язык VBA работает также с объектами (внутри модулей VBA можно делать ссылки на документы, графику). Объекты обладают свойствами. Например, свойством (или атрибутом) объекта является его цвет.
VBA также позволяет работать с переменными. Как любой язык структурного типа, VBA имеет типичные конструкции:цикл «For-next»:
Sub Counter ’Процедура
Infect_Num=0
For Count=1 to 10 ’Цикл от 1 до 10
Infect_Num=Infect_Num+Count
Next Count
MsgBox ”Достигли максимального количества заражений”
End Subусловие «If-then»:
Sub Infect_Check
If Infect_Num=0 Then MsgBox ”Файл не заражен”
End Subконструкция «With-end with» (используется для работы с несколькими свойствами конкретного объекта):
Sub ChangeProperties
With Selection
.Font.Bold=True
.Font.ColorIndex=3 ’красный цвет
End With
End Subселектор «Select case-end case»:
Sub Check_Infection
Select Case Infect_Num
Case 0
MsgBox ”Файл не заражен”
Case is > 0
MsgBox ”Файл заражен”
Case is < 0
Infect_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 3.x, Win95, WinNT, MacOS и так далее, то есть в любой операционной системе, где можно запустить приложения его поддерживающие.
VBA представляет собой язык, адаптированный к языку приложения, из-под которого он запущен. Это означает, что если на компьютере установлена, например, испанская версия WinWord, то имена предопределенных функций будут также на испанском. Так что два следующих макроса – вовсе не одно и то же.
Первый макрос (испанский):