cd.defects

защита от копирования, основанная на физических дефектах

Рассмотрим лазерный диск с нанесенным дефектом (см. рис. 1). Какое он оказывает воздействие? Если ширина дефекта составляет менее 0,3 мм, то он автоматически восстанавливается декодером Рида-Соломона нижнего уровня (CIRC-декодером) и привод его просто «не заметит». Существует возможность вернуть позиции сбойных битов (см. команду READ CD), однако, она реализована не на всех приводах и потому на нее нельзя опереться. При увеличении длины дефекта до ~0,8 мм CIRC-декодер уже не справляется с его восстановлением, но в подавляющем большинстве случаев сектор может быть полностью восстановлен декодером верхнего уровня (ECC-декодером), и чтение завершится без ошибок. Дефектны с длинною свыше 1 мм уже не могут быть восстановлены и привод возвращает ошибку.

Рисунок 1 нанесение ключевой метки на спиральную дорожку

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

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

Если создать локальный дефект размером ~2 мм, то сектор будет читаться с ошибками и время его чтения существенно возрастет. Этот факт можно использовать для идентификации диска.

Проведем следующий эксперимент: возьмем лазерный диск и на расстоянии 5 мм от внешней кромки нанесем маркером риску толщиной ~0,5 мм и шириной ~2 мм (это будет наша ключевая метка). Затем, последовательно читая сектора в сторону увеличения их LBA-адресов, станем замерять время чтения каждого сектора.

Нанеся полученные величины на график, мы увидим циклически повторяющиеся «выбросы», которых отстоят друг от друга на ~16 секторов. Это позволяет нам рассчитать длину одного сектора. Расстояние риски от центра диска равно ~55 мм, следовательно, длина одного сектора — 2 * 55 *PI / 16 ~ 21 мм. Наша метка может перекрыть два сектора, тогда ошибка возникнет в обоих, однако, опираться на этот факт нельзя, поскольку он завязан на корректирующую способность привода, а она, как уже отмечалось, неодинакова.

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

Это осуществляется так: исследуя полученный график находим два смежных сбойных сектора. Очевидно, ключевая метка находится на их границе. Зная длину одного сектора, расстояние ключевой метки от центра диска, нетрудно рассчитать LBA-адрес сектора, попадающий на середину метки.

Замечание: еще можно определять период следования сбойных секторов. Такой метод более надежен в работе, зато ключевую метку легко скопировать вручную, поскольку плотность секторов на виток спирали меняется незначительно — ~12 секторов посередине диска, ~21 сектор у внешней кромки. Таким образом, при радиальном смещении ключевой метки на ~2 мм период следования сбоев изменяется на 1 сектор.

Рисунок 2 Красный график с желтыми точками описывает скорость чтения каждого из секторов, синий график с зелеными точками иллюстрирует успешность чтения. Нулевое значение — сектор прочитан успешно, ненулевое — чтение сектора завершилось с ошибкой.

Копировщики защищенных дисков пытаются имитировать сбойные сектора различными методами, однако, это у них плохо получается. Таких методов известно всего три: а) сектора с низким DSV; б) сектора с искаженными EDC/ECC полями; в) сектора с искаженным MODE. Все эти способы увеличивают время чтения сектора и приводят к ошибке, однако, их легко разоблачить. Поскольку дорожка физически остается цела, дезориентации следящей системы не происходит и потому мы получаем совсем другую временную характеристику.