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


Автоматическое копирование и обсуждение его результатов


Горячо любимая мной программа StompRecord Now! при попытке скопировать диск с искаженным стартовым адресом первого трека выводит сообщение "Invalid disk" и отказывается начинать операцию. В общем-то, это и не удивительно. Что можно взять с "юзерского" копировщика?

Гораздо интереснее протестировать поведение Ahead Nero  CD Speed из ее же комплекта –— популярнейшего профессионального копировщика программ. Проверка показывает, что независимо от состоянияе флажка Ignore Illegal TOC Type, находящегося во вкладке Read options

и положения остальных опций, скопировать защищенный диск никак не получается. "Нюра" (программа Ahead Nero CD Speed) из ее же комплекта выдает сообщение "Invalid track mode"

и даже не пытается начать чтение! Служебная утилита Scan Disk из программыиз Ahead Nero CD Speed из ее же комплекта так же работает некорректно и выполняет сканирование отнюдь не первого трека, но той области, в которой расположен искаженный стартовый адрес (см. рис. 6.30x064). На рисунке видно, что утилита "согласилась" на сканирование диска с искаженным стартовым адресом, однако, "залезла" совсем "не в ту степь", принявшись сканировать область диска, с адресом первого трека, указанную в TOC. Второй же трек здесь и вовсе не виден!

Рис. 6.унок 23. 0x064 Сканирование служебной утилитой Scan Disk программы Ahead Nero CD Speed à Scan Disk согласился на сканирование диска с искаженным стартовым адресом, однако, залез совсем не в ту степь, принявшись сканировать область диска, с адресом первого трека, указанную в TOC'e

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

В какой бы привод защищенный диск ни был вставлен, программа Clone CDCloneCD выдает неизменно постоянный результат, не имеющий ничего общего с реальной действительностью.
Обратите внимание (листинг 6.6), что она распознала на диске лишь одну сессию из двух (первую), да и то неправильно. По еего скромному мнению, эта сессия имеетдиск содержит всего одну сессию с общуюей протяженностью в 4,6 Ммегабайт, но зато размер единственного трека последней сессии составляет ни много ни мало –— 3,9 Ттерабайт!

Листинг 6.6. Таким видит защищенный диск копировщик CloneCD

ИНФОРМАЦИЯ О CD В ДИСКОВОДЕ:

Число сессий: 1



Занято на диске: 4726 Кбайт

Секторов: 2058

Время: 00:27:33 (мин:сек:кадр)

ИНФОРМАЦИЯ О СЕССИИ 1:

Размер сессии: 4726 Кбайт

Число треков: 1

Pregap: Данные Mode 1, размер: 103359 Кбайт

Track 1: Data, размер: 4294868664 Кбайт

 

Листинг 6 таким видит защищенный диск копировщик Clone CD. Обратите внимание, что он распознал лишь одну сессию из двух (первую), да и то неправильно

Еще до завершения процесса копирования нас начинают одолевать стойкие сомнения или, я бы даже сказал, непоколебимая уверенность, в том, что диск будет скопирован неправильно. И действительно, чего мы опасались, то мы и получили! Давайте создадим образ скопированного диска в плане сравнения копии TOC с оригиналом (листинг 6.7). Здесь несоответствующие поля выделены полужирным шрифтом.

Листинг 6.7. Образ защищенного диска, снятый программой CloneCD

[CloneCD]                     ; данные о копировщике

Version=3                     ; версия Clone CDCloneCD

[Disc]                             ; данные о диске

TocEntries=7                     ; кол-во элементов TOC'a == 7 (в оригинале было 12)

Sessions=1                         ; кол-во сессий == 1 (в оригинале было 2)

DataTracksScrambled=0       ; поле DVD

CDTextLength=0                 ; CD-Text'a в полях подкода Lead-inLead-In области нету

[Session 1]                 ; данные сессии 1

PreGapMode=1               ; тип трека == Mode 1

PreGapSubC=0               ; данных подканала – нет

[Entry 0]                     ; данные элемента TOC'a №0



Session=1                     ; элемент сессии 1

Point=0xa0                   ; номер первого трека сессии 1 в PMin/тип диска в PSec

ADR=0x01                       ; q-Mode == 1

Control=0x04               ; диск с данными, запрещенный ;-) для копирования

TrackNo=0                     ; трек, который мы сейчас читаем – это Lead-inLead-In трек (т.е. TOC)

AMin=0                       ; \

ASec=0                       ;  + - абсолютный адрес текущего трека

AFrame=0                       ; /

ALBA=-150                     ; LBA-адрес текущего трека

Zero=0                       ; это поле должно быть равно нулю, как оно и есть

PMin=1                       ; номер первого трека сессии 1

PSec=0                       ; тип диска CD-DA и CD-ROM диск в Mode 1

PFrame=0                       ; не несет никакой полезной информации

PLBA=4350                     ; номер трека представленный CloneCD как LBA-адрес, т.е. чушь

[Entry 1]                     ; данные элемента TOC'a №1

Session=1                     ; элемент сессии 1

Point=0xa1                   ; номер последнего трека сессии 1 в PMin

ADR=0x01                       ; q-Mode == 1

Control=0x04               ; диск с данными, запрещенный ;-) для копирования

TrackNo=0                     ; трек, который мы сейчас читаем – это Lead-inLead-In трек (т.е. TOC)

AMin=0                       ; \

ASec=0                       ;  + - абсолютный адрес текущего трека

AFrame=0                       ; /

ALBA=-150                     ; LBA-адрес текущего трека

Zero=0                       ; это поле должно быть равно нулю, как оно и есть

PMin=1                       ; номер последнего трека сессии 1 (в сессии только один трек)

PSec=0                       ; не несет никакой полезной информации

PFrame=0                       ; не несет никакой полезной информации

PLBA=4350                     ; номер трека представленный CloneCD как LBA-адрес, т.е. чушь

[Entry 2]                     ; данные элемента TOC'a №2



Session=1                     ; элемент сессии 1

Point=0xa2                   ; положение Lead-out области в PMin:PSec:PFrame

ADR=0x01                       ; q-Mode == 1

Control=0x04               ; диск с данными, запрещенный ;-) для копирования

TrackNo=0                     ; трек, который мы сейчас читаем – это Lead-inLead-In трек (т.е. TOC)

AMin=0                       ; \

ASec=0                       ;  + - абсолютный адрес текущего трека

AFrame=0                       ; /

ALBA=-150                     ; LBA-адрес текущего трека

Zero=0                       ; это поле должно быть равно нулю, как оно и есть

PMin=0                       ; \

PSec=29                     ;  + - абсолютный адрес Lead-out области сессии 1

PFrame=33                     ; /

PLBA=2058                     ; LBA-адрес Lead-out области сессии 1

[Entry 3]                     ; данные элемента TOC'a №3

Session=1                     ; элемент сессии 1

Point=0x01                   ; данные трека 1 сессии 1

ADR=0x01                       ; q-Mode == 1

Control=0x04               ; диск с данными, запрещенный ;-) для копирования

TrackNo=0                     ; трек, который мы сейчас читаем – это Lead-inLead-In трек (т.е. TOC)

AMin=0                       ; \

ASec=0                       ;  + - абсолютный адрес текущего трека

AFrame=0                       ; /

ALBA=-150                     ; LBA-адрес текущего трека

Zero=0                       ; это поле должно быть равно нулю, как оно и есть

PMin=10                     ; \

PSec=2                       ;  + - абсолютный адрес начала трека 1 сессии 1

PFrame=0                       ; /

PLBA=45000                   ; LBA-адрес начала трека 1 сессии 1

[Entry 4]                     ; данные элемента TOC'a №4

Session=1                     ; элемент сессии 1

Point=0xb0                   ; позиция следующий записываемой области в AMin:ASec:AFrame

ADR=0x05                       ; q-Mode == 1

Control=0x04               ; диск с данными, запрещенный ;-) для копирования



TrackNo=0                     ; трек, который мы сейчас читаем – это Lead-inLead-In трек (т.е. TOC)

AMin=2                       ; \

ASec=59                     ;  + - абсолютный адрес следующей записываемой области

AFrame=33                     ; /

ALBA=13308                   ; LBA-адрес следующей записываемой области

Zero=3                       ; кол-во pointer'ов в Mode 5

PMin=22                     ; \

PSec=14                     ;  + - абсолютный адрес максимальной записываемой области

PFrame=34                     ; /

PLBA=99934                   ; LBA-адрес максимальной записываемой области

[Entry 5]                     ; данные элемента TOC'a №5

Session=1                     ; элемент сессии 1

Point=0xc0                   ; стартовый адрес Lead-inLead-In области Hybrid диска (если он есть)

ADR=0x05                       ; Mode 5 (Оранжевая книга)

Control=0x04               ; диск с данными, запрещенный ;-) для копирования

TrackNo=0                     ; трек, который мы сейчас читаем – это Lead-inLead-In трек (т.е. TOC)

AMin=162                       ; рекомендуемая мощность лазера для

ASec=200                       ; Application code (в оригинале здесь было 128)

AFrame=224                   ; в оригинале здесь было 140

ALBA=294074                 ; LBA-"адрес" трех предыдущих полей

Zero=0                       ; зарезервировано

PMin=97                     ; \

PSec=27                     ;  + - абсолютный адрес Lead-inLead-In области Hybrid диска

PFrame=21                     ; /    ( адрес лежит за пределами диска, т.е. Hybrid-диска нет)

PLBA=-11604                 ; LBA-адрес Lead-inLead-In области Hybrid'a(вычислен с переполнением)

[Entry 6]                     ; данные элемента TOC'a №6

Session=1                     ; элемент сессии 1

Point=0xc1                   ; копия ATIP-информации

ADR=0x05                       ; -+

Control=0x04               ; -+

TrackNo=0                     ; -+



AMin=4                       ; -+

ASec=192                       ; -+

AFrame=150                   ; -+- ATIP (изменена!)

ALBA=32400                   ; -+

Zero=0                       ; -+

PMin=0                       ; -+

PSec=0                       ; -+

PFrame=0                       ; -+

PLBA=-150

[TRACK 1]

MODE=0

INDEX 1=45000

Листинг 7  образ защищенного диска, снятый программой Clone CD (несоответствующие поля выделены жирным шрифтом)

Сокращение сессий с двух до одной очень сильно смущает. Куда девалась вторая –— неискаженная(!) –— сессия вообще непонятно. И, хотя искаженные данные первого трека сохранились, оказались неожиданно измененными поля Application Code и ATIP (и это несмотря на то, что запись производилась на туже самую болванку CD-RW, что и раньше, хотя в ее "прожиг" осуществлялся различными приводами). Самое удивительное –— вместо действительного адреса выводной области программа Clone CDCloneCD указала какую-то "муть". По ее мнению абсолютный Lead-outLead-Out адрес равен 00:29:33, в то время как Lead-outLead-Out оригинального диска располагался в позиции 03:24:23, а стартовый адрес первого трека скопированного диска –— 10:02:00. Да! Адрес выводной области оказался расположенным до начала стартового адреса первого трека! Вот так копировщик –— не справился с "родной" защитой диска, но "навесил" на него свою собственную. Между прочим, диски си искаженным адресом выводной области способны выводить [Y164] механику приводов из строя на чисто физическом уровне. (подробнее см[Y165] . )

Как следствие: скопированный диск оказывается работоспособен не на всех приводах (ASUS, NEC и TEAC его прочитают, хотя увидят лишь первую сессию, а вот PHILIPS –— откажется использовать такой диск вообще), к тому же защите ничего не стоит прочитать текущий TOC и сравнить его с эталонным. Благодаря тому обстоятельству, что TOC скопированного диска оказался чудовищно искажен, становится легко отличить оригинал от его "пиратского" дубликата (конкретный пример привязки см. разд. "Пример реализации защиты на программном уровне" этой главы).



Короче говоря, "факир был пьян и фокус не удался". Что ж, попробуем обратиться за помощью к программе Alcohol  120% –— уж она-то должна наверняка с этим справиться! Действительно, Alcohol 120% видит обе сессии: как искаженную, так и неискаженную, однако по малопонятным причинам сохраняет в образ лишь вторую из них (Clone CDCloneCD сохранял первую). Ну что это за "зоопарк" такой, а? Кажется, что содержимое TOC скопированного диска можно даже и не сравнивать –— там будет далеко не то, что защита собирается ожидать. Тем не менее, вопреки всем пессимистическим предчувствиям, содержимое TOC, снятое программой Alcohol 120% практически полностью соответствует оригиналу. Единственно, в чем ошибся Alcohol 120% –— определил тип Pre-gap обоих треков не как Mode  1, но и как Mode  2 (рис. 6.4). Впрочем, в силу отсутствия в образе первой сессии (рис. 6.5), полученная с его помощью копия диска все равно оказывается неработоспособной.



Рис.унок 6. 34. 0x061 Alcohol 120% видит обе сессии защищенного диска, но…



Рис. 6.5унок 4. 0x62 Alcohol 120% копирует лишь вторую сессию, а первую нагло пропускает

А ведь заявлялось, что копировщики Clone CDCloneCD/Alcohol 120% способны копировать любые существующие на сегодняшний момент защищенные диски и вдруг на проверку оказывается, что даже такую простую защиту, которую может создать "на кончике пенька" любой программист (даже начинающий!) они преодолеть ни вместе, ни по раздельности не в состоянии! Причем, аппаратура, на которой все эти эксперименты и осуществлялись, возможность корректного копирования искаженного диска гарантированно поддерживает (сам проверял!) и потому отмахнуться физическими ограничениями приводов разработчикам обоих копировщиков уже не удастся!

Копировщик Alcohol 120% сообщает (рис. 6.6): "Размер образа НЕ соответствует Lead-Out, записанному в TOC!" (что есть прямое следствие ошибочного снятия образа копировщиком из-за искажения стартового адреса первого трека). "Адрес Lead-Out в TOC: 03:22:23.


Размер образа: 12:54:65. Для продолжения выберите одну из опций ниже!" Предлагаемые опции:

q      Сохранить TOC как на исходном CD, записать до конца файла-образа;

q      Изменить адрес Lead-out по длине файла-образа;

q      Сохранить TOC как на исходном CD записать до адреса Lead-out.



Рис. 6.6унок 5. 0x065. Сообщение выводимое программой Alcohol 120% Алкоголь говорит: "Размер образа НЕ соответствует Lead-Out, записанному в TOC! [что есть прямое следствие ошибочного снятия образа самим Алкоголем из-за искажения стартового адреса первого трека –КК]. Адрес Lead-Out в TOC: 03:22:23. Размер образа: 12:54:65. Для продолжения выберите одну из опций ниже: Сохранить TOC как на исходном CD, записать до конца файла-образа; Изменить адрес Lead-Out по длине файла-образа; Сохранить TOC как на исходном CD записать до адреса Lead-Out"

Выбираем "сохранить TOC как на исходном CD, записать до конца файла-образа" и получаем:

08:46:48 [Y166] (G:) TEAC CD-W552E (1:1): Во время записи произошла ошибка!

 08:46:48 Ошибка:  [05/26/00] - Invalid Field In Parameter List

 08:46:48 (G:) TEAC CD-W552E (1:1): Во время записи произошла ошибка!

 08:46:48 Загрузка файла-образа отменена!

 08:46:51 Во время записи произошли какие-то неполадки! Просмотрите файл с отчётом и сообщите обо всех ошибках в службу техподдержки.

Даже не вериться, что такой простой прием "ослепляет" лучшие копировщики защищенных дисков! Неужели и вправду, создания некопируемых дисков вполне осуществимо на обыкновенном бытовом оборудовании?! Да! Именно так! Конечно, не стоит путать некопируемость диска автоматическими копировщиками с принципиальной невозможностью получения его идентичной копии. В ручном режиме копирование таких дисков вполне осуществимо (правда, при условии, что ваш пишущий привод поддерживает режим RAW DAO, а читающий –— читает сектора из обоих секций) и сейчас мы продемонстрируем как.


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