Добавить в цитаты Настройки чтения

Страница 249 из 371



Тем не менее при попытке чтения любого из секторов очищенного диска привод с неизменным упорством возвращает ошибку. Почему? Очень просто, это «защита» от чтения заведомо некорректной информации. Еще ни один из всех знакомых мне приводов не мог читать сектора за пределами Lead-Out области (собственно, на программном уровне содержимое Lead-in/Lead-out областей недоступно тоже). Тем не менее эта невозможность отнюдь не концептуального уровня и удаление из микропрограммы привода «лишних» проверок позволят прочитать такой диск на ура. Нет, не подумайте! Призывать вас к дизассемблированию прошивок я не собираюсь. Дело это сложное, трудоемкое, да к тому же небезопасное. Неверно хакнутая прошивка может ко всем чертям угробить привод без малейшей надежды на его восстановление. Нет, уж лучше мы пойдем другим путем!

Идея восстановления информации, предлагаемая автором, в общих чертах сводится к записи на диск фиктивного ТОС, адреса Lead-in и Lead-out областей которого указывают на первый и последний сектор диска соответственно, а стартовый адрес первого трека аккурат совпадает с концом pre-gap области, которая по стандарту должна занимать не менее 150 секторов (или 2 секунд в пересчете на абсолютные адреса). После этой нехитрой операции привод будет читать оригинальное содержимое очищенного диска как миленький, конечно, при том условии, что мы ухитримся настроить пишущий софт так, чтобы он, записав фиктивный ТОС, никоим образом не пытался интерпретировать подсунутые ему указатели на Leadin/LeadOut области как указание «выжечь» всю поверхность диска целиком.

Проверка показывает, что Clone CD вообще не записывает такой ТОС на диск, ругаясь на несоответствие размеров диска и образа файла. Alcohol 120 % выполняет нашу просьбу без лишних препирательств, но совсем не так, как мы хотели! Забив весь восстанавливаемый диск непонятно откуда взятым мусором, он авторитетно сообщает, что в процессе записи произошли ошибки и, возможно, вам следует убедиться в исправности оборудования.

Хорошо, зайдем с другой стороны. Запишем на диск один реальный трек, занимающий минимально возможное количество секторов (по стандарту — 300, но некоторые приводы вполне удовлетворяются и меньшими значениями), но расширим его pre-gap с двух секунд на… весь диск! В результате мы потеряем лишь 300 последних секторов, но получим доступ ко всему остальному содержимому. Учитывая, что на диске этих секторов насчитывается немногим более 300 тысяч, нетрудно подсчитать, что процент успешно восстановленной информации составляет по меньшей мере 99,999 % емкости всего диска, да и то лишь при том условии, что исходный диск был забит целиком, что в живой природе практически никогда не наблюдается. Если же это вас не удовлетворяет — разрабатывайте свой собственный софт, корректно записывающий фиктивный ТОС, но ничего не делающий сверх этого (Lead-in область все равно записывает сам привод, ну а без Lead-out при аккуратном обращении с диском в принципе можно и обойтись, главное — пытаться прочитать сектора, находящиеся за пределами диска, иначе поведение привода станет трудно предсказуемым). Мне же это делать лень — с восстановлением полностью забитых дисков я еще не сталкивался. Во всяком случае пока…

Процедура восстановления состоит из трех частей: подготовки исходного образа трека с нормальным pre-gap; увеличения pre-gap до размеров целого диска и записи исправленного образа на восстанавливаемый диск. Первые два этапа достаточно выполнить всего один раз, т. к. полученный образ (далее мы будем называть его «лечебным») может использоваться для всех дисков (читай: для всех дисков той же самой емкости, по понятным соображениям вы не сможете корректно восстановить 23-минутный диск с помощью образа, предназначенного для 80-минутного диска и, соответственно, наоборот).

Для начала возьмем чистый CD-RW диск («чистый» не в смысле «ни разу не записанный», а очищенный быстрой или полной очисткой, так же для этих целей подойдет и CD-R). Используя любую утилиту для штатного «прожига», запишем на него один крошечный файл, «весящий» не более 500 Кб (более тяжелый файл просто не уместится в запланированные 300 секторов). Выполнять финализацию диска не нужно.

Запустим Clone CD (Alcohol 120 %) и снимем образ диска. Спустя минуту-другую на винчестере образуются два файла: file name.img и file name.ccd (если вы попросили Clone CD сохранять так же и субканальную информацию, образуется третий файл — file name.sub, однако субканальная информация в данном случае будет только мешать, потому опцию «чтение субканалов из треков с данными» лучше всего отключить или же просто удалить file name.sub с диска; также нам не нужен «Cue-Sheet», который Clone CD предлагает создавать для совместимости с другими программами, конкретно — с CDRWin).

Открыв file name.ccd-файл любым текстовым редактором, найдем в нем следующие строки (ключевые слова для поиска «Point=0xa2» и «Point=0x01»):





Изменим поля PMin: PSec: PFrame, принадлежащие Point=0xa2 так, чтобы они указывали на самый конец диска (0ха2 — это как раз Lead-Out и есть). Измененный Lead-Out может выглядеть, например, так: 74:30:00. Адрес Lead-Out следует выбирать с тем расчетом, чтобы между ним и внешней кромкой диска оставался по меньшей мере 30-секундный зазор. Еще лучше, если ширина Lead-Out составит полторы минуты или около того. Однако в этом случае будут неизбежно теряться последние треки восстанавливаемого диска (если, конечно, вам действительно требуется их восстановить).

К содержимому полей PMin: PSec: PFrame, принадлежащих Point=0x01 (стартовый адрес первого трека), необходимо добавить ту же самую величину, которую вы добавили к соответствующим полям Lead-Out. Отредактированный вариант может выглядеть, например, так: 74:01:42. (74:30:00 /* новый адрес Lead-out */ — 00:29:33 */ старый Lead-Out */ + 00:01:00 */ старый стартовый адрес первого трека */ = 74:01:42 */) новый стартовый адрес */). Короче говоря, новая версия ccd-файла должна выглядеть так:

Вообще-то, для приличия следовало бы скорректировать и поля PLBA (LBA-адрес связан с абсолютным адресом следующим соотношением: LBA = ((Min*60) + Sec)*75 + Frame, однако текущие версии работают исключительно с абсолютными адресами и LBA-адреса игнорируют. Теперь все что находится между концом Lead-in области и началом первого сектора и будет называться pre-gap. При «прожиге» диска область pre-gap остается нетронутой и позже может быть прочитана на секторном уровне (а это как раз то, что нам нужно!). Сказать по чести, чрезмерное увеличение pre-gap первого трека — не самая лучшая идея, т. к. не все приводы способны читать такой «жирный» pregap. С точки зрения совместимости было бы лучше увеличивать pre-gap второго трека, однако при этом первый трек придется располагать в самом начале диска и его тело неизбежно затрет восстанавливаемые сектора. И хотя это не такая уж большая проблема (в первых секторах диска все равно ничего ценного нет), к такой мере без особой необходимости все же лучше не прибегать. На крайний случай действуйте так: запишите на диск две сессии и вместо стартового адреса Point номер 0x01 меняйте стартовый адрес Point номер 0x02 (он будет находиться в разделе session=2).

Теперь наскоро очистим наш подопытный диск и до отвала забьем его какими-нибудь файлами (предпочтительнее всего использовать текстовики, т. к. в этом случае будет сразу видно: извлекается ли с восстановленного диска мусор или полезная информация). Записав файлы на диск, тут же выполним его быструю очистку.

Убедившись, что диск действительно очищен и его содержимое уже недоступно, запустим Clone CD и запишем только что созданный нами «лечебный» образ. Запись должна проводиться в режиме DAO, иначе ничего хорошего у вас не получится (поэтому прежде чем восстанавливать сколь-нибудь ценный диск на еще неизвестном вам приводе, попробуйте потренироваться на «кошках» — диске, не содержащем ничего интересного).