6 Восстановление файловой системы Анализ главной загрузочной записи MBR и таблицы разделов Исследование логических дисков Поиск с помощью программы File Find Поиск с помощью программы DISKEDIT Особенности файловой системы Microsoft Windows 95
6 Восстановление файловой системыКак правило, опасные вирусы полностью или частично разрушают файловую систему, после чего пользователи теряют доступ ко всем или только некоторым файлам, причем не только программным, но и к файлам данных. Именно такое воздействие вирусов наносит максимальный ущерб, так как файлы документов могут соедржать чрезвычайно ценную информацию, ущерб от потери которой может превышать стоимость компьютера во много раз. Поэтому когда вы приступаете к лечению компьютера, зараженного вирусами, или имеющего поврежденную файловую систему, в первую очередь необходимо выгрузить с его дисков все нужные вам файлы данных. Если в процессе лечения вы потеряете программные файлы, то скорее всего сможете их восстановить без особых проблем, воспользовавшись дистрибутивами или обратившись в фирму, где вы приобретали программы. Потеря же ваших данных невосполнима, и если вы регулярно не выполняете резервное копирование, последствия вирусной атаки могут быть очень неприятными. Как правило, антивирусные программы, такие как Doctor Web или Aidstest, вылечивают компьютер и автоматически восстанавливают поврежденную файловую систему. Однако бывают случаи, когда и эти программы оказываются бессильными. Например, вирус может уничтожить таблицу размещения файлов или элемент каталога, соответствующий файлу, при этом данные могут оставаться на диске и вы еще сможете их восстановить. Скажем сразу, что “ручное” восстановление файловой системы доступно только опытным пользователям. Если вы не знакомы в деталях со структурой файловой системы, для восстановления потерянных в результате вирусной атаки данных лучше всего обратиться к специалистам из компьютерной скорой помощи АО “ДиалогНаука”. В крайнем случае можно попробовать восстановить файловую систему такими средствами, как программа SCANDISK.EXE, входящей в комплект поставки современных версий MS-DOS, или программой Norton Disk Doctor. Однако результаты такого восстановления могут быть неудовлетворительными. В этой главе мы поможем опытным пользователям выполнить самые важные действия по проверке и восстановлению файловой системы MS-DOS с использованием различных программных средств, в первую очередь с использованием программы Norton Disk Editor. Эта программа позволяет просматривать и редактировать содержимое отдельных секторов диска и очень удобна для проведения восстановительных работ. Восстановление файловой системы необходимо начинать с проверки ее состояния. Именно об этом мы и будем говорить в этой главе. Проверка файловой системыПред тем как начинать восстановление файловой системы, необходимо определить масштаб повреждений. Для этого вы должны тщательно проверить содержимое всех структур данных файловой системы. С чего лучше начинать проверку файловой системы? Прежде всего следует проверить установку параметров BIOS, среди которых есть такие ключевые параметры, как типы установленных в компьютере жестких дисков, количество дорожек и секторов на одной дорожке. Если эти параметры установлены неправильно, загрузка операционной системы скорее всего будет невозможна. Далее необходимо проверить содержимое так называемой главной загрузочной записи MBR (Master Boot Record). В этой записи есть программа начальной загрузки и таблица разделов диска Partition Table. Программа начальной загрузки является объектом атаки загрузочных и файлово-загрузочных вирусов, которые записывают сюда свое тело. При повреждении таблицы разделов диска некоторые или все логические диски будут недоступны для DOS. На следующем этапе вы должны проверить загрузочную запись Boot Record, которая располагается в самом начале логического диска (не путайте ее с главной загрузочной записью MBR). В загрузочной записи располагается программа начальной загрузки операционной системы, расположенной на логическом диске, а также блок параметров BIOS, который называется BPB (BIOS Parameter Block). Блок BPB содержит важную информацию о логическом диске, такую, например, как размер кластера. Вирус может записать свое тело на место загрузочной записи и повредить блок BPB. 3nop Очень опасный загрузочный вирус. Заражает главную загрузочную запись MBR на жестком диске и загрузочную запись дискет. Если первый байт на загрузочном секторе имеет значение 0E9h, то вирус записывает на место загрузочной программы свой код, способный заразить главную загрузочную запись MBR жесткого диска и загрузочные секторы дискет После выполнения проверки загрузочной записи следует заняться таблицей размещения файлов FAT. В этой таблице находится критически важная информация о расположении отдельных кластеров для всех записанных на данном логическом диске файлов. На диске находится две копии таблицы FAT. Вы можете использовать вторую копию FAT для восстановления. На следующем этапе нужно проверить корневые каталоги логических дисков, а также все нужные вам вложенные каталоги. При необходимости вы должны восстановить испорченные элементы каталогов, описывающие нужные вам файлы. Ниже мы подробно рассмотрим все эти действия. Попутно мы приведем всю необходимую информацию о важнейших структурах данных файловой системы. Проверка параметров BIOSКогда вы первый раз подходите к компьютеру, возможно зараженному вирусом, необходимо вначале проверить параметры BIOS, которые хранятся в CMOS. Для просмотра и изменения параметров BIOS предназначена специальная программа, которая называется BIOS Setup. Способ запуска программы BIOS Setup зависит от ее изготовителя и версии, однако обычно запуск выполняется, если во время начального теста оперативной памяти нажать клавиши <Delete>, <F2> или комбинацию клавиш <Alt+Ctrl+Esc>. Более точную информацию вы можете получить из документации, которая прилагается к системной плате компьютера. Выключите питание компьютера, если оно было включено, и через 20-30 секунд включите его опять. Такая процедура гарантированно “убивает” резидентные вирусы, “выживающие” после теплой перезагрузки с помощью комбинации клавиш <Ctrl+Alt+Del>. Когда начнется тест памяти, нажмите одну из перечисленных выше клавиш для запуска программы BIOS Setup. Через некоторое время на экране появится окно программы BIOS Setup, внешний вид которого зависит от изготовителя и версии программы. На рис. 6.1 мы показали внешний вид такого окна для программы BIOS Setup, созданной фирмой AMI.
Рис. 6.1. Окно программы BIOS Setup, созданной фирмой AMI Прежде всего вам нужно выбрать в меню программы строку STANDARD CMOS SETUP и проверить установку стандартных параметров BIOS. Обратите особое внимание на типы и параметры установленных жестких дисков (Hard disk), типы накопителей на гибких магнитных дисках (Floppy Drive) и дату. Примерный вид таблицы, в которой отображаются стандартные параметры, показан на рис. 6.2.
Рис. 6.2. Просмотра стандартных параметров BIOS Перепишите параметры жестких дисков, такие как тип, количество цилиндров, головок и секторов на одной дорожке. Сравните эти значения с паспортными данными, взятыми из документации на жесткий диск. Вирусы могут уменьшать количество дорожек, записывая свое тело в конец диска. Поэтому если значения не совпадают с паспортными, это выглядит очень подозрительно. Напомним, что тип диска представляет собой число, которое обычно лежит в диапазоне значений от 1 до 47. При этом типам от 1 до 46 соответствуют стандартные наборы параметров. Как правило, для современных устройств IDE указывается тип 47, который позволяет выполнять ручную установку количества цилиндров, головок и секторов на одной дорожке, а также других. Если в параметрах BIOS установлен 47 тип диска, обязательно проверьте параметры по документации, которая поставляется вместе с диском. В некоторых случаях может быть указан тип диска с номером 1, хотя в компьютере установлен жесткий диск очень большого размера (типу 1 соответсвует размер диска 10 Мбайт). Это означает, что диск полключен через контроллер, имеющий собственные программы обслуживания в постоянном запоминающем устройстве (ПЗУ). Иногда оба диска отмечены в параметрах BIOS как Not Installed, однако компьютер нормально работает и операционная система загружается с диска C: (примером может служить портативный компьютер B-300 фирмы Bondwell). В этом случае контроллер диска также имеет собственные программы обслуживания. Vlad Неопасный загрузочный вирус. Записывает свой код в перепрограммируемое ПЗУ Flash BIOS, если оно имеется в компьютере. Если операционная система не загружается с жесткого диска, прежде всего следует проверить параметры BIOS. Эти параметры могут быть установлены неправильно в результате разряда аккумуляторной батареи, расположенной на основной плате компьтера или в результате вирусной атаки. Обратите также внимание на тип накопителя на гибких магнитных дисках (НГМД). Если НГМД с обозначением A: отмечен как Not Installed, вы не сможете загрузить операционную систему с чистой дискеты, свободной от вирусов. Некоторые вирусы специально отключают устройство A: для того чтобы затруднить процедуру лечения. Когда какая-нибудь программа обращается к устройству A:, вирус перехватывает такое обращение и временно подключает устройство, а затем, после выполнения операции, подключает его снова. Смысл такой процедуры заключается в том, что при отключенном устройстве A: операционная система загружается с диска C: (к счастью, это верно не для всех компьютеров). При этом вирус получает управление первым и контролирует загрузку операционной системы с чистой дискеты. SMEG.Pathogen.3732 Очень опасный полиморфный вирус, использующий довольно сложный алгоритм шифровки. В понедельник может записать в байт CMOS с номером 10h значение 0 (тип используемых НГМД). Это означает, что устройства НГМД не установлены. После этого вирус корректирует контрольную сумму CMOS (ячейки 2Eh-2Fh), чтобы при инициализации системы BIOS "не заподозрил" неладное. После данных манипуляций компьютер "не видит" устройства НГМД. Также при определенных условиях в понедельник в 11 часов вирус может вывести на экран следующий текст:
Your hard-disk is being corrupted, courtesy of PATHOGEN! Programmed in the U.K. (Yes, NOT Bulgaria!) [C] The Black Baron 1993-4. Featuring SMEG v0.1: Simulated Metamorphic Encryption Generator! 'Smoke me a kipper, I'll be back for breakfast.....' Unfortunately some of your data won't!!!!!
После этого вирус перехватывает обработчик прерывания от клавиатуры INT 09h и уничтожает информацию в случайных секторах первого жесткого диска. Если в этот момент не перегрузить компьютер кнопкой "RESET" или не выключить питание, то содержимое диска может быть полностью уничтожено (комбинация клавиш <Ctrl+Alt+Del> не поможет) В завершении процедуры проверки параметров BIOS выберите из главного меню программы BIOS Setup строку ADVANCED CMOS SETUP. На экране появится меню настройки расширенных параметров BIOS (рис. 6.3).
Рис. 6.3. Меню настройки расширенных параметров BIOS В этом меню обратите внимание на строку System Boot Up Sequence, в которой определяется порядок загрузки операционной системы. Если в этой строке указан порядок загрузки C:, A:, вы не сможете загрузить операционную систему с дискеты. Так как для поиска вирусов вы обязательно должны загрузить DOS с чистой дискеты, измените порядок загрузки на A:, C:. После завершения всех работ с компьютером верните установку C:, A: или C: Only (если такое значение есть в данной версии BIOS). В этом случае компьютер будет надежно защищен от заражения загрузочным вирусом через накопитель на гибких магнитных дисках. Перед тем как перейти к следующему этапу анализа состояния файловой системы компьютера, убедитесь в том, что в стандартных параметрах BIOS установлен правильный тип диска, что НГМД с обозначением A: подключен и его тип также указан правильно. Кроме этого, в расширенных параметрах BIOS установите порядок загрузки A:, C:. В некоторых случаях содержимое памяти CMOS разрушается. Это может произойти, например, при выходе из строя аккумуляторной батареи, которая питает память CMOS, или в результате воздействия вируса. Если это произошло, вы должны восстановить параметры BIOS, воспользовавшись для этого программой BIOS Setup. Как правило, эта программа предоставляет вам возможность установить параметры BIOS, принятые по умолчанию. Программа BIOS Setup, созданная фирмой AMI, позволяет вам загрузить два набора параметров BIOS. Первый из них загружается при выборе в главном меню программы (рис. 6.1) строки AUTO CONFIGURATION WITH BIOS DEFAULTS. Этот набор параметров предназначен для нормальной работы системной платы и может быть оптимизирован вручную (при помощи строки ADVANCED CMOS SETUP). Второй набор параметров соответствует строке AUTO CONFIGURATION WITH POWER-ON DEFAULTS и используется главным образом в тех случаях, когда с первым набором компьютер не запускается. Во втором наборе устанавливаются более консервативные параметры (например, отключается кэширование основной оперативной памяти), что иногда позволяет запустить даже частично неисправный компьютер. Анализ главной загрузочной записи MBR и таблицы разделовКогда программа FDISK.EXE впервые создает разделы на жестком диске, она записывает в начало самого первого сектора жесткого диска (сектор 1, дорожка 0, головка 0) главную загрузочную запись MBR. Главная загрузочная запись является программой, которая во время начальной загрузки операционной системы с жесткого диска помещается по адресу 7C00h:0000h, после чего ей передается управление. Загрузочная запись продолжает процесс загрузки операционной системы. Заметим, что указанный механизм работает и в том случае, если на диске компьютера вместо DOS установлена какая-нибудь другая операционная система, например, Microsoft Windows 95, Microsoft Windows NT, IBM OS/2 Warp или UNIX. Если вирус заражает главную загрузочную запись, он получает управление до загрузки операционной системы и может противодействовать даже самым современным антивирусным средствам, применяя стелс-технологию. Визуально отличить нормальный главный загрузочный сектор от зараженного бывает не всегда просто. Иногда вирус изменяет только несколько байт, в которых записан адрес загрузочного сектора операционной системы, оставляя программу загрузки нетронутой. Такие изменения можно обнаружить только дизассемблированием и последующим анализом восстановленного исходного текста программы загрузки. В некоторых случаях изменения настолько заметны, что их можно обнаружить “невооруженным глазом”, просто взглянув на дамп самого первого сектора диска. BootCom.Peanut.445 Опасный резидентный вирус с элементами стелс-технологии. Заражает главную загрузочную запись MBR жесткого диска, загрузочные секторы дискет, а также COM-файлы в момент их запуска. Если запустить инфицированный COM-файл или загрузить операционную систему с зараженной дискеты, вирус поражает главную загрузочную запись диска. При загрузке с инфицированного жесткого диска вирус размещает свою резидентную копию в верхних адресах памяти и перехватывает прерывание INT 13h. После запуска первой EXE-программы вирус перехватывает прерывание INT 21h. Вирус не сохраняет оригинальный загрузочный сектор дискеты. Когда программа или операционная система пытается прочитать содержимое главного загрузочного сектора MBR с помощью прерывания INT 21h, вирус подставляет на место зараженного оригинальный сектор MBR Другая важнейшая часть первого сектора диска - таблица разделов диска Partition Table. В ней имеется четыре элемента, которые описывают до четырех разделов диска. В последних двух байтах сектора находится значение 55AAh. Это признак таблицы разделов (сигнатура таблицы разделов). В разделах диска располагаются логические диски. Обычно создается один первичный раздел для диска C: и один вторичный раздел, в котором создаются логические диски D:, E: и т. д. Описание формата таблицы разделовФормат самого первого сектора жесткого диска можно представить следующим образом:
Как видно из этой таблицы, байты со смещением от 0 до 1BEh (шестнадцатиричное значение) занимает главная загрузочная запись, то есть программа. Далее идут четыре элемента талицы разделов, причем каждый элемент занимает 10h байт. После таблицы располагаются два байта признака таблицы разделов. В элементе таблицы раздела записана информация о расположении и размере раздела в секторах, а также о назначении раздела. Формат элемента таблицы раздела представлен ниже:
Первый байт элемента таблицы раздела содержит признак активного раздела. Если раздел активный, из него будет выполняться загрузка операционной системы. Диск может содержать одновременно несколько активных разделов, которые могут принадлежать разным операционным системам. Следующие три байта определяют физический адрес на диске начального сектора раздела (который описывает данный элемент раздела). В байте со смещением 1 записан номер головки начального сектора раздела. В двухбайтовом поле со смещением 2 закодированы номера сектора и дорожки самого первого сектора раздела. При этом биты 0…5 этого поля задают номер сектора, а биты 6…15 - номер дорожки (рис. 6.4).
Рис. 6.4. Формат слова, содержащего номер сектора и номер дорожки Байт со смещением 4 содержит код операционной системы, создавшей раздел. Операционная система MS-DOS отмечает первичный раздел кодом 1 или 4, расширенный - кодом 5. Для разделов, созданных другими операционными системами, в этом поле будут находиться другие значения. В байте со смещением 5 и двухбайтовом слове со смещением 6 записаны номер головки, сектора и дорожки последнего раздела. Номер сектора и дорожки хранится в формате, показанном на рис. 6.4. Последние два поля элемента таблицы разделов имеют длину 4 байта и содержат, соответственно, относительный номер самого первого сектора в разделе (т. е. относительный номер сектора начала раздела) и количество секторов, имеющихся в разделе. Остановимся подробнее на относительном номере самого первого сектора в разделе. Значение относительного номера, равное 0, соответствует дорожке 0, головке 0, сектору 1. При увеличении относительного номера сектора вначале увеличивается номер сектора на дорожке, затем номер головки, и, наконец, номер дорожки. Зная номер дорожки, номер сектора на дорожке и номер головки, можно вычислить относительный номер сектора по следующей формуле: RelSect = (Cyl * Sect * Head) + (Head * Sect) + (Sect - 1) Здесь Cyl обозначает номер дорожки, Sect - номер сектора на дорожке, Head - номер головки. Обычно разделы диска начинаются с четных номеров дорожек, за исключением самого первого раздела. Этот раздел может начинаться с сектора 2 нулевой дорожки (головка 0), так как самый первый сектор диска занят главной загрузочной записью. Для наглядности мы воспроизвели из 19 тома нашей серии книг “Библиотека системного программиста” пример схемы разеделения жесткого диска на разделы (рис. 6.5).
Рис. 6.5. Пример разделения диска на разделы Как вы знаете, для создания первичного и расширенного разделов диска используется программа FDISK.EXE, входящая в состав дистрибутива MS-DOS. Первичный раздел должен быть единственным и активным, он используется как диск С: и из него выполняется загрузка операционной системы. В расширенном разделе программа FDISK.EXE создает логические диски D:, E: и т. д. Расширенный раздел не может быть активным, следовательно, из логических дисков, расположенных в этом разделе, невозможно выполнить загрузку операционной системы. Если байт кода операционной системы системы имеет значение 5, то в начале соответствующего раздела располагается сектор, содержащий таблицу логических дисков. Эта таблица является расширением таблицы разделов диска, расположенной в самом первом секторе физического диска. Таблица логических дисков имеет формат, аналогичный таблице разделов диска, но содержит только два элемента. Один из них указывает на первый сектор логического диска MS-DOS, он имеет код системы 1 или 4. Второй элемент может иметь код системы 5 или 0. Если этот код равен 5, то элемент указывает на следующую таблицу логических дисков. Если код системы равен 0, то соответствующий элемент не используется. Таким образом, таблицы логических дисков связаны в список. Элемент таблицы разделов диска с кодом системы, равным 5, указывает на начало этого списка. Для таблицы логических дисков имеется отличие в использовании полей границ логических дисков. Если код системы равен 1 или 4, эти границы вычисляются относительно начала расширенного раздела. Для элемента с кодом системы 5 используется абсолютная адресация (относительно физического начала диска). Проверка таблицы разделов при помощи программы DISKEDIT.EXEНаиболее удобное, на наш взгляд, средство анализа логических структур файловой системы - редактор диска DISKEDIT.EXE, который входит в пакет Norton Utilities. Лучше всего записать эту программу на системную дискету, так как только при загрузке с такой дискеты вы сможете исследовать файловую систему, зараженную вирусами или разрушенную файловую систему, когда DOS не загружается с жесткого диска. Меню Object предоставляет вам широкие возможности выбора структуры для просмотра (рис. 6.6).
Рис. 6.6. Меню Object программы DISKEDIT.EXE из пакета Norton Utilities Для начала выберите из этого меню строку Drive. Если на физическом жестком диске имеются исправные разделы с определенными в них логическими дисками, вы увидите список логических дисков, показанный на рис. 6.7.
Рис. 6.7. Просмотра списка логических дисков В данном случае для просмотра доступны логические диски C: и D:, расположенные, соответственно, в основном и расширенном разделах. Если файловая система компьютера разрушена до такой степени, что невозможно выполнить загрузку операционной системы с диска C:, а при ее загрузке с устройства A: не видно ни одного логического диска, при выборе строки Drive вам будет показан список физических дисков (рис. 6.8).
Рис. 6.8. Просмотр списка физических дисков, установленных в компьютере Для просмотра самого первого сектора физического диска, содержащего главную загрузочную запись и таблицу разделов, выберите физический диск Hard Disk 1 и нажмите кнопку OK. После этого на экране появится содержимое искомого сектора в виде дампа (рис. 6.9).
Рис. 6.9. Просмотр содержимого первого сектора первого физического диска Сектор имеет размер 512 байт, поэтому на одном экране его содержимое не помещается. Вы можете нажать клавишу <PgDn> и посмотреть вторую часть сектора (рис. 6.10).
Рис. 6.10. Прсомотр второй части первого сектора На что здесь нужно обратить внимание? В начале сектора (рис. 6.9) находится главная загрузочная запись, которая, как мы уже говорили, является программой. При наличии достаточного опыта вы можете ее дизассемблировать и исследовать. В любом случае следует проверить ее длину (программа загрузки не очень большая). После программы загрузки до начала таблицы разделов должны располагаться нулевые байты. Кроме того, внутри программы загрузки должны быть сообщения Invalid Partition table, Error loading operating system и Missing operating system. Несмотря на то что существуют загрузочные вирусы, лишь слегка изменяющие главную загрузочную запись, во многих случаях вы сможете заметить следы нападения, просто взглянув на дамп первого сектора жесткого диска и сравнив его визуально с изображенным на рис. 6.9. Особенно подозрительно, если помимо перечисленных выше текстовых сообщений в теле программы загрузки присутствуют какие-либо еще сообщения. Что же касается второй части самого первого сектора жесткого диска, в ней должна находиться таблица разделов диска. Последние два байта должны содержать признак таблицы разделов (сигнатуру) - значение 0AA55h. Обратите внимание, что байты сигнатуры привдедны в обратном порядке - байт с младшим значением находится по младшему адресу. Это особенность архитектуры процессоров фирмы Intel. Вы можете выполнить анализ таблицы разделов диска, пользуясь приведенной выше информацией о ее формате. Напомним, что таблица располагается в первом секторе диска со смещением 1BEh. Однако намного удобнее воспользоваться для анализа этой таблицы форматным просмотром редактора DISKEDIT.EXE. Установите курсор (мышью или клавишами перемещения курсора) на байт со смещением 1BEh, который соответствует началу таблицы разделов. Затем из меню View выберите строку as Partition Table (рис. 6.11).
Рис. 6.11. Меню View программы DISKEDIT.EXE из пакета Norton Utilities На экране появится таблица разделов диска в отформатированном виде (рис. 6.12).
Рис. 6.12. Просмотр таблицы разделов диска в отформатированном виде В столбце System отображается информация об операционной системе, которая строится на основе анализа поля кода операционной системы элемента раздела. Если раздел активен, в столбце Boot для него указана строка Yes, если нет - строка No. Столбцы Starting Location и Ending Location в полях Side, Cylinder и Sector, содержат в расшифрованном виде информацию, соответственно, о расположении самого первого и самого последнего секторов раздела. Номер относительного сектора, с которого начинается раздел, вы можете узнать из столбца Relative Sectors, а общее количество секторов - в столбце Number of Sectors. Полученную информацию о границах разделов имеет смысл сравнить с параметрами жесткого диска, полученными с помощью программы BIOS Setup, так как вирусы могут прятать свое тело в секторах диска, которые находятся в конце диска и не распределены ни одному разделу. Однако при этом следует учитывать, что современные дисковые контроллеры способны выполнять так называемую трансляцию дорожек и головок, которая может исказить полученную картину. Поясним сказанное на примере. В одном из наших компьютеров установлен диск, имеющий 1057 дорожек и 16 головок. На каждой дорожке расположено 63 сектора размером 512 байт. При этом общий объем диска составляет 520 Мбайт. Именно эти параметры нам сообщила программа BIOS Setup. Программа FDISK.EXE определила, что на диске имеется два раздела, размером 300 и 219 Мбайт, а диск используется на 100 процентов (рис. 6.13).
Рис. 6.13. Просмотр параметров разделов диска программой FDISK.EXE В то же время, как видно из рис. 6.12, программа DISKEDIT.EXE для этого диска показывает, что последний сектор последнего раздела расположен на дорожке с номером 526. На первый взгляд, тут что-то не так: программа BIOS Setup сообщает нам, что на диске имеется 1057 дорожек и 16 головок, а в таблице разделов для последнего сектора последнего раздела мы видим совсем другие значения: этот сектор расположен на 526 дорожке, а номер головки равен 31! Причина такого несоответствия заключается в том, что наш контроллер типа Enchanced IDE (другое название - Fast ATA), расположенный непосредственно на основной плате компьютера, выполняет трансляцию дорожек и головок, предоставляя программам диск, в котором по сравнению с действительным состоянием меньше дорожек, но больше головок. Зачем это нужно? Из-за внутренних ограничений операционная система DOS не может работать с дорожками, номер которых превышает значение 1023. Однако современные дисковые накопители обладают значительной емкостью (порядка 1 - 4 Гбайт и даже больше), поэтому в них приходится делать очень много дорожек. Другие операционные системы, такие как IBM OS/2, Microsoft Windows NT, UNIX или Novell NetWare, не имеют ограничений на количество адресуемых дорожек диска. Что же касается DOS, то без дополнительных мер максимальный размер раздела диска не будет превышать примерно 500 Мбайт. Логическая трансляция, выполняемая контроллером диска, позволяет операционной системе DOS работать с разделами очень большого размера, поэтому вы можете с ней столкнуться при исследовании большинства современных компьютеров. Сохранение параметров диска и таблицы разделов дискаПрежде чем продолжить исследование файловой системы, мы настоятельно рекомендуем вам записать параметры диска, определенные с помощью программы BIOS Setup, и содержимое таблицы разделов диска. Просто перепишите полученные значения на лист бумаги. Если в ходе ремонта вы случайно разрушите область данных BIOS или главный загрузочный сектор, вы сможете легко восстановить критичные данные. Исследование расширенного раздела дискаЕсли на диске создан только первичный раздел, можно переходить к анализу логического диска C: (соответствующая процедура будет описана ниже). Если же есть расширенный раздел, необходимо проверить сектор таблицы логических дисков. Это самый первый сектор в расширенном разделе (рис. 6.5). Давайте посмотрим на этот сектор. Запустите программу DISKEDIT.EXE, определите с ее помощью расположение расширенного раздела (дорожка, головка и номер сектора). Затем из меню Object выберите строку Physical Sector. На экране появится диалоговая панель Select physical sector range, с помощью которой можно выбрать для просмотра один или несколько секторов (рис. 6.14).
Рис. 6.14. Просмотр сектора по его физическому расположению на диске В нашем случае согласно рис. 6.12 первый сектор расширенного раздела рсполгается на 305 дорожке, головка 0, сектор 1. Укажите нужные значения и нажмите кнопку OK. Сектор таблицы логических дисков, в отличие от сектора главной загрузочной записи, практически пуст (рис. 6.15).
Рис. 6.15. Просмотр сектора таблицы логических дисков Все байты в нем от начала и до смещения 1BDh включительно должны содержать нулевой значение. Далее со смещения 1BEh располагается таблица логических дисков, состоящая из двух элементов. В конце сектора располагается уже знакомая вам сигнатура - значение 0AA55h. Формат элементов полностью аналогичен формату элементов таблицы разделов, поэтому вы можете использовать форматный просмотр (рис. 6.16). Для этого установите курсор на байт со смещением 1BEh и затем из меню View выберите строку as Partition Table.
Рис. 6.16. Форматный просмотр таблицы логических дисков Первая строка таблицы логических дисков описывает логический диск D:, вторая содержит нулевые значения. Если бы в расширенном разделе были созданы несколько логических дисков, второй элемент таблицы таблицы логических дисков указывал на следующий сектор таблицы логических дисков, расположенный непосредственно перед логическим диском E:. Последняя в списке таблица логических дисков всегда состоит из одной строки, которая описывает последний логический диск. Сохранение содержимого таблиц логических дисковНа том же листе бумаги, где вы записывали параметры диска и сведения из таблицы разделов диска, запишите информацию о всех логических дисках, полученную из таблиц логических дисков. Если содержимое таблиц логических дисков будет случайно разрушено, вы потеряете доступ к логическим дискам. Исследование логических дисковФормат логических дисков, расположенных в разделах жесткого диска, полностью идентичен формату дискет, поэтому многое из того, о чем вы узнаете в этом разделе, будет справедливо и для дискет. Схематически структура логического диска (или дискеты) изображена на рис. 6.17.
Рис. 6.17. Структура логического диска В самом начале логического диска располагается сектор загрузочной записи Boot Record (не путайте его с сектором главной загрузочной записи, который является самым первым на физическом диске), а также, возможно, зарезервированные секторы. Вслед за этим сектором находятся две копии таблицы размещения файлов (о которой мы еще будем говорить) и корневой каталог. Область данных, занимающая оставшуюся часть логического диска, содержит файлы и остальные каталоги. Проверка загрузочного сектораАдрес загрузочного сектора логического диска нетрудно найти в таблице логических дисков (рис. 6.16). В загрузочном секторе логического диска находится программа начальной загрузки операционной системы. Эта программа загружается в оперативную память загрузчиком, расположенным в главной загрузочной записи MBR. Назначение программы, расположенной в загрузочном секторе логического диска - загрузка операционной системы, находящейся на этом логическом диске. Таким образом, при включении питания после выполнения процедуры тестирования BIOS загружает в оперативную память содержимое главной загрузочной записи и передает ей управление. Главная загрузочная запись просматривает таблицу разделов диска и находит активный раздел. Затем она считывает загрузочный сектор логического диска, расположенного в активном разделе, и передает управление находящейся в этом секторе программе загрузки операционной системы. Эта программа, в свою очередь, выполняет всю работу по загрузке операционной системы в память компьютера. Программа начальной загрузки операционной системы, расположенная в загрузочной записи, является излюбленным объектом нападения загрузочных и файлово-загрузочных вирусов, записывающих в нее свое тело (точно также, как и программа загрузки, расположенная в главной загрузочной записи MBR). Формат загрузочного сектора зависит от операционной системы и даже от версии операционной системы. Мы рассмотрим формат этого сектора для версий MS-DOS, более ранних, чем 4.0, и для современных версий, таких как 6.22. Tchechen.1909, 1912, 1914, 3604 Очень опасные резидентные шифрованные вирусы (вирус Tchechen.3604 - полиморфный). При старте вирусы данной группы (кроме вируса Tchechen.3604) считывают второй сектор жесткого диска и записывают в него слово "МИР:" и число 4, которое будет являться счетчиком запусков инфицированных программ. Потом вирусы пытаются найти в ПЗУ BIOS текстовые строки Megatrends, AWARD. Если это им удается, то вирусы выключают в CMOS-памяти параметр Virus Warning on Boot (контроль записи в загрузочный сектор). Но следует отметить, что при поиске этих двух слов вирусы никогда не смогут найти слово AWARD. При достижении счетчиком во втором секторе нулевого значения вирусы заменяют слово "МИР:" и помещают в главную загрузочную запись MBR жесткого диска "троянский" код. Этот код при загрузке операционной системы самостоятельно передает управление активному загрузочному сектору жестого диска, но примерно через месяц (10 дней для вируса Tchechen.3604) после записи данного кода в MBR уничтожает содержимое всего первого жесткого диска. После чего автором вируса планировался вывод на экран текста, который мы здесь не приводим. Вирус Tchechen.3604 не заражает программы, имя которых начинается с символов WE, AD, AI, CO, DR, AV, TB, CH. Вирусы Tchechen.1914, 3604 неработоспособны на процессоре Pentium Для любой версии MS-DOS помимо программы начальной загрузки операционной системы загрузочная запись содержит параметры, описывающие характеристики данного логического диска. Все эти параметры располагаются в самом начале сектора, в его так называемой форматированной области. Последние два байта загрузочного сектора содержат уже знакомую вам сигнатуру 0AA55h. Перед исследованием загрузочной записи вы должны при помощи команды VER определить версию операционной системы MS-DOS, установленной в компьютере. Для версий MS-DOS, более ранних чем 4.0, формат загрузочной записи приведен ниже:
В самом начале загрузочного сектора располагается команда внутрисегментного перехода JMP. Она нужна для обхода форматированной зоны сектора и передачи управления загрузочной программе, располагающейся со смещением 1Eh. Название фирмы-изготовителя не используется операционной системой и представляет из себя текстовую строку длиной 8 байт. Со смещением 0Bh располагается блок параметров BIOS, который обычно обозначается как BPB. Этот блок содержит некоторые характеристики логического диска, такие как количество секторов в одном кластере, общее количество секторов и т. д. Формат блока BPB будет описан позже. Поля загрузочного сектора со смещениями 18h и 1Ah содержат, соответственно, количество секторов на дорожке и количество головок. Поле со смещением 1Ch содержит количество "скрытых" секторов, которые не принадлежат ни одному логическому диску. Эти секторы могут содержать таблицу разделов диска или таблицы логических дисков. Для современных версий MS-DOS загрузочный сектор имеет другой формат:
Первые два поля имеют то же назначение, что и в загрузочной записи старых версий MS-DOS. Поле со смещением 26h содержит символ ')'. Этот символ означает, что используется формат расширенной загрузочной записи и, соответственно, расширенный блок параметров BIOS Extended BPB. Серийный номер диска формируется во время форматирования диска на основе даты и времени форматирования. Поэтому можно считать, что все диски и дискеты имеют разные серийные номера. Метка диска формируется при форматировании и может быть изменена командой LABEL операционной системы MS-DOS. Одновременно метка диска помещается в корневой каталог в виде специального дескриптора. О формате каталогов и дескрипторов, а также о формате таблицы размещения файлов FAT мы расскажем позже. Теперь о блоке параметров BIOS BPB и расширенном блоке параметров BIOS Extended BPB. Для версий MS-DOS, более ранних чем 4.0, блок BPB имеет следующий формат:
Расширенный блок параметров BIOS состоит из обычного блока BPB и дополнительного расширения:
Байт-описатель среды может содержать следующие значения, характеризующие носитель данных:
В этой таблице мы привели данные для дискет и жесткого диска. Для форматного просмотра блока параметов BPB (или расширенного блока параметров Extended BPB, в зависимости от версии MS-DOS) удобно использовать программу DISKEDIT.EXE. При этом вы можете найти загрузочную запись двумя способами. Во-первых, можно выбрать из меню Object строку Boot Record (выбрав предварительно нужный логический диск при помощи строки Drive того же меню). При этом вы сразу же окажитесь в режиме форматного просмотра блока параметров BIOS выбранного вами диска (рис. 6.18).
Рис. 6.18. Режим форматного просмотра загрузочной записи Во-вторых, если логические диски недоступны, но вам удалось считать таблицу разделов или таблицу логических дисков, вы можете перейти к просмотру загрузочной записи, указав ее физический адрес. Для этого из меню Object надо выбрать строку Physical Address (как это было описано раньше). На экране появится дамп первой части загрузочного сектора (рис. 6.19).
Рис. 6.19. Первая часть дампа загрузочной записи Нажав клавишу <PgDn>, вы можете перейти к просмотру второй части загрузочного сектора (рис. 6.20).
Рис. 6.20 Вторая часть дампа загрузочной записи При помощи строк as Boot Record и as Hex меню View вы можете перейти, соответственно, к форматному и неформатному режиму просмотра загрузочного сектора. Формирование загрузочной записи и блока параметров BIOS происходит при форматировании логического диска (например, командой FORMAT). Если с помощью программы FDISK удалить логический диск, а потом создать на его месте новый такого же размера, блок BPB окажется разрушенным. При этом вам придется отформатировать логический диск заново. Блок параметров BIOS содержит критичную информацию, при разрушении которой становится невозможным нормальный доступ к файлам и каталогам, расположенным на логическом диске. Неосторожное обращение с загрузочным сектором жесткого диска может привести к необходимости переформатирования соответствующего логического диска с полной потерей хранившихся там данных. Детальный анализ изменений, внесенных вирусом в загрузочную запись, предполагает дизассемблирование загрузочной записи и потому доступно только опытным программистам. Тем не менее можно проверить параметры, записанные в блоке BPB и выполнить визуальную проверку загрузочной программы. В теле этой программы не должно быть, например, никаких посторонних текстовых строк. Перед тем как продолжить дальнейший анализ файловой системы, полезно сделать распечатку содержимого загрузочных секторов всех имеющихся логических дисков в форматном и неформатном виде, так как блок параметров BIOS содержит сведения, необходимые для поиска и анализа других логических структур файловой системы. Для распечатки выберите из меню Tools строку Print Object as и в появившейся на экране диалоговой панели выберите строку Boot Record (рис. 6.21). Затем нажмите кнопку OK.
Рис. 6.21. Форматная печать содержимого загрузочного сектора Аналогичным образом вы можете распечатать содержимое других логических структур файловой системы, например, содержимое таблицы разделов диска. Анализ зарезервированных секторовМежду загрузочным сектором и таблицей размещения файлов FAT могут находиться зарезервированные секторы, которые являются служебными для файловой системы или не используются. Количество секторов, зарезервированных на логическом диске, можно узнать из блока параметров BIOS (BPB или Extended BPB, в зависимости от версии операционной системы MS-DOS). Искомое значение находится в поле этого блока со смещением 3. При форматном просмотре количество зарезервированных секторов указано в строке Reserved sectors at beginning (рис. 6.18). Если зарезервирован только один сектор, то первая копия таблицы размещения файлов FAT располагается сразу вслед за загрузочным сектором. Именно загрузочный сектор в данном случае является зарезервированным. Когда зарезервировано несколько секторов, между загрузочным сектором и первой копией таблицы FAT может находиться еще несколько секторов, содержащих нулевые значения. В этих секторах может быть спрятано тело вируса или копия оригинальной загрузочной записи, замещенной вирусом. Таблицы размещения файлов FATОперационная система MS-DOS объединяет отдельные секторы диска в так называемые кластеры. При создании новых каталогов и непустых файлов для них выделяется один или несколько кластеров. Если размер файла увеличивается, для него выделяются дополнительные кластеры. Размер кластера в секторах (т. е. количество секторов в одном кластере) вы можете узнать из поля блока параметров BIOS BPB со смещением 2. При форматном просмотре содержимого загрузочного сектора размер кластера отображается в строке Sectors per cluster (рис. 6.18). Для экономии дискового пространства файлам и каталогам распределяются кластеры, которые не обязательно расположены рядом. Таким образом, отдельные кластеры, принадлежащие одному и тому же файлу, могут находиться в разных местах логического диска. За такую экономию приходится платить производительностью, так как считывание фрагментированного файла связано с многочисленными перемещениями магнитных головок, а это самая медленная дисковая операция. Другая проблема, связанная с фрагментацией файлов, заключается в необходимости хранения списка кластеров, выделенных каждому файлу. Очевидно, для того чтобы прочитать файл, операционная система MS-DOS должна последовательно прочитать все кластеры, распределенные этому файлу. Где же хранятся списки кластеров? Эти списки хранятся в таблице размещения файлов FAT, к анализу которой мы скоро приступим. Таблицу размещения файлов можно представить себе как массив, содержащий информацию о кластерах. Размер этого массива определяется общим количеством кластеров на логическом диске. В элементах этого массива находятся списки кластеров, распределенных файлам. Элементы массива, соответствующие свободным кластерам, содержат нулевые значения. Если файл занимает несколько кластеров, то эти кластеры связаны в список. При этом элементы таблицы FAT содержат номера следующих используемых данным файлом кластеров. Конец списка отмечен в таблице специальным значением. Номер первого кластера, распределенного файлу, хранится в элементе каталога, описывающего данный файл. Таким образом, зная имя файла и каталог, в котором этот файл расположен, операционная система MS-DOS может определить номер первого кластера, распределенного файлу, а затем, проследив список кластеров по таблице FAT, определить и номер остальных кластеров, занятых этим файлом. Программа FORMAT.COM, предназначенная для форматирования диска и некоторые специальные программы аналогичного назначения проверяют логический диск на предмет наличия дефектных областей. Кластеры, которые находятся в этих дефектных областях, отмечаются в FAT как плохие и не используются операционной системой. Для примера на рис. 6.22 показаны упрощенные дескрипторы корневого каталога диска C:, в которых описаны файлы MYFILE1.DOC и MYLETTER.DOC, а также элементы таблицы размещения файлов FAT, выделенные для этих файлов.
Рис. 6.22. Пример распределения кластеров для файлов autoexec.bat и config.sys Файл MYFILE1.DOC занимает три кластера с номерами 11, 17 и 18, а файл MYLETTER.DOC - два кластера с номерами 12 и 13. В каталоге указаны номера первых кластеров, распределенных этим файлам (соответственно 11 и 12). Последние ячейки, которые соответствуют последним кластерам, распределенным файлам, содержат специальное значение - 0FFFFh (признак конца цепочки кластеров). Формат таблицы FATОстановимся подробнее на формате таблицы FAT. Таблица FAT может иметь 12- или 16-разрядный формат. При этом в таблице для хранения информации об одном кластере диска используется, соответственно, 12 или 16 бит. Первый из этих двух форматов (12-разрядный) применяется для дискет с небольшим количеством секторов. При этом вся таблица размещения файлов помещается в одном секторе. Если размер диска слишком большой, для представления всех кластеров двенадцати разрядов будет недостаточно. В этом случае используется 16-разрядный формат FAT. При этом операционная система MS-DOS может работать с диском, который имеет размер более 32 Мбайт. Поэтому для жестких дисков используется именно 16-разрядный формат таблицы FAT. Как узнать формат FAT? Проще всего прочитать его в текстовой строке, расположенной в загрузочном секторе со смещением 36h. При форматном отображении содержимого загрузочного сектора тип таблицы FAT отображается в строке File System ID (рис. 6.18). Кроме того, если разделы жесткого диска создавались программой FDISK.EXE, формат FAT можно определить, анализируя содержимое поля кода системы соответствующего элемента таблицы разделов, расположенной в главной загрузочной записи MBR. Если это поле содержит значение 1, используется 12-разрядный формат, если 4, то 16-разрядный. Первый элемент таблицы FAT имеет особый формат. Самый первый байт таблицы FAT называется "Описатель среды" (Media Descriptor). Он имеет такое же значение, как и байт-описатель среды, загрузочного сектора логического диска. Следующие 5 байт для 12-разрядного формата или 7 байт для 16-разрядного формата всегда содержат значение 0FFh. Вся остальная часть таблицы FAT состоит из 12- или 16-разрядных ячеек. Каждая ячейка соответствует одному кластеру диска. Эти ячейки для разных форматов таблицы FAT могут содержать следующие значения:
Просмотр таблицы FATДля просмотра таблицы размещения файлов FAT мы воспользуемся программой DISKEDIT.EXE. Из меню Object выберите строку Drive и укажите интересующий вас диск. Если файловая система находится в более или менее исправном состоянии, вы сможете выбрать нужный вам логический диск. Затем из меню Object выберите одну из двух строк - 1st FAT или 2nd FAT. На экране появится, соответственно, содержимое первой или второй копии таблицы FAT в отформатированном виде (рис. 6.23).
Рис. 6.23. Просмотр первой копии таблицы размещения FAT в отформатированном виде Вы также можете найти первую или вторую копию таблицы FAT, зная физический адрес загрузочной записи логического диска. Напомним, что загрузочная запись располагается в самом первом секторе дискеты. Расположение загрузочной записи для логических дисков, созданных в разделах жесткого диска, можно определить из таблицы разделов (для логического диска C:) или таблицы логических дисков (для логических дисков, созданных в расширенном разделе). BadSectors.3422, 3428 Опасные резидентные вирусы. Перехватывают прерывания INT 8h, INT 16h, INT 21h, INT 25h, INT 26h. Иногда отмечают кластеры диска как плохие посредством манипуляций с таблицами размещения файлов FAT. Не заражают антивирусную программу SCAN. Содержат текстовые строки: COMEXE SCAN BadSectors.3422: BadSectors 1.1 BadSectors.3428: BadSectors 1.2 Далее, в рамках логического диска существует своя последовательная нумерация секторов. При этом порядок нумерации выбран таким, что при последовательном увеличении номера сектора вначале увеличивается номер головки, затем номер дорожки. Поясним это на примере. Пусть, например, у нас есть дискета с девятью секторами на дорожке. Сектор с логическим номером, равным 1, расположен на нулевой дорожке и для обращения к нему используется нулевая головка. Это самый первый сектор на дорожке, он имеет номер 1. Следующий сектор на нулевой дорожке имеет логический номер 2, последний сектор на нулевой дорожке имеет логический номер 9. Сектор с логическим номером 10 расположен также на нулевой дорожке. Это тоже самый первый сектор на дорожке, но теперь для доступа к нему используется головка с номером 1. И так далее, по мере увеличения логического номера сектора изменяются номера головок и дорожек. Согласно такой нумерации, сектор с последовательным номером 0 - это загрузочный сектор. Для того чтобы просмотреть содержимое загрузочного сектора при помощи программы DISKEDIT.EXE, вы можете выбрать из меню Object строку Sector и в появившейся диалоговой панели указать номер сектора, равный нулю (рис. 6.24).
Рис. 6.24. Просмотр сектора логического диска по его последовательному номеру Заметьте, что в этой диалоговой панели в рамке, озаглавленной Sector Usage, показано распределение секторов. Пользуясь этим распределением, вы легко сможете определить последовательный номер сектора загрузочной записи, начало и границы обеих копий FAT, а также начало и границы корневого каталога и области данных, содержащих файлы и другие каталоги. С помощью меню View вы можете просмотреть содержимое таблицы FAT в виде дампа (рис. 6.25).
Рис. 6.25. Просмотр первой копии таблицы размещения файлов FAT в виде дампа Визуально таблица размещения файлов должна содержать в основном монотонно изменяющиеся последовательности номеров кластеров, нулевые занчения, соответствующие свободным кластерам, а также значение 0FFFFh, которое является признаком конца цепочки кластеров. Вслед за первой копией таблицы FAT должна находиться вторая копия FAT (рис. 6.26).
Рис. 6.26. Вторая копия таблицы FAT должна располагаться сразу вслед за первой копией этой таблицы Размер таблицы FAT вы можете определить, зная содержимое поля блока параметров BIOS BPB со смещением 0Bh (количество секторов, занимаемых одной копией FAT). Вирусы могут либо полностью разрушать таблицу FAT, либо изменять записанные в ней значения, зашифровывая их или просто уничтожая. Если цепочка кластеров для нужного вам файла разрушена частично или полностью, восстановление такого файла может стать непростой задачей. О том как выполнять такое восстановление, мы расскажем позже в этой главе. Некоторые вирусы пользуются тем фактом, что конец цепочки кластеров может отмечаться любым значением в диапазоне 0FFF8h - 0FFFFh (для 16-разрядной таблицы FAT). Операционная система MS-DOS использует значение 0FFFFh. Вирус может выделять для себя зараженные файлы (чтобы избежать повторного заражения), отмечая последний распределенный этим файлам кластер любым другим значением, например, 0FFF9h. При этом операционная система будет продолжать работать нормально, как будто ничего не произошло. Несмотря на то что вторая копия таблицы FAT создавалась как резервная для облегчения процедуры восстановления в случае разрушения первой копии, не стоит особенно надеяться на то, что в случае вирусной атаки вы сможете просто скопировать вторую копию FAT на место первой. Вторая копия FAT также может оказаться разрушенной или зашифрованной. Формат корневого каталогаНепосредственно после второй копии таблицы размещения файлов следует корневой каталог. Размер корневого каталога в секторах вы можете определить из блока параметров BIOS BPB. Поле со смещением 6 содержит максимальное количество дескрипторов файлов в корневом каталоге диска (этому полю соответствует строка Root directory entries при форматном просмотре содержимого загрузочного сектора программой DISKEDIT.EXE). Размер одного дескриптора составляет 32 байта, поэтому умножив максимальное количество дескрипторов на это число мы получим размер корневого каталога в байтах. Зная размер сектора (512 байт), нетрудно определить количество секторов, занимаемых корневым каталогом. Abs_4 Заражает загрузочный сектор. Старый сектор прячет на гибком диске в последнем секторе корневого каталога, а на жестком диске - в шестом секторе Теперь поговорим о дескрипторах файлов. Любой каталог (и корневой в том числе) содержит 32-байтовые элементы - дескрипторы, описывающие файлы и другие каталоги. Приведем формат дескриптора:
Обратите внимание на поле со смещением 1Ah. Это номер первого кластера, распределенного файлу или каталогу (если дескриптор описывает каталог более низкого уровня). Пользуясь этим значением, вы сможете проследить по таблице размещения файлов FAT всю цепочку кластеров, распределенных данному файлу или каталогу. Таким образом, у нас имеется способ отыскать начало цепочки кластеров для любого файла - нужно лишь найти соответствующий дескриптор. В любом каталоге, кроме корневого, два первых дескриптора имеют специальное назначение. Первый дескриптор содержит в поле имени строку: ". " Этот дескриптор указывает на содержащий его каталог. То есть каталог имеет ссылку сам на себя. Второй специальный дескриптор содержит в поле имени строку: ".. " Этот дескриптор указывает на каталог более высокого уровня. Если в поле номера первого занимаемого кластера для дескриптора с именем ".. " находится нулевое значение, это означает, что данный каталог содержится в корневом каталоге. В древовидной структуре каталогов имеются ссылки как в прямом, так и в обратном направлении. Эти ссылки можно использовать для проверки сохранности структуры каталогов файловой системы. Байт атрибутов является принадлежностью каждого файла. Биты байта атрибутов имеют следующие значения:
Обычно файлы имеют следующие атрибуты:
При удалении файла первый байт его имени заменяется на байт E5h (символ “х”). Все кластеры, распределенные удаленному файлу, отмечаются в таблице FAT как свободные. Если вы только что удалили файл, его еще можно восстановить, так как в дескрипторе сохранились все поля, кроме первого байта имени файла. Но если на диск записать новые файлы, то содержимое кластеров удаленного файла будет изменено и восстановление станет невозможным. Теперь о полях времени и даты. Формат поля времени показан на рис. 6.27.
Рис. 6.27. Формат поля времени Старшие пять бит содержат значение часа модификации файла, шесть бит с номерами 5 - 10 хранят значение минут модификации файла, и, наконец, в младших 5 битах находится значение секунд, деленное на 2. Для того, чтобы время обновления файла уместилось в шестнадцати битах, пришлось пойти на снижение точности времени до двух секунд. В подавляющем большинстве случаев такое снижение точности не играет никакой роли. Формат даты обновления файла напоминает формат времени и показан на рис. 6.28.
Рис. 6.28. Формат поля даты Для того чтобы получить значение года обновления файла, необходимо прибавить к величине, хранимой в старших семи битах, значение 1980. Некоторые вирусы используют поля времени и даты для отметки зараженных файлов. Такая отметка нужна для того чтобы избежать повторного заражения. Однако такой примитивный способ используется только простейшими вирусами. Поле длины в дескрипторе содержит точную длину файла в байтах. Для каталогов в поле длины записано нулевое значение. Когда вирус заражает файл, его длина, как правило, увеличивается. Тем не менее стелс-вирусы эффективно маскируют такое увеличение, поэтому его можно заметить только при загрузке операционной системы с чистой дискеты. Просмотр каталоговДля просмотра каталогов с целью проверки их структуры мы воспользуемся программой DISKEDIT.EXE. Запустите эту программу и из меню Object выберите строку Directory. На экране появится диалоговая панель Change Directory, показанная на рис. 6.29.
Рис. 6.29. Диалоговая панель Change Directory, предназначенная для выбора каталога В левой части диалоговой панели отображается дерево каталогов текущего диска. Выберите в нем корневой каталог C:\ и нажмите кнопку OK. После этого на экране появится содержимое корневого каталога в форматированном виде (рис. 6.30).
Рис. 6.30. Просмотр содержимого корневого каталога диска C: в форматированном виде Анализируя полученную информацию, вы можете обнаружить подозрительные изменения в полях размера файла, даты и времени. Кроме того, для каждого файла в столбце Cluster отображается номер распределенного ему первого кластера. С помощью меню View можно переключиться в режим неформатированного просмотра, когда содержимое каталога отображается в виде дампа (рис. 6.31).
Рис. 6.31. Просмотр содержимого корневого каталога диска C: в виде дампа Обратите внимание на меню Link. С помощью этого меню вы можете переходить к просмотру логически связанных между собой структур файловой системы (рис. 6.32).
Рис. 6.32. Меню Link позволяет просматривать логически связанные стркутуры файловой системы Выделите в корневом каталоге диска C: файл IO.SYS, как это показано на рис. 6.32, и затем выберите из меню Link строку Cluster chain (FAT). Вы окажитесь в режиме просмотра первой копии таблицы размещения файлов FAT, причем цепочка кластеров, выделенная файлу IO.SYS, будет выделена (рис. 6.33).
Рис. 6.33. Просмотр цепочки кластеров, выделенный файлу IO.SYS С помощью строки File меню Link вы можете перейти в режим просмотра содержимого файла IO.SYS (рис. 6.34).
Рис. 6.34. Просмотр содержимого файла IO.SYS в виде дампа Отметим, что во многих случаях можно выполнять переходы между логически связанными структурами данных двойным щелчком левой клавиши мыши по изображению этих структур, что очень удобно. Подробности вы найдете в документации к пакету Norton Utilities. На что следует обратить внимание при проверке структуры каталогов? Кроме визуальной проверки полей расположенных там дескрипторов следует просмотреть весь каталог до конца. Необходимо убедиться, что в каталоге отсутствуют посторонние данные, которые могут быть записаны туда вирусом. На рис. 6.35 вы видите удаленный файл с именем хONFIG.SYS (бывший CONFIG.SYS) и свободные элементы каталога, отмеченные строкой Unused directory entry.
Рис. 6.35. Удаленный файл и свободные элементы каталога Если перейти в режим неформатированного просмотра, то можно убедиться, что свободные элементы каталога содержат нулевые значения. Если же после свободных элементов находятся какие-либо данные, существует очень большая вероятность того, что они записаны туда вирусом или системой защиты программ от несанкционированного копирования (если исследуемый каталог содержит такие программы). Если каталог поврежден полностью или частично, ссылки на описанные в нем файлы будут потеряны. Если вы найдете тем или иным способом секторы, содержащие нужный вам файл, для которого разрушен дескриптор, пользуясь описанной ниже методикой вы сможете восстановить дескриптор и получить доступ к файлу. Область данныхВслед за корневым каталогом начинается область данных, которая простирается до конца логического диска (рис. 6.17). Область данных разбита на кластеры, причем нумерация кластеров начинается с числа 2. Кластеру с номером 2 соответствуют первые секторы области данных. Приведем формулу, которая связвает номер кластера с номерами секторов, занимаемых им на логическом диске: SectNumber = DataStart + ((ClustNumber - 2) * ClustSize) В этой формуле использованы следующие обозначения:
Эта формула может вам пригодиться при ручном восстановлении файловой системы. Поиск и восстановление файловВ этом разделе мы приведем некоторые рекомендации, направленные на восстановление файлов, доступ к которым стал невозможен из-за вредоносного действия вирусов или в результате разрушения файловой системы по любой другой причине. В любом случае перед началом восстановительных работ следует провести полное исследование файловой системы с использованием методики, изложенной в предыдущей части этой главы. Необходимо также убедиться, что вы хорошо владеете структурой файловой системы и знаете форматы всех ее компонент, таких как таблица разделов, таблица логических дисков, таблица размещения файлов FAT и т. д. В тяжелых случаях мы рекомендуем обращаться к специалистам, например, из скорой компьютерной помощи АО “ДиалогНаука”. Многие повреждения файловой системы можно восстановить в автоматическом режиме при помощи программы Norton Disk Doctor. Однако эта весьма неплохая программа в некоторых случаях не сможет оказать вам существенной помощи. Поэтому вы должны владеть хотя бы основными приемами ручного восстановления файловой системы. Если в процессе исследования файловой системы вы обнаружили, что некоторые структуры оказались полностью разрушены (например, главная загрузочная запись с таблицей разделов, таблица логических дисков, каталоги и т. д.), еще не все потеряно. Многое можно восстановить с помощью таких программ, как Norton Disk Doctor или Norton Disk Editor. Основная идея поиска потерянных файлов и структур данных заключается в том, что вы знаете (хотя бы приблизительно) их содержимое. Например, секторы, содержащие таблицу разделов, таблицу логических дисков и загрузочную запись имеют сигнатуру 0AA55h. Из предыдущих разделов этой главы вы знаете, что программы начальной загрузки содержат в своем теле текстовые строки, которые также можно использовать для поиска. В теле расширенного блока параметров BIOS Extended PBP имеются текстовые строки FAT12 или FAT16, которые также можно использовать для поиска. Если вы знаете характерные слова или последовательности байт, встречающиеся в потерянных файлах данных, их тоже можно использовать для восстановления. Секторы, содержащие дескрипторы каталогов, можно обнаружить, зная имена описанных в нем файлов. Поиск с помощью программы File FindНаиболее распространенное повреждение файловой системы возникает при внезапном отключении питания и заключается в появлении так называемых потерянных кластеров. Это повреждение также бывает следствием аппаратного сброса компьютера кнопкой Reset при работающей операционной системе Microsoft Windows. Потерянные кластеры называются так потому, что на них нет ссылок ни в одном каталоге файловой системы. Например потому, что соответствующий каталог был просто уничтожен и, следовательно, ссылки на описанные в нем файлы исчезли. Чаще всего для ремонта повреждений такого рода пользователи применяют программу SCANDISK.EXE, входящую в состав операционной системы MS-DOS, или программу NDD.EXE из пакетf Norton Utilities (программа Norton Disk Doctor). После восстановления файловой системы программой Norton Disk Doctor или SCANDISK.EXE на диске может образоваться громадное количество файлов со специфическим расширением имени (каждая программа восстановления использует свое имя), составленные из цепочек потерянных кластеров. Таких файлов в зависимости от серьезности повреждений файловой системы может быть очень много, до нескольких тысяч. Если после сбоя или вирусной атаки вы проверили диск одной из перечисленных выше программ, и в результате нужные вам файлы исчезли, существует большая вероятность того что они оказались среди восстановленных. Однако как их найти среди сотен и тысяч других? Проще всего это сделать, например, с помощью програмы Find File, которую можно запустить из популярной оболочки Norton Commander при помощи комбинации клавиш <Alt+F7> (рис. 6.36).
Рис. 6.36. Поиск файлов по контексту при помощи программы Find File, запущенной из оболочки Norton Commander В поле File(s) to find вы должны задать шаблон для имени файла и расширения имени, например, *.ndd. Поиск будет выполняться только среди файлов, имя которых удовлетворяет указанному шаблону. Необходимо также в поле Containing указать шаблон для поиска, т. е. какую-либо текстовую строку, присутствующую в файле. Например, для того чтобы найти все файлы, созданные текстовым процессором Microsoft Word for Windows, вы можете указать шаблон Microsoft Word, а для того чтобы найти все файлы, подготовленные в среде процессора электронных таблиц Microsoft Excel, укажите шаблон Microsoft Excel. Список путей к найденным файлам отобразится в верхней части окна программы Find File (рис. 6.37).
Рис. 6.37. Программа Find File нашла несколько файлов, содержащих указанный контекст В дальнейшем, если найденных файлов будет все еще очень много, вы можете переписать их в отдельный каталог и переименовать, а затем продолжить поиск, используя другие строки в качестве контекста. Описанную процедеру контекстного поиска вы можете использовать и для поиска в файлах документов изсестных вирусов, таких, например, как WinWord.Concept. Поиск с помощью программы DISKEDITПо сревнению с описанной в предыдущем разделе программой Find File программа DISKEDIT.EXE предоставляет намного больше возможностей для поиска файлов, а также различных структур файловой системы. Обратите внимание на меню Tools программы DISKEDIT.EXE (рис. 6.38).
Рис. 6.38. Меню Tools программы DISKEDIT.EXE открывает доступ к набору инструментальных средств для работы с файловой системой Если выбрать из этого меню строку Find, на экране появится диалоговая панель, показанная на рис. 6.39.
Рис. 6.39. Диалоговая панель Enter search text, предоставляющая широкие возможности контекстного поиска С помощью этой диалоговой панели вы сможете выполнять контекстный поиск строк, заданных как смивольным, так и шестнадцатиричным представлением. Дополнительно можно указать смещение сектора и выбрать режим Ignore Case, при котором сравнение с образцом будет выполняться без учета строчных или прописных букв. Строка Find Object позволяет выполнить поиск различных структур файловой системы. Если выбрать эту строку, на экране появится меню второго уровня, показанное на рис. 6.40.
Рис. 6.40. Меню, с помощью которого можно выполнить поиск служебных структур файловой системы Попробуйте все это в действии. Для этого откройте меню Object и выберите из него строку Physical Sector. Затем укажите самый первый сектор, расположенный на нулевой дорожке. Этот сектор должен содержать главную загрузочную запись MBR. Перейдите в режим неформатированного просмотра, выбрав из меню View строку as Hex. Теперь выберите из меню Tools строку Find Object и затем строку FAT. Программа DISKEDIT.EXE выполнит поиск первой копии таблицы размещения файлов FAT и отображит ее дамп, выделив в этом дампе первые три байта, как это показано на рис. 6.41.
Рис. 6.41. Программа DISKEDIT.EXE нашла первую копию таблицы размещения файлов FAT Если теперь сместить текстовый курсор вниз или нажать клавишу <PgDn>, а затем выбрать из меню Tools/Find Object строку FAT еще раз, будет найдена вторая копия таблицы размещения файлов FAT. Учтите, что поиск таблиц FAT в данном случае сводится к поиску последовательности байт F8 FF FF, поэтому выполнив поиск в третий раз, вы сможете найти еще одну, ненастоящую “таблицу FAT”. Дело в том, что наверняка на диске найдется какой-нибудь файл, содержащий указанную выше последовательность байт, поэтому будьте внимательны. Если взглянув на главную загрузочную запись вы увидели, что таблица разделов разрушена или зашифрована, можно выполнить контекстный поиск секторов загрузочных записей, содержащих блоки параметров BIOS BPB. Проще всего это сделать, если после просмотра главной загрузочной записи по ее физическому адресу и перехода к следующему сектору диска выбрать из меню Tools/Find Object строку Partition/Boot. Программа DISKEDIT.EXE найдет сектор, содержащий в конце последовательность байт 55 AA, которая соответствует сигнатуре загрузочного сектора 0AA55h (рис. 6.42).
Рис. 6.42. Найден загрузочный сектор После того как вы нашли загрузочный сектор, его физический адрес можно вручную подставить в таблицу разделов, отредактировав ее программой DISKEDIT.EXE. О том как выполнить редактирование, вы можете узнать из документации, которая поставляется с набором утилит Нортона. Так как структура разделов диска в процессе эксплуатации последнего может многократно изменяться, не исключено что вы найдете слишком много загрузочных секторов. Некоторые из них принадлежали старым разделам и не были уничтожены при изменении структуры разделов, некоторые вообще могут принадлежать другим операционным системам. В любом случае проверяйте расположение найденного загрузочного сектора относительно других найденных вами логических структур файловой системы. Например, вы можете использовать для “опознания” тот факт, что сразу после загрузочного сектора должна следовать таблица размещения файлов. Так как в процессе поиска программа DISKEDIT.EXE проверяет только последние два байта сектора, возможны ложные срабатывания. На рис. 6.43 показана как раз такая ситуация.
Рис. 6.43. При поиске загрузочного сектора найден сектор, содержащий нужную сигнатуру, который однако, не является загрузочным Нетрудно заметить, что вслед за найденным располагается сектор, содержимое которого мало похоже на таблицу размещения файлов. Теперь займамся поиском каталогов, на которые нет ссылок из других каталогов (т. е. потерянных каталогов). Для поиска вы можете воспользоваться строкой Subdirectory меню Tools/Find Object. Программа DISKEDIT.EXE просматривает секторы диска в поисках такого, в начале которого находится последовательность байт 2E 20 20 20 20 20 20 20 20 20 20 (рис. 6.44). Эта последовательность соответствует дескриптору, который содержит ссылку каталога на себя самого.
Рис. 6.44. Найден сектор, принадлежащий каталогу Нажимая комбинацию клавиш <Control+G>, вы можете продолжить поиск нужного вам каталога, пока не найдете тот, что содержит интересующие вас файлы. Можно выполнять поиск и по имени файла, если вы его знаете. Как только нужный каталог найден, вы должны записать физический адрес соответствующего сектора диска и найти либо вычислить номер кластера, соответвтующего каталогу. Для поиска номера кластера, соответсвующего найденному каталогу, перейдите в режим форматированного просмотра каталога, выбрав из меню View строку as Directory. Затем из меню Link выберите стоку Cluster chain (fat). На экране появится содержимое таблицы FAT в режиме форматированного просмотра, при этом искомый номер кластера будет выделен. Зная номер кластера потерянного каталога, вы можете создать новый дескриптор каталога, например, в корневом каталоге диска, и сделать в этом дескрипторе ссылку на найденный каталог. После этого потерянный каталог вновь станет доступным. Аналогично можно вручную восстановить ссылки на потерянные файлы и даже собрать файлы из отдельных кластеров. Можно предложить следующий алгоритм восстановления файла: · выполнить контекстный поиск секторов файла с помощью строки Files из меню Tools, а также последовательным просмотром секторов диска; · определить номер кластеров, соответствующего найденным секторам, пользуясь приведенной выше формулой или средствами программы DISKEDIT.EXE; · восстановить цепочку номеров кластеров для файла в таблице размещения файлов FAT, отметив в ней последний кластер значением 0FFFFh; · создать в любом каталоге (например, в корневом) дескриптор, который описывает файл, указав в нем ссылку на первый кластер восстановленного файла, а также размер этого файла. Если вы восстанавили файл документа, созданный текстовым процессором Microsoft Word for Windows или процессором таблиц Microsoft Excel, загрузите его в соответсвующее приложение и затем сохраните его под другим именем. При этом будет восстановлена правильная длина файла. Простой текстовый файл можно загрузить в текстовый редактор и “отрезать” лишние данные в конце файла. Затем сохраните файл под другим именем. Особенности файловой системы Microsoft Windows 95Восстанавливая файловую систему компьютера, на котором установлена операционная система Microsoft Windows 95, следует соблюдать осторожность, так как структура каталогов в ней отличается от структуры каталогов в MS-DOS. Как вы, возможно, знаете, пользователи Microsoft Windows 95 не скованы ограничениями на длину имен файлов и каталогов. И хотя такое ограничение существует (255 символов), оно не имеет существенного значения. Создавая новую операционную систему, программисты из Microsoft нашли остроумное решение проблемы совместимости с программами MS-DOS, использующими имена в “формате 8.3” (8 символов - имя файла или кталога, 3 - расширение имени). Это решение заключается в том, что в каталогах наряду с обычными дескрипторами располагаются дескрипторы специального вида, количество которых зависит от длины имени файла или каталога. В этих дескрипторах и хранится длинное имя. Специально для программ MS-DOS создается обычный дескриптор, содержащий альтернативное имя, отвечающее стандартам MS-DOS. Взгляните на рис. 6.45. На этом рисунке показана структура каталога, созданного в файловой системе Microsoft Windows 95, причем просмотр выполнялся программой DISKEDIT.EXE из пакетf Norton Utilities версии 8.0, предназначенной для MS-DOS.
Рис. 6.45. Просмотр структуры каталогов программой DISKEDIT.EXE, предназначенной для работы в среде MS-DOS Обратите внимание на дескрипторы, расположенный над дескрипторами каталога SYSTEM, дескрипторами файлов README.TXT, INSTALL.INF и SETUP.EXE. Это и есть специальные дескрипторы, хранящие информацию о длинных именах в кодировке UNICODE (в этой кодировке каждый символ представлен двумя байтами). Для того чтобы специальные дескрипторы не мешали работе программ MS-DOS, в них установлены атрибуты Read Only, System, Hidden и Volume Label. Элементы каталога с таким экзотическим набором игнорируются всеми обычными программами MS-DOS. Если просматривать содержимое каталога программой DISKEDIT.EXE из пакета Norton Utilities для Microsoft Windows 95, специальные дескрипторы будут отображаться в форматированном виде, доступном для исследования (рис. 6.46).
Рис. 6.46. Просмотра структуры каталогов новой версией программы DISKEDIT.EXE, предназначенной для Microsoft Windows 95 Специальный дескриптор отмечается новой версией программы DISKEDIT.EXE как LFN (Long File Name) и ссылается на кластер с номером 0. Настоящий номер первого кластера, распределенного файлу или каталогу, находится в стандартном дескрипторе, расположенным непосредственно вслед за специальным. Например, каталог с именем System отмечен в стандартном дескрипторе как SYSTEM и расположен в кластере с номером 32227. Если имя файла или каталога превышает 8 символов, стандартный дескриптор, расположенный после специальных, содержит алиасное имя, состоящее из начальных символов имени, символа “~” (тильда) и десятичного числа. Этот дескриптор называется алиасным. В главном меню программы DISKEDIT.EXE появилось новая строка More, выбрав которую, вы сможете просмотреть или отдредактировать остальные поля специальных дескрипторов (рис. 6.47 и 6.48).
Рис. 6.47. Просмотр остальных полей спеециальных дескрипторов
Рис. 6.48. Просмотр остальных полей спеециальных дескрипторов (продолжение) Например, дата и время создания файла находятся, соответственно, в полях Create Date и Create Time. Дополнительно операционная система Microsoft Windows 95 фиксирует дату последнего обращения к файлу. Эту дату вы можете увидеть в поле Accessed. Поле EA содержит признак расширенных атрибутов и имеет нулевое значение для стандартных атрибутов. Если имя настолько длинное, что не помещается в одном специальном дескрипторе, создается несколько таких дескрипторов, расположенных друг за другом. Следом за ними идет алиасный дескриптор. В поле Ordinal находится порядковый номер специального дескриптора. Для последнего специального дескриптора в поле Last? находится отметка Yes. Что же касается таблицы размещения файлов FAT, то хотя в операционной системе Microsoft Windows 95 она и называется виртуальной таблицей размещения файлов VFAT, ее формат остался прежним. Это сделано для совместимости с программами MS-DOS. Сохранились форматы и других логических блоков файловой системы, таких как таблица разделов диска, таблица логических дисков, загрузочная запись и расширенный блок параметров BIOS Extended BPB. Для восстановления файловой системы Microsoft Windows 95 нельзя использовать старые версии пакета Norton Utilities. Вы должны выполнять автоматическое восстановление либо приложением ScanDisk, которое входит в состав этой операционной системы, либо программой NDD.EXE из пакета Norton Utilities для Microsoft Windows 95. Полуавтоматическое восстановление можно выполнять только новой версией программы DISKEDIT.EXE для Microsoft Windows 95, но не в коем случае не старой, которая ничего не знает о специальных дескрипторах. |