0
<< предыдущая заметкаследующая заметка >>
29 апреля 1999
Win95.CIH: Рукописи не горят!

Три дня прошло с момента эпидемии вируса (статья опубликованна 29.04.99), попортившего жизнь многим пользователям. Три дня вполне достаточный срок чтобы впасть в отчаяние, да и отформатировать винчестер (это если у Вас Flash BIOS не рухнул) и переустановить систему, и я приношу свои извинения за задержку выхода этой заметки.

Кто рассчитывает на ироничное чтиво на тему «как всё запущено» (в духе остальных материалов этого сайта) может чтение не продолжать. Это довольно сложный, технический материал о том как восстановить информацию жесткого диска утраченную в результате атаки вируса. Не стоит и думать о том что бы восстановить всю информацию, даже в самом благоприятном случае это возможно чисто теоретически. Используя эту заметку Вы, с некоторой степенью вероятности, сможете восстановить только наиболее актуальные для Вас файлы.

Сначала теория. Физически стереть информацию с целого жесткого диска объёмом хотя бы 1 Гбайт довольно не просто. На это уйдёт минимум 10 минут, а если стирать информацию случайным образом (не последовательно) то значительно больше. Учитывая количество служебной (не авторской) информации на наших HDD можно надеется что Ваша информация ещё жива, но не доступна. И так наша задача упростилась. Информацию восстанавливать не надо, надо только восстановить доступ к ней. Для этого рассмотрим принцип хранения информации на диске для систем FAT12, FAT16, FAT32 и организацию самого диска.

Сразу оговорюсь что данное описание является не техническим, а обзорным и нужно для понимания тех действий которые Вам предстоит предпринять для спасения файлов.

Диск устроен очень просто. Он состоит из нескольких поверхностей по которым позиционируются головки. Позиционируются они по концентрическим дорожкам на каждой из которых располагается несколько секторов с данными. Сектор является минимальным адресуемым блоком данных для диска. Сектор содержит 512 байт полезной информации и ECC блок который нас не интересует.

В самом начале диска находится главная загрузочная запись — MBR (Master Boot Record) и таблица разделов — PT (Partition Table), далее идёт загрузочная запись операционной системы — BR (Boot Record), затем таблица размещения файлов — FAT (File Allocation Table), корневой каталог — ROOT и файловая область — FA (File Area) (см. рис. 1).

PT — состоит из четырёх элементов описывающих разделы диска. DOS и Windows используют только первые два элемента. Описание раздела диска содержит информацию о первых и последних головках, дорожках, секторах раздела, общем количестве секторов в разделе, типе файловой системы и признак того что раздел является загрузочным.

MBR — находится в том же секторе что и PT. Данные в MBR представляют собой код процессора необходимый для дальнейшей загрузки операционной системы. В последних двух байтах MBR находится сигнатура 55AAh указывающая на то что данные в MBR необходимо использовать для загрузки. Если эта сигнатура отсутствует данные MBR не будут использованы.

PT и MBR расположены на самом первом секторе HDD.

BR — содержит массу данных и служит для описания параметров файловой системы. В отличии от диска, минимальным адресуемым блоком данных для операционной системы служит кластер состоящий из одного или нескольких секторов. В BR нам интересны такие данные как размер кластера, размер и количество копий FAT.

FAT — Состоит из 12, 16 или 32 битных элементов количество которых равно количеству кластеров на диске. Нужны эти элементы для связи кластеров в цепочки соответствующие файлам. (см рис. 2)

ROOT — Корневой каталог диска. Содержит записи описывающие файлы (дескрипторы файлов) в корневом каталоге. Такая запись описывает имя, тип, дату создания, размер, атрибуты файла, а так же содержит указатель на первый кластер файла. Каталоги представляют собой файлы идентичные по структуре корневому каталогу. Каталог кроме записей описывающих файлы содержит две записи одна из которых содержит указатель на первый кластер самого каталога, вторая на первый кластер родительского каталога.

Будем считать что Вы всё поняли. :-) Если нет, то существует специальная литература где эти вещи расписаны подробнее и вероятно более доступно.

Переходим к основной части — восстановление данных на HDD.

Нам потребуются следующие вещи:

Загрузочная дискета (по возможности не заражённая вирусами) защищённая от записи.

— Программа FDISK из комплекта установленной ОС.

— Программа FORMAT из комплекта установленной ОС.

— Программа DISKEDIT из комплекта NU v 2.0 для Windows 95 OSR2.

— Программа UNERASE из того же комплекта.

— Программа NC, VC, DN или что то подобное.

По моим наблюдениям Win95.CIH в первую очередь «убивает» такие вещи как FAT и BR, при этом любезно оставляет нам ROOT. Приступим:

ВАЖНО: Эта инструкция написана для ситуации когда имеется 1 логический диск.

— Запускаем DISKEDITOR и получаем доступ к HDD как к физическому устройству. Ищем ROOT, он как правило содержит файл типа command.com. Только не вздумайте вводить в строку поиска «command.com», если Вы таким образом что-нибудь и найдёте, можете быть уверены что это не ROOT. Введите просто «command» или какое-нибудь другое имя файла про который Вы точно знаете, что он был в корневом каталоге.

— Переходим в режим показа каталогов и определяем размер (в секторах) ROOT и записываем эти сектора на дискету (не на загрузочную, она ведь у нас от записи защищена) в отдельный файл. Записываем (на бумажку) с какого именно места начинался ROOT (цилиндр (он же — дорожка), головка, сектор).

— Запускаем программу FDISK и убиваем раздел диска. Далее, по новой создаём раздел и выходим из программы. FDISK предложит перезагрузиться, что мы и сделаем.

— Запускаем программу FORMAT с ключами /U /S и форматируем диск C:. Что, страшно? Не волнуйтесь, программа формат на самом деле ничего не стирает с диска кроме ROOT и FAT, ещё она модифицирует запись BR.

— Снова запускаем DISKEDITOR и находим ROOT. Внимательно смотрим лежит ли он в том же месте что и прежний (у нас это на бумажке было записано). Если не в том же, то считаем на сколько секторов он сместился. Делим число секторов смещения на два (вернее на количество копия FAT — см. BR) и полученный результат добавляем к (если смешение произошло к началу диска) или вычитаем из (если смешение произошло к концу диска) числа секторов в FAT указанных в соответствующем поле BR. Модифицируем BR и снова форматируем диск. Примечание: Способ абсолютно не корректный, зато простой и действенный. :-)

— Повторив предыдущий пункт и убедившись что новый ROOT лежит на месте старого, читаем (всё тем же DISKEDITOR-ом) файл с сохранённым ROOT и записываем его поверх нового.

— Перезагружаемся (все перезагрузки мы делаем с помощью загрузочной дискеты). Если всё сделано правильно мы увидим что всё утраченное содержимое вновь появилось на диске C:. Однако радоваться рано. То что мы видим только указатели на начала файлов. FAT (после форматирования) девственно чист и нам ещё предстоит заняться восстановлением цепочек кластеров. Здесь успех полностью зависит от того насколько давно Вы делали дефрагментацию диска. Если дефрагментация выполнена недавно то все кластеры отдельного файла лежат по порядку. Если дефрагментация делалась давно, или не делалась вовсе, Вам остается положиться на удачу и утешится тем что первый кластер любого файла Вы считаете верно.

— Для восстановления цепочки кластеров в FAT, удалим файл который требуется восстановить, запустим программу UNERASE и восстановим файл. Программа сделает следующее: исходя из размера файла объединит соответствующее количество последовательно идущих кластеров, начиная с первого указанного в дескрипторе файла, в цепочку.

— Скопируйте восстановленный файл на дискету, и повторите действия для следующего файла подлежащего восстановлению.

— Если в каталоге вдруг отсутствует файл который Вы хотели бы восстановить во что бы то ни стало, найдите имя файла с помощью DISKEDIRTOR-а используя физический доступ к диску. Удостоверьтесь, перейдя в режим просмотра каталога, что имя находится в дескрипторе файла. Запишите номер первого кластера файла. Найдите любой не нужный файл который Вы видите на диске и запишите в дескриптор этого файла номер первого кластера файла который Вы увидеть не можете. Далее используйте технологию восстановления описанную выше.

Если Вы поняли меньше 30% написанного здесь, Вам стоит обратится к услугам более компетентного человека, предварительно ознакомив его с данным текстом и удостоверившись в том что он понял более 30% информации.

Удачи!

PS: Данный метод был проверен и оказался эффективен на IDE HDD Quantum — 2.1Gb, Win95/Fat32, одного моего друга. Метод был использован для восстановления файлов курсовой работы.

Продолжение...

Приведённая выше статья, вызвала отклик и мне хотелось бы ответить на некоторые часто задаваемые вопросы.

Чаще всего спрашивают можно ли что то предпринять, когда винчестер уже отформатирован, а область ROOT не сохранена или разрушена вирусом ещё до форматирования.

Да можно, при условии что файл(ы), который необходимо восстановить, находился в подкаталоге. Последовательность действий здесь такая:

— С помощью DISKEDITOR-а (в режиме доступа к винчестеру как к физическому устройству) найти дескриптор восстанавливаемого файла. Следует учесть что требуемый дескриптор записан на диске в формате 8.3 и без точки разделяющей имя и расширение файла. Т.е. если Вы ищите что то типа «PISMO.DOC» то в строке поиска укажите «PISMO[Пробел][Пробел][Пробел]DOC». Для длинных имен файлов, к примеру «ICW-Internet Connection Wizard» в строке поиска следует указать «ICW-IN~1«.

— Убедитесь что найденный фрагмент, находится в каталоге.

— В любом каталоге есть дескриптор указывающий на сам каталог. Он обозначается точкой. Запомните (запишите на бумажку) номер кластера указанный в этом дескрипторе.

— Создайте в корневом каталоге диска каталог с любым именем.

— С помощью DISKEDITOR-а (в режиме доступа к винчестеру как к логическому устройству) измените указатель на первый кластер каталога, на ранее сохранённое (на бумажке) значение. Что бы избежать конфликта с Windows перед запуском программы DISKEDITOR выполните команду «ock [D:], где [D:] — диск на котором предстоит сделать изменения.

— Для восстановления файлов размером более одного кластера используйте методы описанные выше (удаление и восстановление с помощью UnErase).

— Этот способ применим как для каталогов так и для отдельных файлов. Способ апробирован.

Вторым, часто задаваемым вопросом, был вопрос о восстановлении HDD «разбитого» на несколько логических дисков. Скажу сразу, по моим наблюдениям на таких HDD страдает только диск C: (первый раздел), а остальные разделы сохраняются и восстанавливаются довольно просто.

Сначала немного теории. Как было сказано в первой части этой статьи таблица разделов (PT) состоит из 4-х элементов из которых используются только два. Этого явно не достаточно (даже при использовании всех 4-х элементов) для определения 26 логических дисков (максимальное число дисков для файловых систем FATxx). Поэтому при наличии более одного логического дика создаётся раздел типа EXTEND. В том месте диска где расположен первый сектор этого раздела находится запись формата PT. В ней описан сам логический диск и, следующий за ним раздел типа EXTEND (если таковой существует). Для такой «цепочки», естественно не существует ограничения в 26 элементов, оно введено исходя из количества букв в латинском алфавите. Поскольку у нас появился целый ряд записей формата PT условимся называть PT запись расположенную в самом первом секторе винчестера (там же где и MBR) — корневой PT или RPT.

И так для восстановления всех логических дисков (исключая диск C) достаточно восстановить указатель на раздел EXTEND в RPT.

Для того что бы это сделать надо предпринять следующие шаги:

— Если требуется восстановить структуру RPT, а руками этого делать не хочется (или не знаете как), создайте с помощью FDISK-а раздел, заведомо меньший чем был размер диска C: на пострадавшем HDD. НЕ СОЗДАВАЙТЕ раздел EXTEND и логические диски!

— Найти начало раздела EXTEND. Для этого, сначала найти BOOT RECORD (BR) логического диска D: (первый диск раздела EXTEND), указав в строке поиска «MSWIN4«. Затем отступить на отступить на одну дорожку (цилиндр) назад (к началу диска) и убедиться в том что найдена PT запись раздела EXTEND. Внимание! Сама запись будет описывать раздел BIGDOS, FAT16 или что то в этом роде, возможно в ней будет указатель на следующий раздел EXTEND (если винчестер содержал более 2-х логических дисков).

— Первую запись в PT раздела EXTEND надо скопировать на место второй записи в RPT.

— Уменьшить на единицу значение начальной дорожки (цилиндра) во второй записи RPT.

— Изменить тип раздела во второй записи RPT на EXTEND.

— Перезагрузить компьютер и насладится вновь обретёнными дисками. :-)

— Для восстановления диска C: восстановите значения первой записи RPT (исходя из значений второй записи).

Дальнейшее восстановление осуществляется способом описанным в первой части этой статьи.

Удачи!

<< предыдущая заметка следующая заметка >>
Оставить комментарий