Virus Tutorial

Por: Pockets
O que estiver entre [ e ] foi adicionado pelo CyberLord



1- O que fazem estes pequeninos insectos?
Um virus de computador funciona da mesma maneira do que um virus Biológico. O virus tenta aproveitar ao máximo as células de modo a conseguir sobreviver e procriar.
Os virus biológicos matam o anfitrião no fim, mas os MEUS virus não. Eu NÃO apoio código com intenção de destruir. Não é que eu goste de todas as pessoas... Não é que eu não queira magoar ninguém... É porque os virus precisam de hipóteses para se espalharem! Não necessitam de acabar nos laboratórios da Mcafee 2 meses antes da sua data de activação.

2-Ok, e quais as bases de um virus?
A maneira de trabalhar de um virus é esta:


3- Eu percebi, como é que aquilo trabalha, mas como é que eu o vou fazer?
A maioria dos virus são escritos em Asm.
A linguagem Assembler é muito mais poderosa e compacta do que a maioria das linguagens, mas C/C++ é aceitável para se COMEÇAR! Eu irei basicamente fazer este tutorial em Asm...
Existem 2 tipos de virus que nós podemos escrever uma vez entendida a teoria básica e um pouco dos comandos de assembler... Os que escrevem por cima OVERWRITING, e os que escrevem a partir de um certo sitio APPENDING. Os OVERWRITING DESTROEM o programa que os vai albergar, deixando "talvez" um bocadinho do programa original. Isto é mau, pois o virus pode ser detectado MUITO MUITO facilmente [pois o programa não corre, ou correrá com defeitos]. Os APPENDING, por outro lado, MODIFICAM o programa que os alberga, e deixam que ele corra perfeitamente. [Ninguém notará nada, pois o ficheiro continuará a funcionar].

Ideia básica de um virus overwriting:

Ideia básica de um virus appending:
4- Ok, eu tenho tentado evitar isto, mas tem de ser, ai vem a documentação técnica!
Umas coisas técnicas que precisas de saber...
Nota: Eu assumirei que tu estás a aprender como infectar ficheiros .com, e por isso só incluirei informação acerca deles. Infectar ficheiros .com é simples, e é por isso a maneira mais fácil de começar. A rasão pela qual os ficheiros .com são mais fáceis de infectar é porque eles são lidos directamente para a memória, a partir do disco. Os .exe e outros ficheiros contêm cabeçalhos ou outra informação que é necessária à sua execução.

Informação geral sobre ficheiros .com:

Função para encontrar o primeiro ficheiro e o DTA: (Função 4eh, Int 21h)

Nota: Offset 80h é TAMBÉM o começo da cauda do programa! Se estiver-mos a escrever um virus appending, chamar esta função ANTES de realocar o DTA NÃO é aceitável! A cauda do programa vai ser re-escrita. Ex: Format.com /s A: The "/s A:" vai ser re-escrito com lixo, fazendo com que o format.com passe a funcionar mal, e consequentemente se torne suspeito.

Informação encontrada no DTA:

Localização e para que estão lá:
Para se ter acesso a esta informção, precisamos de saber qual é o offset do DTA (ex: 80h nos ficheiros .com, a não ser que tenha sido movimentado).
Vamos supor que não o movimentámos e que temos um ficheiro ali.
Para inserir o nome do ficheiro no registo ax, fariamos isto:

Sendo 80h o offset do começo do DTA, sendo 1eh o offset do nome do ficheiro em asciiz. 9eh irá ser o offset considerando que o DTA começa em 80h, e que o nome do ficheiro em asciiz começa 1eh bytes depois do começo do DTA.

Movendo o DTA:

Para obter informação do novo DTA fazemos o seguinte:
E finalmente nós queremos mover o DTA para onde ele estava, ou o ficheiro que acabámos de infectar não trabalhará correctamente e tornar-se-à suspeito:
Explicando muito simplesmente, o DTA é apenas o lugar onde é localizada informação temporária sobre os ficheiros. :))

Notas sobre o binário:


Notas sobre Hexadecimal:

Notas sobre os tamanhos:

5- Au, doí-me o cérebro com tantas coisas.....
Deixa lá, hás-de te habituar, as únicas coisas que tens de memorizar são os sistemas de numeros(hex, bin), os tamanhos da informação e os operadores de Assembler!

6- Já esperei muito, acho que agora está na altura de mostrares algum código, hmm, Pockies?
Ok, primeiro vou mostrar-te código sobre virus overwriting, embora não sejam estes que tu queiras escrever para sempre.
Este tutorial é suposto começar a ensinar o mais fácil, e quando acabares de o ler, deves saber mais do que quando começas-te. Espero que vocês passem deste para os vossos próprios appending virus, e depois talvez tentar encriptação, depois TSRs, e depois infectar os EXE, depois polimorfismo, depois BootSector, depois Multipartite, etc etc etc...

Estou a assumir que tu estás a utilizar o Tasm 2.0, ou melhor, considerando que eu estou a utilizar o Tasm 5.0....
Código Fonte

Basicamente, este virus encontra o primeiro ficheiro na directoria, abre-o, escreve-se a si próprio para o ficheiro em cima da informação lá contida, fecha-o, e grava-o, e depois sai para o DOS.
Bom, este virus é patético. [Pockies, deixa lá, é patético, mas ensina as bases :))]. Imprime-o, ri-te, mas lembra-te que ele faz o que faz e reproduz-se :)). Se não entendes o funcionamento básico deste virus, lê mais código que NÃO SEJA DE VIRUS, revê os códigos de Asm, e tenta outra vez. NÃO CONTINUES se não conseguires entender o código aqui escrito!!

7- Psst, Pocket. Este tutorial está a fazer com que pareças esquizofrénico.
Cala-te. Se isto ensinar alguém, então tenho o direito de parecer estúpido.
[Pockies, não te chateies, tu de qualquer maneira sempre foste doido, mas estúpido nunca.]

8- Ok, consegui entender a desculpa do virus que foi incluido em #6.
Ainda bem. O virus em #6 é apenas o mais simples que podes fazer. Certamente ele ficará ali, e vai-se re-escrever (overwrite) A ELE PRÓPRIO, repetidamente... [E PENSAS QUE É MAU? Bom, não é lá grande coisa, mas sempre ensina.] Mas demonstra os virus overwriting.

O próximo tipo de virus que vou mostrar são os appending. Preciso de dar umas breves explicações antes de te mostrar...
Este tipo de virus PRECISA de manter as instruções do ficheiro anfitrião, que ele escreve por cima. Um appending virus não é executado do 100h, como os overwriting são, portanto precisamos de encontrar de onde é que estamos a executar. O sitio é chamado 'delta offset'.

Notas sobre appending:



9- Ok, eu entendi isso, onde está o código para isso? [Pockies deste ai uma granda explicação ;)]
Existem muitos exemplos no IRC e na Web para os virus appending... [Tens apenas de procurar nos sitios certos :))]
Portanto isto é trivial...
MAS...
Mas vou mostrar algumas rotinas importantes e como o virus trabalha. E como o virus overwriting este vai ser tão estúpido como o outro... [Agora já sei porque é que em 7, o Pockies começou a ter cara de estúpido, por causa do código ;>]

Appending Virus 101:

Código universal para isto.

A instrução jmp:


2 maneiras de obter o tamanho original do anfitrião:


Patching o anfitrião para este trabalhar correctamente:


Código para restaurar as bytes:


Ver se já foi infectado o ficheiro:

10- Código fonte, código fonte, código fonte....
Tou com a sensação estranha de que queres ver código, portanto...
Comentado pelo kRaCkBaBy no seu retorno à scene dos virus!

Para veres o código basta clicar aqui.