Техника защиты компакт-дисков от копирования


Защиты, основанные на временных характеристиках чтения


Скоростная диаграмма чтения, — вероятно наиболее легко измеряемая, но в то же время и наиболее уникальная характеристика диска, значительно варьирующаяся от одной болванке к другой. Проведем простой эксперимент: возьмем какой-нибудь компакт-диск, сделаем его копию, а затем сравним скоростную диаграмму чтения копии и оригиналом. Результат, полученный автором, иллюстрируют два следующих рисунка, приведенные далее (в роли эталонного диска выступил сборник альбомов "Агаты Кристи", в роли пишущего привода — PHILIPS CDRW 24000; за построение графиков и копирование дисков отвечала программа Alcohol 120%, а само копирование осуществлялось на болванку Imation 48x).

а

б

Рис. 9.2.унок 24 0х026,0х027 Скоростные диаграммы чтения оригинального диска (а) и его копии (б)

Почувствуйте, как говорится в одной рекламе, разницу! Не все диски одинаковы! Причем, они очень сильно неодинаковы, — и отличия между ними видны даже "невооруженнымому глазому!"! Как это можно использовать для защиты программ? Выделяем на временной кривой ряд узловых точек, которые соответствуют "пикам", "провалам" или отсутствию таковых на заданном отрезке. Затем преобразуем их в код характеристик, памятуя о том, что в процессе эксплуатации диска (а так же чтении диска в других приводах) профиль кривой будет значительно меняться: одни изломы могут исчезать, а другие — появляться. Поэтому, для идентификации диска придется применить алгоритм нечеткого сравнения, то есть даже при совпадении нескольких узловых точек диск считается оригинальным. Конечно, чем мягче критерии отбора, тем больше вероятность того, что "левая" копия будет принята за правильную. Чрезмерно жесткие критерии, напротив, вызывают "угарный мат" тех пользователей, "раздолбанные" приводы которых исказили временную кривую настолько, что оригинальный диск неожиданно перестал восприниматься ими. По опыту автора, хороший баланс между надежностью и стабильностью представляет отношение 3:10 — т. е.
если распознаны хотя бы три узловые точки из десяти, то диск считается оригинальным, ну и соответственно наоборот. В конечном счете, пусть лучше защита не заметит факта своего копирования, чем "обругает" законного пользователя.

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

Если же вы "закатываете" на диск пару небольших утилит, то, конечно, для привязки к диску лучше воспользоваться замером времени чтения отдельных секторов. Поскольку, в силу несовершенства технологических процессов длина секторов "плавает" в довольно широких пределах, то вместе с нею "плавает" и время, затраченное приводом, на их чтение — ведь линейная скорость вращения диска постоянна! Ну… практически постоянна. Лазерные диски, будучи по своей природе самосинхронизующимися устройствами, крайне неприхотливы к стабильности вращения привода. Главное, чтобы градиент изменения скорости был значительно ниже частоты следования питов и лендов (ведь, при пересечении границы каждого из них происходит автоподстройка генератора). Легко показать, что при постоянной угловой скорости вращения диска, его линейная скорость в процессе "раскрутки" спиральной дорожки неизбежно нарастает и, если не предпринять никаких мер, то на внешних секторах диска питы будут проноситься мимо лазерной головки с такой скоростью, что она попросту не успеет их считать.


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

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

Результаты обследования одного из произвольно взятых дисков автора выглядят так (рис. 9.3). Эта "унылая изрытая горами местность", почему-то ассоциирующаяся с двуручной пилой, довольно капризна по своей природе. Повторный прогон программы с тем же самым диском никогда не даст полностью идентичный результат. Тем не менее, большинство пиков и впадин совпадают, и идентифицировать оригинальный диск все же возможно!



Рис. 9.3.унок 25 0x02F Узловые профили, полученные при двух прогонах одного и того же диска

А теперь давайте скопируем диск и попробуем сравнить его с оригиналом (рис. 9.4). Совсем другая картина! "Рельеф местности" до неузнаваемости изменился. Во-первых, вершины пиков категорически не совпадают. Во-вторых, у дубликата отмечается на удивление невысокое количество "впадин" (видать болванка хорошая попалась). И, наконец, в третьих, между 14 и 22 секторами, вместо огромного "трезубца", украшающего диск-оригинал, теперь раскинулась "протяжная равнина", "нахально" загибающаяся книзу.



Рис. 9.4.унок 26 0x030 Узловые профили двух различных дисков

Таким образом, измерение относительного времени чтения секторов, позволяет однозначно отличить оригинальный носитель от его копии. Причем, такое измерение легко осуществимо штатными средствами операционной системы и совместимо практически со всеми моделями приводов.


Содержание раздела