<< Предыдущая

стр. 19
(из 39 стр.)

ОГЛАВЛЕНИЕ

Следующая >>

проверка вполне может выполняться только в седьмой миссии многоуров-
невой игры, до которой невозможно добраться быстрее, чем за трое суток
непрерывных сражений! Так что оставим снятие защиты через восстановле-
ние исполняемых модулей фанатикам исследований программ и перейдем
к рассмотрению части защиты, связанной с проверкой аутентичности
компакт-диска.
Как утверждают разработчики StarForce, при изготовлении защищенных
писков не требуется никакое специальное оборудование, позволяющее на-
носить лазерные метки или какие-либо иные повреждения поверхности
компакт-диска. Да и современные программы побитового копирования дис-
ков, такие как CloneCD или BlindRead/BlindWrite, способны настолько точ-
но воссоздавать все ошибки, что защита оказывается неспособна отличить
оригинал от копии. Однако практика показывает, что в подавляющем боль-
шинстве случаев копия диска, защищенного StarForce, не опознается как
эригинальный диск, какой бы программой ни выполнялось копирование.
Гак как же StarForce опознает оригинальный диск? Правильный ответ на
этот вопрос знают только разработчики, однако в форуме поддержки
Daemon Tools можно найти высказывание, что StarForce использует инфор-
иацию об углах между секторами и метод получения этой информации со-
вместим с 99.9 % приводов CD-ROM (StarForce uses angle info and the method
of retrieving this makes it 99.9 % compatible with any CD-ROM).
Попробуем проверить гипотезу об определении аутентичности диска путем
измерения его угловых характеристик. Для этого смоделируем процессы,
происходящие при чтении диска.



11.3.2. Модель задержек
при чтении информации с компакт-диска
В популярных источниках легко найти описание характеристик звукового
компакт-диска.
126 Часть III. Как не надо защищать программы

Компакт-диск (КД)
КД имеет диаметр 120 мм и центральное посадочное отверстие диаметром
15 мм. Зона записи звука заключена в кольце с внутренним диаметром 50 мм и
наружным— 116 мм. Вне ее находится зона, содержащая вспомогательную
информацию, которая позволяет автоматизировать процесс воспроизведения.
Сигнал записан на дорожке, расположенной на КД в виде спирали. Шаг витков
спирали 1.6 мкм, т. е. поперечная плотность записи 625 дорожек/мм. Всего до-
рожка образует на КД 20 000 витков общей протяженностью 5 км и начинается
не у наружной границы зоны записи, как на обычных грампластинках, а у внут-
ренней.


Все вышесказанное справедливо и для компакт-дисков, на которых записа-
ны данные. Спираль разбивается на последовательно идущие сектора, дли-
ной 2352 байт каждый (16-байтовый заголовок, 2048-байтовая область дан-
ных и 288-байтовая зона коррекции ошибок). Также известно, что линейная
плотность информации вдоль спирали является постоянной на всем диске.
Для дальнейших рассуждений примем, что расстояние между дорожками
(1.6 мкм) одинаково на любых компакт-дисках, а длина сегмента спирали,
принадлежащего одному сектору, является постоянной для конкретного эк-
земпляра диска. Размеры зоны записи (внутренний и внешний радиусы) и
полезная емкость носителя могут варьироваться от одного диска к другому.
Так современные матрицы для записи КД имеют емкость от 650 до
800 Мбайт.
Положение на диске сектора с любым номером однозначно описывается
двумя характеристиками диска:
dinner — расстояние от центра диска, на котором начинается нулевой сектор
спирали;
Lsecl — длина сегмента спирали, соответствующая одному сектору.
Выведем формулы, необходимые для определения точного положения сек-
тора на диске по его номеру. Достаточно вспомнить школьный курс матема-
тики, потребуются лишь формула вычисления длины окружности и навыки
по выполнению простейших арифметических операций.
Число витков спирали N с поперечной плотностью D витков/мм от радиуса
R/ до радиуса R2 определяется формулой:
N = (R2- R,) * D
Длина спирали L в том же диапазоне радиусов выражается как:
L = п * (R2 + R,) * N = я * (R2 + R;J * (R2 - R,) * D = n * (R22 ˜ R,2) * D
Глава 11. Привязка к носителям информации 127_


Расстояние Lt от начала спирали до /'-ого сектора будет равно:
L, = / * Lsecr = л * (R2 - RinnJ) * D
Радиус Л,, на котором начинается г-ый сектор, определяется как:
R, = Sqrt (i * Lsect/D/n + Rime2)
Число витков / , от начала спирали до /-ого сектора вычисляется по формуле:
V
N, = (R, ˜ Rmner) * D = (Sqrt (i * Lsec,/ D/n + Rimer2) - Rimer) *D (1)
Целая часть Л',- задает номер витка, а дробная часть — угловое положение
сектора.
Теперь перейдем к физическим характеристикам привода.
В качестве базового тезиса при разработке компакт-дисков использовалась
идея о постоянной линейной плотности записанных данных, а значит, и
постоянной линейной скорости чтения диска. Но из-за того что длина витка
спирали зависит от радиуса, для обеспечения постоянной линейной скоро-
сти чтения угловая скорость вращения диска должна быть переменной.
И в первых приводах скорость вращения диска изменялась примерно от
500 оборотов в минуту на внутренних витках спирали до 200 оборотов в ми-
нуту на внешних, более длинных витках. Однако в настоящее время сущест-
вуют многоскоростные приводы, у которых угловая скорость вращения дис-
ка является постоянной, а линейная скорость чтения растет при переходе
к внешним виткам спирали. И, судя по всему, таких приводов большинство,
т. к. ограничения на повышение скорости передачи информации, читаемой
с компакт-диска, накладываются не столько интерфейсом между приводом
и оперативной памятью компьютера, сколько механическими свойствами
самого привода, например значительными вибрациями на больших скоро-
стях вращения. И практически нет разумных поводов для снижения скоро-
сти вращения при чтении информации с внешних витков спирали. Таким
образом, будем исходить из того, что привод, с которым мы имеем дело,
имеет постоянную угловую скорость вращения диска и двигатель привода
выключается только по истечении некоторого значительного периода вре-
мени, на протяжении которого не было ни одного обращения.
Что происходит после того, как пользовательская программа инициировала
команду чтения какого-то сектора диска? Грубо последовательность дейст-
вий может быть описана примерно следующим образом. Сначала запрос на
чтение обрабатывается драйверами операционной системы, которые пере-
дают этот запрос приводу. Привод осуществляет позиционирование голов-
ки, дожидается, пока диск не повернется до начала сектора, читает данные
с диска и передает их в память, а потом присылает извещение о том, что
операция чтения завершилась. Дальше происходит окончательная обработка
128 Часть III. Как не надо защищать программы

запроса драйверами операционной системы, и прочитанный сектор или не-
сколько последовательных секторов передаются пользовательской программе.
Точно определить, какое время занимает выполнение того или иного шага
приведенной выше схемы, не представляется возможным. Однако если пред-
положить, что длительность постобработки драйверами операционной систе-
мы не зависит от номера читаемого сектора, а привод извещает о выполнении
операции сразу по окончании чтения последнего из требуемых секторов, то
временная задержка между двумя любыми операциями чтения должна с не-
значительными допущениями укладываться в следующую формулу:
(2)
Ту = (n +fract (Щ -fract (N-)) * P,
где:
• i, j — номер сектора, следующего за последним прочитанным во время
первого или второго запроса сектором;
• Ту — задержка между окончаниями выполнения запросов;
• N-,, Nj — положения /-ого и у'-ого сектора на спирали, вычисленные по .
формуле (I); \
L
• fract (x) — дробная часть х;
О Р— период вращения диска (время, за которое происходит один полным •'
оборот);
On — произвольное целое число.
То есть задержка состоит из времени, необходимого для нескольких полных
оборотов диска, и времени на поворот диска от углового положения
fract (NJ до углового положения fract (Nj).



11.3.3. Как StarForce проверяет диск
Проверка подлинности диска состоит из нескольких этапов. Сначала чита-
ется информация о диске, установленном в приводе, и проверяется его мет-
ка тома. Затем выполняется 8 запросов на чтение случайных одиночных
секторов с номерами в диапазоне от 1 до 65 536. Результаты чтения никак
не используются, и, скорее всего, эти действия нужны для разгона диска до
номинальной скорости вращения. Затем еще раз читается (но уже не прове-
ряется) информация о диске. Все перечисленное выше проходит через драй-
вер файловой системы CDFS, никак не защищено от анализа и, следова-
тельно, наверняка не влияет на процесс аутентификации.
Все остальные обращения к диску идут на более низком уровне. В той вер-
сии StarForce, анализ которой проводится, обращения адресовались драйве-
Глава 11. Привязка к носителям информации 129

ру устройства Cdrom и представляли собой SCSI-команды. Последователь-
ность этих команд такова.
1. Чтение содержания диска (Table Of Content, TOC).
2. Чтение одиночных секторов с номерами 16, 17, 17 (дважды читается
17-ый сектор).
3. Чтение одиночных секторов с номерами 173117, 173099, 173081, 173063,
173045, 173027, 173009, 172991, 172973.
4. Чтение случайных 17 блоков по 8 секторов с номерами первого читае-
мого сектора в диапазоне примерно от 168100 до 173200.
5. SCSI-команда с кодом ОхВВ, описание которой не удалось найти в доку-
ментации, но которая, скорее всего, отвечает за управление скоростью
вращения привода.
6. Чтение одиночного сектора с номером 173117.
Причем если с первой попытки диск не опознан как оригинальный, то
шаги 3 и 4 повторяются в цикле. Значит, после выполнения шага 4 вся ин-
формация, необходимая для аутентификации диска, уже получена.
Попробуем разобраться, зачем может потребоваться каждый из шагов.
Чтение ТОС, скорее всего, требуется для определения номера сектора, с ко-
торого начинается последняя сессия мультисессионного диска. Так как сес-
сия всего одна, то в 16 и 17 секторах как раз и хранятся описания структуры
тома (метка тома, количество секторов, адрес директории диска и т. д.).
А повторное чтение сектора 17, скорее всего, используется для того, чтобы
примерно оценить порядок времени, затрачиваемого на один оборот диска.
Разница времени между двумя чтениями одного сектора должна быть кратна
длительности оборота диска.
В последовательности номеров секторов 173117, 173099, 173081, 173063,
173045, 173027, 173009, 172991, 172973 легко усматривается закономер-
ность — каждое следующее значение на 18 меньше предыдущего. Число 18
тоже явно не случайное — на том радиусе диска, где размещаются сектора
с указанными номерами, на один виток спирали помещается примерно
18 секторов. А чтение секторов в порядке убывания номера с большой веро-
ятностью используется для того, чтобы предотвратить чтение с предупреж-
дением, когда привод считывает во внутренний буфер не только заданные
сектора, но и несколько последующих, на случай если данные читаются по-
следовательно.
Получив значения восьми интервалов (между девятью операциями чтения) и
зная длительность и периодов обращения диска (полученную повторным
чтением сектора), можно с большой точностью определить скорость враще-
ния диска.
130 Часть III. Как не надо защищать программы

А дальше выполняется 17 чтений блоков со случайными номерами с целью
измерения 16 интервалов времени. Если все интервалы хорошо (с малыми
отклонениями) укладываются в формулу (2), то диск признается подлин-
ным. Если же отклонения от ожидаемых величин превышают некоторое по-
роговое значение, то проводится повторное вычисление скорости вращения
и повторное измерение задержек между чтением блоков по 8 секторов.


11.3.4. Способ обхода защиты
Чтобы заставить StarForce поверить, что в приводе стоит оригинальный
диск, надо совсем не много: чтобы задержки между чтениями соответство-
вали ожидаемым. А для этого необходимо знать точные характеристики
диска: радиус, на котором начинается спираль, и размер сектора. Для опре-
деления этих величин можно провести те же самые измерения, что прово-
дит StarForce при проверке диска, а затем варьировать начальный радиус и
размер сектора, пока не будут найдены оптимальные значения. Критерием
оптимальности, например, может служить сумма отклонений разностей уг-
лов, вычисленных по формуле (1), и углов, полученных из замеренных ин-
тервалов времени по формуле, обратной (2).
Современное оборудование (во всяком случае, оборудование бытового клас-
са) действительно не позволяет создавать копии защищенного диска, но на-
писание эмулятора, способного обмануть StarForce, не представляет сверх-
сложной задачи. Достаточно перехватывать обращения к драйверу CD-ROM
и в случае, если выполняется команда чтения, делать временною задержку,
какую мог бы иметь оригинальный диск, и только после этого возвращать
управление вызывающей программе.
В качестве практической демонстрации возможности эмуляции был разрабо-
тан драйвер, функционирующий под операционной системой Windows 2000 и
выполняющий описанные выше действия. Когда драйвер загружен,
StarForce оказывается не в состоянии отличить подделку от оригинала. Игра
стабильно запускается практически с любой копии оригинального диска,
с виртуального диска, созданного программой Daemon Tools, и даже с дис-
ков, которые похожи на оригинальный только тем, что имеют правильную
метку тома и размер области данных не менее 350 Мбайт, чтобы существо-
вали сектора с запрашиваемыми номерами.


11.3.5. Резюме по защите StarForce
StarForce, несомненно, является неординарной защитой. Ее исключитель-
ность заключается хотя бы в том, что до сих пор не существует надежного
способа быстро создавать работоспособные копии защищенных дисков.
Глава 11. Привязка к носителям информации 131

Однако проведенное исследование показывает, что для эмуляции защищен-
ного диска нужно совсем немного.
Примерно через 3 месяца после выполнения работы, результаты которой
были приведены ранее, компания Protection Technology объявила о выпуске
следующей версии своей системы защиты — StarForce Professional 3.0. Раз-
работчики утверждают, что одно из многочисленных улучшений заключает-
ся как раз в усилении противодействия эмуляции компакт-дисков.
Кстати, вскоре после появления StarForce 3.0 буквально в течение одного
месяца авторы как минимум трех эмуляторов компакт-дисков объявили
о том, что новые версии их программ способны эмулировать диски, защи-
щенные StarForce версий 1 и 2. С тех пор прошло больше года, но поддерж-
ка StarForce 3.0 так и не появилась ни в одном из эмуляторов. Так что по
состоянию на сегодняшний день, компакт-диски, защищенные при помощи
StarForce, продолжают оставаться устойчивыми к взлому.
lea 12


паратные ключи защиты
лного лет на рынке средств защиты программ от несанкционирован-
•иражирования присутствуют так называемые аппаратные ключи защиты
;les). Разумеется, компании, продающие такие устройства, иредставля-
если не как панацею, то уж как надежное средство противодействия
.ютерному пиратству. Но насколько серьезным препятствием могут
iTb аппаратные ключи?

. Классификация ключей
)атные ключи защиты можно пытаться классифицировать по несколь-
ризнакам.
рассматривать возможные типы подключения, то бывают, например,

<< Предыдущая

стр. 19
(из 39 стр.)

ОГЛАВЛЕНИЕ

Следующая >>