www.pudn.com > Pckv.zip > RESIST.ASM


;		RESIST.ASM 
;        CREATED:   3-16-1996   
;----------- STACK_SEG_A --- 
SEG_A	SEGMENT	PARA STACK 
		DB	80H  DUP (0) 
SEG_A	ENDS 
;-------------- SEG_B ------ 
SEG_B		SEGMENT	PARA PUBLIC  
ASSUME CS:SEG_B , DS:SEG_B , SS:SEG_A 
;	PROGRAM ENTRY POINT 
RESIST		PROC	FAR 
START:		JMP	KS 
DMH3		DB	0 
DMH2		DW	0 
DMH1		DW	0 
WJSJ		DW	0 
WJRQ		DW	0 
BOOTWZ1		DW	0180H 
BOOTWZ2		DW	0001H 
INT13ZF		DD	0 
WJRE1	DB	'C:\RESIST1.DAT',0 
WJRE2	DB	'C:\RESIST2.DAT',0 
WJCO1	DB	'C:\COMMAND.COM',0 
WJCO2	DB	'C:\AABBCCD.LLL',0 
WJCO3	DB	'C:\COMMAND.BTK',0 
 
WJH		DW	0 
WJCD		DW	0 
REWJCD		DW	0 
RESISTTZ	DB	0 
DISKCWM		DB	0 
DISKTZ1		DB	0 
DISKTZ2		DB	0 
ENDTZ		DB	0 
NEWESZC		DW	0 
RESISTCD	DW	0 
PSPZF1	DB	1CH DUP(0) 
PSPZF2	DB	04DH,05AH,0B8H,000H,006H,000H,001H,000H 
	DB	020H,000H,000H,000H,0FFH,0FFH,000H,000H 
	DB	040H,000H,016H,085H,000H,000H,004H,000H 
	DB	020H,000H,000H,000H 
DIRTZM	DB	0BBH,0FFH,005H,0FEH,005H,0EAH,003H,030H 
	DB	0C8H,08DH,0D8H,0C4H,005H,0C0H,0FFH,004H 
NOTZF		DB	10,13,'抗毒文件 Resist 没有按装 !$' 
CZCZF		DB	10,13,'文件操作错 !$' 
OPENZF		DB	10,13,'打不开文件 !$' 
CREATZF		DB	10,13,'建立文件错 !$' 
DWJZF		DB	10,13,'读文件错 !$' 
XWJZF		DB	10,13,'写文件错 !$' 
XSZF1	DB 13,10,'  警告  !!!' 
	DB 13,10,'  系统引导已经被病毒破坏了 !' 
	DB 13,10,'  在分区扇或引导扇的病毒已经被杀掉了。' 
	DB 13,10,'  请重新启动计算机 !$' 
XSZF2	DB 13,10,'  警告  !!!' 
	DB 13,10,'  硬盘的 command.com 文件中有病毒,现已杀掉病毒 !' 
	DB 13,10,'  请重新启动计算机 ! ' 
	DB	 '并检查其他exe和com文件是否也感染上该病毒!$' 
XSZF3	DB 13,10,'  警告  !!!' 
	DB 13,10,'  硬盘中已感染上 DIR-II 病毒 !' 
	DB 13,10,'  请首先杀掉 DIR-II 病毒,才能检查或清除其他病毒 !$' 
XSZF4	DB 13,10,'  您的系统已感染上 DIR-II 病毒 !$' 
XSZF5	DB 13,10,'  请用 PCKV 清除 DIR-II 病毒!$' 
; 
ERR1	DB 13,10,'读分区扇错 !$' 
ERR2	DB 13,10,'写分区扇错 !$' 
ERR3	DB 13,10,'读引导扇错 !$' 
ERR4	DB 13,10,'写引导扇错 !$' 
ERR5	DB 13,10,'硬盘的分区表坏 !$' 
ERR6	DB 13,10,'保存的分区表坏 !$' 
ERR7	DB 13,10,'引导扇的位置不对 !$' 
ERR8	DB 13,10,'保存文件或抗毒文件错 !$' 
DPBGS		DW	3 
DPBOFFSET	DW	006BH 
		DW	0 
KS:	PUSH	ES 
	MOV	AX,0 
	PUSH	AX 
	MOV	AX,SEG_B 
	MOV	DS,AX 
	MOV	ES,AX 
	MOV	AX,OFFSET ENDADD 
	MOV	RESISTCD,AX 
	ADD	AX,4FH 
	AND	AX,0FFF0H 
	MOV	NEWESZC,AX 
	MOV	RESISTTZ,0 
	 
	MOV	DX,OFFSET WJRE1 
	MOV	AX,3D00H 
	INT	21H 
	JNB	REST1 
	JMP	NOTC 
REST1:	MOV	WJH,AX 
	CALL	CLOFIL 
	JNB	REST2 
	JMP	CZC 
REST2:	MOV	DX,OFFSET WJRE2 
	MOV	AX,3D00H 
	INT	21H 
	JNB	REST3 
	JMP	NOTC 
REST3:	MOV	WJH,AX 
	CALL	WJZZM 
	JNB	REST4 
	JMP	CZC 
REST4:	MOV	REWJCD,AX 
	CALL	CLOFIL 
	JNB	REST5 
	JMP	CZC 
REST5:	CMP	DMH1,0 
	JNZ	REST6 
	JMP	NOTC 
REST6:	CMP	DMH2,0 
	JNZ	AA1 
	JMP	NOTC 
; 
AA1:	CALL	READDISK	 
	CMP	DISKTZ1,0 
	JZ	AA2 
	TEST	DISKTZ1,4 
	JNZ	CC2 
	TEST	DISKTZ1,8 
	JNZ	CC2 
	TEST	DISKTZ1,3 
	JZ	AA2 
	JMP	FF6 
AA2:	MOV	SI,NEWESZC 
	MOV	CX,200H 
	MOV	AX,0 
AA3:	ADD	AX,[SI] 
	ADD	SI,2 
	LOOP	AA3 
	CMP	AX,DMH1 
	JNZ	CC2 
	JMP	BB0 
; 
CC2:	MOV	DX,OFFSET WJRE1 
	MOV	AX,3D00H 
	INT	21H 
	JNB	CC3 
	JMP	OPENC 
CC3:	MOV	WJH,AX 
	MOV	BX,WJH 
	MOV	CX,400H 
	MOV	DX,NEWESZC 
	MOV	AH,3FH 
	INT	21H 
	JNB	CC4 
	JMP	DWJC 
CC4:	CALL	CLOFIL 
	CALL	WRITDISK 
	TEST	DISKTZ2,0FH 
	JZ	CC5 
	JMP	FF6 
CC5:	MOV	DX,OFFSET XSZF1 
	MOV	AH,9 
	INT	21H 
	JMP	FF6 
; 
BB0:	CALL	DPB 
	TEST	RESISTTZ,4 
	JZ	BB1 
	JMP	DD2 
BB1:	MOV	DX,OFFSET WJCO1 
	MOV	AX,3D00H 
	INT	21H 
	JNB	BB2 
	JMP	OPENC 
BB2:	MOV	WJH,AX 
	CALL	WJZZM 
	JNB	BB3 
	JMP	CZC 
BB3:	MOV	WJCD,AX 
	CMP	AX,REWJCD 
	JNZ	DD2 
	CALL	WJZZS 
	MOV	CX,WJCD 
	MOV	DX,NEWESZC 
	MOV	BX,WJH 
	MOV	AH,3FH 
	INT	21H 
	JNB	BB5 
	JMP	DWJC 
BB5:	CALL	CLOFIL 
	MOV	CX,10H 
	MOV	BX,OFFSET DIRTZM 
BB6:	INC	BYTE PTR [BX] 
	INC	BX 
	LOOP	BB6 
	MOV	SI,OFFSET DIRTZM 
	MOV	DI,NEWESZC 
	MOV	CX,10H 
	REPZ	CMPSB 
	JZ	DD2 
	MOV	SI,NEWESZC 
	MOV	CX,WJCD 
	SHR	CX,1 
	MOV	AX,0 
BB8:	ADD	AX,[SI] 
	ADD	SI,2 
	LOOP	BB8 
	CMP	AX,DMH2 
	JNZ	DD2 
	MOV	AX,NEWESZC 
	MOV	BX,WJCD 
	ADD	BX,AX 
	DEC	BX 
	MOV	AL,[BX] 
	CMP	AL,DMH3 
	JNZ	DD2 
	JMP	END2 
; 
DD2:	MOV	DX,OFFSET WJRE2 
	MOV	AX,3D00H 
	INT	21H 
	JNB	DD3 
	JMP	OPENC 
DD3:	MOV	WJH,AX 
	CALL	WJZZM 
	JNB	DD4 
	JMP	CZC 
DD4:	MOV	WJCD,AX 
	CALL	WJZZS 
	JNB	DD5 
	JMP	CZC 
DD5:	MOV	BX,WJH 
	MOV	CX,WJCD 
	MOV	DX,NEWESZC 
	MOV	AH,3FH 
	INT	21H 
	JNB	EE1 
	JMP	DWJC 
 
EE1:	CALL	CLOFIL 
	MOV	DX,OFFSET WJCO2 
	MOV	CX,20H 
	MOV	AH,3CH 
	INT	21H 
	JNB	EE2 
	JMP	CREATC 
EE2:	MOV	WJH,AX 
	MOV	DX,NEWESZC 
	MOV	BX,WJH 
	MOV	CX,WJCD 
	MOV	AH,40H 
	INT	21H 
	JNB	EE3 
	JMP	XWJC 
EE3:	MOV	CX,WJSJ 
	MOV	DX,WJRQ 
	MOV	AX,5701H 
	INT	21H 
	JNB	EE4 
	JMP	CZC 
EE4:	CALL	CLOFIL 
	MOV	DX,OFFSET WJCO3 
	MOV	AX,4100H 
	INT	21H 
	JNB	EE5 
	JMP	CZC 
EE5:	MOV	DX,OFFSET WJCO1 
	MOV	DI,OFFSET WJCO3 
	MOV	AH,56H 
	INT	21H 
	JNB	EE6 
	JMP	CZC 
EE6:	MOV	DX,OFFSET WJCO2 
	MOV	DI,OFFSET WJCO1 
	MOV	AH,56H 
	INT	21H 
	JNB	EE7 
	JMP	CZC 
EE7:	MOV	DX,OFFSET XSZF2 
	MOV	AH,9 
	INT	21H 
	JMP	FF6 
 
FF3:	MOV	DX,OFFSET XSZF3 
	MOV	AH,9 
	INT	21H 
FF6:	JMP	FF6 
; 
NOTC:	MOV	DX,OFFSET NOTZF 
	JMP	END1 
CZC:	MOV	DX,OFFSET CZCZF 
	JMP	END1 
OPENC:	MOV	DX,OFFSET OPENZF 
	JMP	END1 
CREATC:	MOV	DX,OFFSET CREATZF 
	JMP	END1 
DWJC:	MOV	DX,OFFSET DWJZF 
	JMP	END1 
XWJC:	MOV	DX,OFFSET XWJZF 
END1:	MOV	AH,9 
	INT	21H 
END2:	MOV	AX,4C00H 
	INT	21H 
	RET 
; 
DPB	PROC NEAR 
	PUSH	ES 
	PUSH	SI 
	PUSH	DI 
	PUSH	CX 
	PUSH	BX 
	PUSH	AX 
	MOV	AH,30H 
	INT	21H 
	CMP	AL,4 
	SBB	SI,SI 
	MOV	AH,52H 
	INT	21H 
	MOV	BX,ES:[BX] 
	MOV	CX,DPBGS 
	MOV	DI,OFFSET DPBOFFSET 
DPBL1:	MOV	AX,ES:[BX+SI+13H] 
	CMP	AX,04E9H 
	JZ	DPBL3 
DPBL6:	MOV	BX,ES:[BX+SI+19H] 
	CMP	BX,0FFFFH 
	JZ	DPBL2 
	LOOP	DPBL1 
DPBL2:	JMP	DPBL4 
DPBL3:	OR	RESISTTZ,4 
DPBL4:	POP	AX 
	POP	BX 
	POP	CX 
	POP	DI 
	POP	SI 
	POP	ES 
	RET 
DPB	ENDP 
;	 
READDISK	PROC NEAR 
	PUSH	AX 
	PUSH	BX 
	PUSH	CX 
	PUSH	DX 
	PUSH	SI 
RD0:	MOV	BX,NEWESZC 
	MOV	SI,BX 
	MOV	DISKTZ1,0 
	MOV	DL,80H 
	MOV	DH,00H 
	MOV	CH,00H 
	MOV	CL,01H 
	MOV	AH,02H 
	MOV	AL,01H 
	PUSHF 
	CALL	INT13ZF 
;	INT	13H 
	MOV	DISKCWM,AH 
	JNB	RD2 
	CMP	DISKCWM,9 
	JNZ	RD1 
	ADD	NEWESZC,200H 
	JMP	RD0 
RD1:	MOV	DX,OFFSET ERR1 
	CALL	XXZFSC 
	OR	DISKTZ1,1 
	JMP	RD9 
RD2:	MOV	CX,4 
	ADD	SI,1EEH 
RD3:	CMP	BYTE PTR [SI],80H 
	JZ	RD4 
	SUB	SI,+10H 
	LOOP	RD3 
	MOV	DX,OFFSET ERR5 
	CALL	XXZFSC 
	OR	DISKTZ1,4 
	JMP	RD9 
RD4:	MOV	DX,[SI] 
	MOV	CX,[SI+02] 
	CMP	DX,BOOTWZ1 
	JNZ	RD5 
	CMP	CX,BOOTWZ2 
	JZ	RD6 
RD5:	OR	DISKTZ1,8 
	MOV	DX,OFFSET ERR7 
	CALL	XXZFSC 
	JMP	RD9 
RD6:	MOV	BX,NEWESZC 
	ADD	BX,200H 
	MOV	AX,0201H 
	PUSHF 
	CALL	INT13ZF 
;	INT	13H 
	MOV	DISKCWM,AH 
	JNB	RD9 
RD7:	CMP	DISKCWM,9 
	JNZ	RD8 
	ADD	NEWESZC,200H 
	JMP	RD0 
RD8:	MOV	DX,OFFSET ERR3 
	CALL	XXZFSC 
	OR	DISKTZ1,2 
RD9:	POP	SI 
	POP	DX 
	POP	CX 
	POP	BX 
	POP	AX 
	RET 
READDISK	ENDP 
; 
WRITDISK	PROC NEAR 
	PUSH	AX 
	PUSH	BX 
	PUSH	CX 
	PUSH	DX 
	PUSH	SI 
	MOV	BX,NEWESZC 
	MOV	SI,BX 
	MOV	DISKTZ2,0 
	MOV	CX,4 
	ADD	SI,1EEH 
WD0:	CMP	BYTE PTR [SI],80H 
	JZ	WD1 
	SUB	SI,+10H 
	LOOP	WD0 
	MOV	DX,OFFSET ERR6 
	CALL	XXZFSC 
	OR	DISKTZ2,4 
	JMP	WD8 
WD1:	MOV	DL,80H 
	MOV	DH,00H 
	MOV	CH,00H 
	MOV	CL,01H 
	MOV	AH,3 
	MOV	AL,01H 
	PUSHF 
	CALL	INT13ZF 
;	INT	13H 
	JNB	WD3 
	MOV	DX,OFFSET ERR2 
	CALL	XXZFSC 
	OR	DISKTZ2,1 
	JMP	WD8 
WD3:	MOV	BX,NEWESZC 
	ADD	BX,200H 
	MOV	DX,[SI] 
	MOV	CX,[SI+02] 
	CMP	DX,BOOTWZ1 
	JNZ	WD7 
	CMP	CX,BOOTWZ2 
	JNZ	WD7 
	MOV	AX,0301H 
	PUSHF 
	CALL	INT13ZF 
;	INT	13H 
	JNB	WD8 
	MOV	DX,OFFSET ERR4 
	CALL	XXZFSC 
	OR	DISKTZ2,2 
	JMP	WD8 
WD7:	MOV	DX,OFFSET ERR8 
	CALL	XXZFSC 
	OR	DISKTZ2,8 
WD8:	POP	SI 
	POP	DX 
	POP	CX 
	POP	BX 
	POP	AX 
	RET 
WRITDISK	ENDP 
; 
CLOFIL	PROC	NEAR 
	MOV	BX,WJH 
	MOV	AH,3EH 
	INT	21H 
	RET 
CLOFIL	ENDP 
; 
WJZZS	PROC	NEAR 
	MOV	BX,WJH 
	MOV	AX,4200H 
	MOV	CX,0 
	MOV	DX,0 
	INT	21H 
	RET 
WJZZS	ENDP 
; 
WJZZM	PROC	NEAR 
	MOV	BX,WJH 
	MOV	AX,4202H 
	MOV	CX,0 
	MOV	DX,0 
	INT	21H 
	RET 
WJZZM	ENDP 
; 
XXZFSC	PROC	NEAR 
	MOV	AH,9 
	INT	21H 
	RET 
XXZFSC	ENDP 
ENDADD	DB	0 
RESIST		ENDP 
SEG_B		ENDS 
		END	START