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


Фиктивный трек в области данных подлинного трека


Самое простое (и, с точки зрения совместимости — – самое надежное) это расположить фиктивный трек в области данных подлинного трека, выбрав стартовый адрес фиктивного трека так, чтобы до начала следующего трека оставалось не менее 350 секторов, которыей пойдут на покрытие областей Post-gap/Pre-gap (для последнего трека сессии достаточно и 150 секторов, поскольку здесь не нужно тратиться на Pre-gap). Между стартовым адресом подлинного трека и стартовым адресом фиктивного трека также должно помещаться по меньшей мере 350 секторов, занимаемых постзазором подлинного и предзазором фиктивного трека. Нарушение этого правила приводит к усилению защиты, но и порождает определенные побочные эффекты, о которых мы поговорим позднее (см. разд. "Фиктивный трек в Post-gap подлинного трека" и "Фиктивный трек в Pre-gap подлинного трека" этой главы).

Сейчас же нас больше всего интересует как именно добавить новое Entry в файл IMAGE.CCD файл, не нарушив его работоспособности. Алгоритм создания фиктивного трека, подробно рассмотренный в предыдущеимх главеразделе, все еще представляет собой абстрактную теорию, достаточно далеко отстоящую от практики. В ходе осуществления творческого замысла на нашем пути могут встретиться различные трудности и нам придется "сразиться" с ними, или… просто обойти их.

Давайте рассмотрим самый сложный случай —– многосессионный диск. Правила хорошего тона обязывают нас скорректировать не только содержимое той сессии, к которой добавляется новый трек, но и атрибуты всех последующих сессий, поскольку нумерация треков на диске —– сквозная. Частая ошибка начинающих —– перенумеровать треки. Перенумеровать-то они перенумеруют, а вот переустановить указатели на первый и последний трек каждой сессии —– забывают. Как следствие, этого – защищенный диск перестает читаться совсем или читается неправильно (конкретное поведение зависит от "темперамента" привода на который этот диск попадет).


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

Листинг 6.14. Создание фиктивного трека – трека номер два; все изменения выделены полужирным шрифтом, значение оригинальных полей залито серым цветом (нечетные колонки)

[CloneCD]

[CloneCD]



[Entry 6]

[Entry 7]

Version=3

Version=3

Session=1

Session=1

Point=0xc1

Point=0xc1

[Disc]

[Disc]

ADR=0x05

ADR=0x05

TocEntries=12

TocEntries=13

Control=0x04

Control=0x04

Sessions=2

Sessions=2

TrackNo=0

TrackNo=0

DataTracksScrambled=0

DataTracksScrambled=0

AMin=4

AMin=4

CDTextLength=0

CDTextLength=0

ASec=120

ASec=120

AFrame=96

AFrame=96

[Session 1]

[Session 1]

ALBA=26946

ALBA=26946

PreGapMode=1

PreGapMode=1

Zero=0

Zero=0

PreGapSubC=0

PreGapSubC=0

PMin=0

PMin=0

PSec=0

PSec=0

[Session 2]

[Session 2]

PFrame=0

PFrame=0

PreGapMode=1

PreGapMode=1

PLBA=-150

PLBA=-150

PreGapSubC=0

PreGapSubC=0

[Entry 0]

[Entry 0]

[Entry 7]

[Entry 8]

Session=1

Session=1

Session=2

Session=2

Point=0xa0

Point=0xa0

Point=0xa0

Point=0xa0

ADR=0x01

ADR=0x01

ADR=0x01

ADR=0x01

Control=0x04

Control=0x04

Control=0x04

Control=0x04

TrackNo=0

TrackNo=0

TrackNo=0

TrackNo=0

AMin=0

AMin=0

AMin=0

AMin=0

ASec=0

ASec=0

ASec=0

ASec=0

AFrame=0

AFrame=0

AFrame=0

AFrame=0

ALBA=-150

ALBA=-150

ALBA=-150

ALBA=-150

Zero=0

Zero=0

Zero=0

Zero=0

PMin=1

PMin=1

PMin=2

PMin=3

PSec=0

PSec=0

PSec=0

PSec=0

PFrame=0

PFrame=0

PFrame=0

PFrame=0

PLBA=4350

PLBA=4350

PLBA=8850

PLBA=-1

[Entry 0]

[Entry 0]

[Entry 8]

[Entry 9]

Session=1

Session=1

Session=2

Session=2

Point=0xa0

Point=0xa0

Point=0xa1

Point=0xa1

ADR=0x01

ADR=0x01

ADR=0x01

ADR=0x01

Control=0x04

Control=0x04

Control=0x04

Control=0x04

TrackNo=0

TrackNo=0

TrackNo=0

TrackNo=0

AMin=0

AMin=0

AMin=0

AMin=0

ASec=0

ASec=0

ASec=0

ASec=0

AFrame=0

AFrame=0

AFrame=0

AFrame=0

ALBA=-150

ALBA=-150

ALBA=-150

ALBA=-150

Zero=0

Zero=0

Zero=0

Zero=0

PMin=1

PMin=1

PMin=2

PMin=3

PSec=0

PSec=0

PSec=0

PSec=0

PFrame=0

PFrame=0

PFrame=0

PFrame=0

PLBA=4350

PLBA=4350

PLBA=8850

PLBA=-1

[Entry 1]

[Entry 1]

[Entry 9]

[Entry 10]

Session=1

Session=1

Session=2

Session=2

Point=0xa1

Point=0xa1

Point=0xa2

Point=0xa2

ADR=0x01

ADR=0x01

ADR=0x01

ADR=0x01

Control=0x04

Control=0x04

Control=0x04

Control=0x04

TrackNo=0

TrackNo=0

TrackNo=0

TrackNo=0

AMin=0

AMin=0

AMin=0

AMin=0

ASec=0

ASec=0

ASec=0

ASec=0

AFrame=0

AFrame=0

AFrame=0

AFrame=0

ALBA=-150

ALBA=-150

ALBA=-150

ALBA=-150

Zero=0

Zero=0

Zero=0

Zero=0

PMin=1

PMin=2

PMin=3

PMin=3

PSec=0

PSec=0

PSec=24

PSec=24

PFrame=0

PFrame=0

PFrame=23

PFrame=23

PLBA=4350

PLBA=-1

PLBA=15173

PLBA=15173

[Entry 2]

[Entry 2]

[Entry 10]

[Entry 11]

Session=1

Session=1

Session=2

Session=2

Point=0xa2

Point=0xa2

Point=0x02

Point=0x03

ADR=0x01

ADR=0x01

ADR=0x01

ADR=0x01

Control=0x04

Control=0x04

Control=0x04

Control=0x04

TrackNo=0

TrackNo=0

TrackNo=0

TrackNo=0

AMin=0

AMin=0

AMin=0

AMin=0

ASec=0

ASec=0

ASec=0

ASec=0

AFrame=0

AFrame=0

AFrame=0

AFrame=0

ALBA=-150

ALBA=-150

ALBA=-150

ALBA=-150

Zero=0

Zero=0

Zero=0

Zero=0

PMin=0

PMin=0

PMin=3

PMin=3

PSec=29

PSec=29

PSec=1

PSec=1

PFrame=33

PFrame=33

PFrame=33

PFrame=33

PLBA=2058

PLBA=2058

PLBA=13458

PLBA=13458

[Entry 3]

[Entry 3]

[Entry 11]

[Entry 12]

Session=1

Session=1

Session=2

Session=2

Point=0x01

Point=0x01

Point=0xb0

Point=0xb0

ADR=0x01

ADR=0x01

ADR=0x05

ADR=0x05

Control=0x04

Control=0x04

Control=0x04

Control=0x04

TrackNo=0

TrackNo=0

TrackNo=0

TrackNo=0

AMin=0

AMin=0

AMin=4

AMin=4

ASec=0

ASec=0

ASec=54

ASec=54

AFrame=0

AFrame=0

AFrame=23

AFrame=23

ALBA=-150

ALBA=-150

ALBA=21923

ALBA=21923

Zero=0

Zero=0

Zero=1

Zero=1

PMin=0

PMin=0

PMin=22

PMin=22

PSec=2

PSec=2

PSec=14

PSec=14

PFrame=0

PFrame=0

PFrame=34

PFrame=34

PLBA=0

PLBA=0

PLBA=99934

PLBA=99934

[Entry 4]

[Entry 5]

[Entry 6]

Session=1

Session=1

Session=1

Point=0x02

Point=0xc0

Point=0xc0

ADR=0x01

ADR=0x05

ADR=0x05

Control=0x04

Control=0x04

Control=0x04

TrackNo=0

TrackNo=0

TrackNo=0

AMin=0

AMin=162

TrackNo=0

ASec=0

ASec=128

ASec=128

AFrame=0

AFrame=140

AFrame=140

ALBA=-150

ALBA=288590

ALBA=288590

Zero=0

Zero=0

Zero=0

PMin=22

PMin=97

PMin=97

PSec=0

PSec=27

PSec=27

PFrame=0

PFrame=21

PFrame=21

PLBA=-1

PLBA=-11604

PLBA=-11604

[Entry 4]

[Entry 5]

[TRACK 1]

[TRACK 1]

Session=1

Session=1

MODE=1

MODE=1

Point=0xb0

Point=0xb0

INDEX 1=0

INDEX 1=0

ADR=0x05

ADR=0x05

Control=0x04

Control=0x04

[TRACK 2]

TrackNo=0

TrackNo=0

MODE=1

AMin=2

AMin=2

INDEX 1=0

ASec=59

ASec=59

AFrame=33

AFrame=33

[TRACK 2]

[TRACK 3]

ALBA=13308

ALBA=13308

MODE=1

MODE=1

Zero=3

Zero=3

INDEX 1=0

INDEX 1=0

PMin=22

PMin=22

PSec=14

PSec=14

PFrame=34

PFrame=34

PLBA=99934

PLBA=99934

<


Листинг 6 создание фиктивного трека – трека номер два; все изменения выделены жирным шрифтом, значение оригинальных полей залито серым цветом (нечетные колонки)

Сохранив отредактированный файл IMAGE.CCD на диск, "залейте" полученный образ на болванку с помощью Clone CDCloneCD или Alcohol 120%. Убедитесь, что защищенный диск нормально обрабатывается операционной системой и что к двум прежним трекам диска добавился еще один (рис. 6.8).



Рис. 6.8.унок 3 0x071  В первой сессии находятся два трека, первый нормальный, второй — "рукотворный" фиктивный

Попытка копирования защищенного диска штатными копировщиками (такими например, как Stomp Record Now! или Ahead Nero) как будто бы проходит успешно, но при ближайшем рассмотрении между первым и вторым треком обнаруживается "дыра" из 300 секторов, заполненных нулями. Что ж! Этого следовало ожидать! Штатные копировщики слишком буквально понимают тот пункт стандарта, что утверждает будто бы области Post-gap и Pre-gap области не содержат никаких данных.

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

Листинг 6.15. Демонстрация изменения субканальной информации при копировании диска

# читаем TOC защищенного диска для определения стартового адреса 2го трека

$toc TEAC 0

00 14 01 00 00 00 00 00

00 14 02 00 00 00 02 A3 #  стартовыйй адрес 2го трека =равен 2A3h или 675 в десят.  нотац.

00 14 03 00 00 00 34 92

00 14 AA 00 00 00 3B 45

# читаем субканальные данные из 2го трека защищенного дика

$seek_and_Q TEAC 675

seek CD-ROM & read Q-subcode by KK

LBA - 02A3: 00 15 00 0C 01 14 01 01 00 00 02 A3 00 00 02 A3

# поле TNO 2го трека содержит ^^ номер один



# копируем диск Ahead Nero/Easy CD Creator/Record Now!

# или Clone CD/Alcohol 120% Алкоголем без чтения субканальной информации

#   читаем субканальные данные из 2го трека дика-копии

$seek_and_Q TEAC 675

seek CD-ROM & read Q-subcode by KK

LBA - 02A3: 00 15 00 0C 01 14 02 01 00 00 02 A3 00 00 00 00

# поле TNO 2го трека содержит ^^ номер два

# субканальная информация изменилась!

Листинг 7 демонстрация изменения субканальной информации при копировании диска

Забавно, но MP3--файл, расположенный на оригинальном диске, даже будучи жестоко продырявленнымповрежденным[n2k171] , воспроизводится вполне нормально, негромко "булькая" в месте своего "ранения", что конечно неприятно, но все таки не смертельно. Конечно, чем больше фиктивных треков содержит защищенный диск и чем теснее эти треки расположены друг к другу, – тем сильнее несанкционированный дубликат будет отличаться от оригинала. Копия диска, "нашпигованного" фиктивными треками "по самую макушку" уже не играет, а свистит и булькает, вызывая у доморощенных пиратов смесь злости с недоумением. Вот так и рождаются легенды о неизбежном падении качества при копировании лазерных дисков. Разумеется, речь идет исключительно о дисках с формата [n2k172] MP3- или видеодисках. Диски с данными гораздо более ранимы и если "дыра", оставленная копировщиком попадет на исполняемый файл и/или архив, с вероятностью близкой к единице он окажется полностью выведеным из строя.

Впрочем, стойкость защиты данного типа очень и очень невелика и такой диск вполне успешно копируется копировщиками Alcohol 120% Алкоголь и Clone CDCloneCD (конечно, при условии, что опция чтения субканальных данных включена), которые судя по всему вообще игнорируют стартовые адреса треков и читают всю читабельную область каждой сессии от конца Lead-inLead-In до начала Lead-outLead-Out целиком. Что ж! Тем хуже для тех, кто применяет эту защиту для затруднения копирования своих программ.Что же касается хваленого Blind Write, то он вообще не копирует такой диск, вылетая по исключению (exceptionэкскепшену) в читающем устройстве,[n2k173]  (цитирую,) "read engine". Чем ему не понравился фиктивный трек —– загадка!?.


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