Engenharia de um Vírus – Looping e Modo Silencioso
28/06/2013 6 Comentários
Pensei em criar uma aplicação Windows Forms, porém como não teremos telas nessas demonstrações, optei por utilizar uma aplicação Console (Tela Preta), por serem menores (para efeito de testes criei 2 projetos um Console e um Windows Forms não alterei nenhuma configuração, compilei no modo release e percebi que o assembly gerado na aplicação Console é 2 kb menor que o assembly da aplicação Windows Forms).
Criação do Projeto
Nome do Projeto: V1RILL
Modelo de Projeto: Console Application
Versão Plataforma .NET: 4.0 -> Pensando na compatibilidade com o XP e versões anteriores
Looping Infinito
Pra começar a estrutura do nosso VIRILL, vamos coloca-lo em um looping infinito, a idéia é que ele sempre fique ativo, monitorando e interagindo com a máquina.
Abra o arquivo Program.cs e no ponto de entrada da aplicação coloque o código abaixo:
static void Main(string[] args) { //Colocamos a variante em um looping infinito while (true) { } }
Modo Silencioso
É muito comum que uma variante rode em background no modo SILENCIOSO, sem que o usuário saiba de sua execução até porquê se perceber que algo está errado vai tentar remover (Manualmente, Anti Vírus, Patch de Remoção) e consequentemente irá acabar com a brincadeira, quanto mais imperceptível estiver MELHOR !!!
Literalmente temos que dar um Visible (False), porém como estamos utilizando uma aplicação Console não temos uma interface visual e suas configurações, para resolver esse problema iremos recorrer as APIS NATIVAS DO WINDOWS.
Interagindo com as APIS WIN32 podemos manipular recursos nativos do sistema operacional (registro do windows, arquivos e pastas, arquivos de drivers, barras, menus, aplicações, formatações) e dispositivos conectados a máquina (teclado, mouse, webcam, monitor, cd-rom, impressora).
Agora veio a grande dúvida, como interagir com as APIS WIN32 através do Visual C# ???
Simples tem um recurso da plataforma .NET chamado PINVOKE que nos auxilia a fazer o Marshaling (Interoperabilização entre o código gerenciado e o código NÃO gerenciado normalmente bibliotecas em C, C++), para não ter que ficar decorando a assinatura e chamada das APIS WIN32, existe um site bem bacana chamado PINVOKE nele podemos visualizar todas as DLL’S nativas do sistema operacional, métodos e exemplos para CTRL + C e CTRL + V.
Para começar a utilizar PINVOKE, vamos importar a namespace (System.Runtime.InteropServices) e para poder deixar a aplicação oculta vamos utilizar os métodos (GetConsoleWindow e ShowWindow)
using System; using System.Collections.Generic; using System.Linq; using System.Text; //Namespace necessária para habilitar as chamadas as APIS WIN32 using System.Runtime.InteropServices; namespace V1RILL { class Program { //Assinatura do método responsável por capturar o handle da janela //Esse método esta dentro de kernel32.dll [DllImport("kernel32")] private static extern IntPtr GetConsoleWindow(); //Assinatura do método responsável por manipular o estado da janela //Esse método esta dentro de user32.dll [DllImport("user32")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); static void Main(string[] args) { //Pegamos o identificador da janela corrente //Deixamos a variante oculta = 0, visível = 1 ShowWindow(GetConsoleWindow(), 0); //Colocamos a variante em um looping infinito while (true) { } } } }