
                      И. И. Блашкин
                      ─────────────



          Описание структур ADM на нулевой дорожке



      Знание этих структур может помочь Вам  решить проблемы,
возникающие при форматировании или восстановлении винчестеров
с запорченной логической структурой или нестандартной размет-
кой. ADM использует для хранения своей информации  сектора со
2 по 10 нулевой дорожки  жесткого  диска.  Второй  сектор ис-
пользуется для хранения информации о  разделах  и  параметров
ADM, а в секторах с 3 по 10 хранится парольная информация.
      Рассмотрим структуру второго сектора.

╔═══════════╤═════════╤═════════════════════════════════╗
║ Смещение  │ Тип     │ Описание                        ║
║ в секторе │         │                                 ║
╟───────────┼─────────┼─────────────────────────────────╢
║  110h     │ Слово   │ Количество физических дорожек   ║
║           │         │ на винчестере                   ║
║           │         │ (включая тестовую и дорожку     ║
║           │         │ парковки (landing zone)         ║
║  112h     │ Байт    │ Всего головок на винчестере     ║
║  11Eh     │ Байт    │ Секторов на цилиндре            ║
║  12Ch     │ Слово   │ Слово статуса разделов          ║
║           │         │ (описание см. ниже)             ║
║  12Eh     │ Слово   │ Доступно дорожек на винчестере  ║
║           │         │ (Слово по адресу 110h - 2)      ║
║  130h     │ 16 байт │ Описатель раздела номер 5       ║
║           │         │ (структуру описателя см. ниже)  ║
║  140h     │ 16 байт │ Описатель раздела номер 6       ║
║  150h     │ 16 байт │ Описатель раздела номер 7       ║
║  160h     │ 16 байт │ Описатель раздела номер 8       ║
║  170h     │ 16 байт │ Описатель раздела номер 9       ║
║  180h     │ 16 байт │ Описатель раздела номер 10      ║
║  190h     │ 16 байт │ Описатель раздела номер 11      ║
║  1A0h     │ 16 байт │ Описатель раздела номер 12      ║
║  1B0h     │ 16 байт │ Описатель раздела номер 13      ║
║  1C0h     │ 16 байт │ Описатель раздела номер 14      ║
║  1D0h     │ 16 байт │ Описатель раздела номер 15      ║
║  1E0h     │ 16 байт │ Описатель раздела номер 16      ║
║  1F1h     │ байт    │ Флаг Security (опис. см. ниже)  ║
║  1F2h     │ 14 байт │ Идентификационная строка ADM    ║
║           │         │ #03#01'*MITAC-ADM*'#0           ║
╚═══════════╧═════════╧═════════════════════════════════╝

      Описатель статуса разделов содержит информацию о стату-
се для каждого раздела: инициализирован он  или  нет.  Каждый
раздел представлен соответствующим своему номеру  битом. Зна-
чение бита = 0 - раздел не инициализирован, 1 - инициализиро-
ван.
      Описатель раздела занимает 16 байт  и  имеет  следующий
формат :
╔═════════════╤═════════╤══════════════════════════════════╗
║ Смещение    │ Тип     │ Описание                         ║
║ в описателе │         │                                  ║
╟─────────────┼─────────┼──────────────────────────────────╢
║   00h,01h   │ Байт    │ Не используются (обычно = 0)     ║
║   02h       │ Слово   │ Адрес начала логического диска в ║
║             │         │ формате Int 13 (поясн. см. ниже) ║
║   04h       │ Байт    │ Номер накопителя (первый = 81h)  ║
║   05h       │ Байт    │ Смысл не известен (всегда = 5)   ║
║   06h       │ Слово   │ Адрес конца логического диска в  ║
║             │         │ формате Int 13 (поясн. см. ниже) ║
║   08h       │ Слово   │ Смещение до начала логического   ║
║             │         │ диска (Смысл не известен)        ║
║   0Ah       │ Слово   │ Тип логического диска            ║
║             │         │ (Смысл не известен, обычно 01)   ║
║   0Ch       │ Длинное │ Количество секторов              ║
║             │ Целое   │ на логическом диске              ║
╚═════════════╧═════════╧══════════════════════════════════╝

      Состояние флага Security определяет необходимость ввода
пароля при входе в систему ADM, в режиме Security  Off  права
доступа определяются по паролю 0.
      Парольная информация содержится в секторах с 3 по  10 в
следующем формате: на каждый пароль отводится 16 байт, смеще-
ние до начала информации о пароле  равно  номеру пользователя
(User ID) умноженному на 16,отсчет ведется начиная с третьего
сектора. Первые 4 байта зарезервированы для  прав  доступа  к
дискам. Каждый байт содержит информацию об четырех дисках: 00
- нет доступа,10 - только чтение,01 -  чтение  и  запись.  То
есть первый байт будет содержать в 6 и 7 битах  информацию  о
диске С,в 4 и 5 о диске D и так далее. И  остальные  12  байт
содержат пароль в закодированной форме.  Ниже  приведен алго-
ритм декодирования пароля на языке ассемблера. На входе DS:SI
содержит указатель на  закодированный  пароль,  а  на  выходе
DS:DX содержит указатель на раскодированный пароль.

         Алгоритм декодирования пароля

                cld
                mov     cx,12
                mov     di,si
                mov     dx,si
                lodsb
                xchg    al,ah
		or	ah,ah
		jnz	@dpsw
                mov     al,32
		rep	stosb
                jmp     done
        dpsw:   lodsb
                push    cx
		xor	al,ah
                mov     cl,ah
		and	cl,0FH
		ror	al,cl
                xor     al,5AH
		mov	cl,ah
		xor	cl,53H
		sub	al,cl
		xor	al,0C5H
		pop	cx
		stosb
                sub     ah,7
                loop    dpsw

      Драйвер ADM блокирует  запись  в  0-ю  дорожку  0-й по-
верхности жесткого диска, переключение триггера  этой  защиты
осуществляется путем следующего вызова:

                mov     ah,10h
                mov     di,0FFFFh
                mov     dx,di
                int     13h

      Для примера см. текст программы ADM_OFF.ASM


                        ПРИЛОЖЕНИЭ.
                        ───────────


           Удаление Boot-вирусов с жесткого диска



      Пользователи, использующие систему  ADM  для  разбиения
жесткого диска, могут легко удалять любые boot-вирусы  (в том
числе и не известные). Рассмотрим эту процедуру подробнее.
      MBR (Master Boot Record, находится в первом секторе ну-
левого  цилиндра  нулевой  дорожки),  которую  заражают   все
Boot-вирусы, формируется программой ADM при разбивке жесткого
диска на разделы. Следовательно, для удаления вируса  из  MBR
нужно сделать так, чтобы ADM перезаписал ее. Для  этого необ-
ходима незараженная загрузочная дискета и программы ADM.EXE и
DISKEDIT.EXE. Последовательность действий следующая :
      1. Загрузиться с незараженной  загрузочной  дискеты.
Драйвер ADM.SYS должен быть отключен.
      2. При помощи программы DISKEDIT сохранить в  файле  на
диске A сектора с 2 по 10 нулевой поверхности  нулевой дорож-
ки.
      3. Запустить программу ADM и записать на любой бумажный
носитель размеры всех разделов. (N дорожки начала и N дорожки
конца и размер в килобайтах)
      4. При помощи программы DISKEDIT обнулить первый и вто-
рой сектора нулевой дорожки нулевой поверхности жесткого дис-
ка.
      5. Запустить программу ADM, на вопрос :  "WARNING: data
on drive 0 will be erased, continue [Y/N]  ?"  ответить  "Y".
При этом ADM инициализирует только  нулевую  дорожку  нулевой
поверхности жесткого диска. Затем командой  "Create parition"
из меню Partition создать разделы с теми же  параметрами, что
были записаны Вами на шаге 3. Внимание: ни в коем  случае  не
инициализируйте созданные разделы !
      6. Из файла, сохраненного Вами на шаге  2,  при  помощи
программы DISKEDIT восстановите содержимое секторов со второ-
го по десятый. Впрочем, если паролей в системе не  много,  то
их можно ввести в программе ADM заново, а  не восстанавливать
сектора из файла. Затем исправьте значение  байта  по  адресу
12Ch во втором секторе на число, которое  вычисляется следую-
щим образом : каждый раздел в этом  числе  представлен  одним
битом, причем номер бита соответствует номеру  раздела.  Так,
например если в системе 5 разделов, то это число  будет иметь
двоичный код 00011111 или 1Fh в шестнадцатеричном  коде.  Это
исправление делается для того, чтобы ADM считал созданные Ва-
ми разделы инициализированными.




               Восстановление разрушенной MBR



      Не смотря на все средства защиты от вирусов,  им иногда
удается сделать свое черное дело, и от этого  страдает содер-
жимое MBR. Иногда MBR разрушается из-за  действий злонамерен-
ного или неопытного пользователя. И как  следствие разрушения
MBR все разделы жесткого диска  становятся  недоступными  для
пользователя. Но и в этом случае можно восстановить структуру
разделов на жестком диске.
      Для этого потребуется незараженная  загрузочная дискета
и программы ADM.EXE и DISKEDIT.EXE. Последовательность дейст-
вий следующая :
      1. Загрузиться с незараженной  загрузочной  дискеты.
      2. Запустить программу DISKEDIT.EXE и выбрать в качест-
ве объекта "Hard Disk 1". Затем выполнить  поиск  строки байт
"EBh 01h 90h 'ADM 1.00' 00h" (Заголовка раздела).  После того
как Вы найдете очередное вхождение этой строки,  запишите но-
мер цилиндра и и номер поверхности ее местонахождения  и про-
должите поиск до тех пор, не будет  найдено  заголовков  всех
разделов.  Учтите,  что  заголовок  раздела  может  находится
только в первом секторе цилиндра !
      3. Запустить программу ADM, на вопрос :  "WARNING: data
on drive 0 will be erased, continue [Y/N]  ?"  ответить  "Y".
При этом ADM инициализирует только  нулевую  дорожку  нулевой
поверхности жесткого диска. Затем командой  "Create parition"
из меню Partition создать разделы с теми же  параметрами, что
были записаны Вами на шаге 2. Внимание: ни в коем  случае  не
инициализируйте созданные разделы !
      4. Введите заново список паролей и затем исправьте зна-
чение байта по адресу 12Ch во втором секторе на  число, кото-
рое вычисляется следующим образом : каждый раздел в этом чис-
ле представлен одним битом, причем номер  бита  соответствует
номеру раздела. Так, например если в системе 5  разделов,  то
это число будет иметь двоичный код 00011111 или  1Fh  в шест-
надцатеричном коде. Это исправление делается для  того, чтобы
ADM считал созданные Вами разделы инициализированными.
