Как написать почтового червя на VBScript
Часть 1.
На идею написания статьи меня натолкнула статья How to write an E-Mail-Worm in
VBScript написанная DaSRo, я даже не стала изменять ее название. Просто постаралась
сделать описание более подробным и разбить пример на составные части, на которых
легче объяснить идею создания почтовый Internet – червей.
Начнем, как всегда с истории.
Самым знаменитым и нашумевшим стал I-Worm.LoveLetter (классификация Kaspersky
Lab.), вызвавший массовое поражение компьютеров и сетей в начале мая 2000 года.
Для своего запуска он использовал «дыру» в системе безопасности MS Windows, которая
позволяла запускаться файлам с расширением.vbs, присоединенных к почтовому
отправлению.
Позже эта «дыра» была заделана, но сама идея написания E-mail worm на Windows
Scripting Host (WSH) пришлась по душе virmaker'ам, тем более что глубоких знаний в
программировании не требовалось. Достаточно было знать основы программирования
на Visual Basic или другом объектно-ориентированном языке.
Теперь немного о самом WSH.
Необходимость в создании нового командного языка возникла при переходе на
платформу Win9x и NT, так как старые.bat файлы уже не могли обеспечить должной
гибкости при автоматизации процессов настройки операционной среды. Был создан
независимый от языка скрипт – хост, который позволял строить аналоги.bat файлов на
VBScript, JScript и других скриптовых языках, например, Active Perl или Python.
Как ни хороши скриптовые языки, много с ними не сотворишь. Они неспособны,
повлиять на что-либо за пределами родного скрипта. Эти языки не имеют прямых
инструкций, позволяющих читать и записывать файлы на диске, выводить
информацию в командную строку, изменять записи в реестре и так далее.
Чтобы справиться с такими задачами, нужно воспользоваться дополнительными COM
– объектами. Ряд таких объектов входит в поставку WSH, а один из них, WScript, даже
уже имеет созданный экземпляр, и им можно пользоваться непосредственно, без
предварительного создания. Остальные создаются с помощью синтаксиса,
соответствующего конкретному языку или функции WScript.CreateObject. Подробнее о
WSH можно найти в нете.
Настало время перейти непосредственно к описанию программного кода. Для
написания примеров будем использовать Visual Basic Scripting Edition, на котором
написано подавляющие большинство Internet – червей. Начнем с инструкций Option
Explicit и On Error Resume Next, первая необходима при отладке кода, она запрещает
использование не объявленной ранее переменной, а вторая подавляет обработчик
ошибок.
Option Explicit
Dim FileSysObject, File
Set FileSysObject = CreateObject («Scripting.FileSystemObject»)
Set File = FileSysObject.GetFile(WScript.ScriptFullName)
В данном примере используются переменные FileSysObject и File, и если при создании
скрипта вы допустите ошибку, написав FileSysObiect, интерпретатор сообщит вам, что
используется необъявленная, в операторе Dim, переменная. Такие ошибки находить
очень трудно, так как они зачастую меняют всю логику работы программы. Перейдем к
инструкции On Error Resume Next, эта инструкция означает, что любая возникшая
ошибка будет обработана программным кодом позднее, а в нашем случае никогда. Это
позволяет запретить выдачу системных сообщений об ошибках и замаскировать работу
скрипта.
Теперь опишем третью и четвертую строки примера:
Set FileSysObject = CreateObject («Scripting.FileSystemObject»)
Присваиваем переменной FileSysObject ссылку на объект COM-компоненты WSH File
System Object. С помощью метода GetFile присвоим переменной File ссылку на
командную строку местоположения исполняемого файла.
Скопируем скрипт в c:windows, для дальнейшего использования.
File.Copy («c:windowsI_am_virus.vbs»)