Миссия: Искажение нумерации треков
Согластно стандартру ECMA-130, информационные треки должны нумероваться последовательно, начиная от единицы и кончая последним треком диска ("Track Numbers 01 to 99 shall be those of the Information Tracks in the User Data area. Consecutive Information Tracks shall be numbered consecutively. The first Information Track of the user Data area of a disk shall have Track Number 01"). Чувство здравого смысла разработчиков аппаратно-программного обеспечения придерживается такого же мнения и потому считается, что всякая система может закладываться на то, что за треком номер один следует либо трек с номером два, либо область Lead-outLead-Out (трек с номером AAh). Но ведь нумерация треков может быть легко искажена с таким расчетом, чтобы за первый треком располагался девятый или даже еще один "первый" трек!
Испытания показывают, что подавляющее большинство приводов и копировщиков на перенумерацию треков реагируют крайне неадекватно, порой вообще отказываясь распознавать такой диск или же отображая треки с данными как аудио. Неудивительно, что копирование искаженных дисков вызывает большие проблемы. Даже такие "зубры" как Clone CDCloneCD и Alcohol 120% Алкоголь оказывается не в состоянии разобраться с разметкой защищенного диска и полученные копии оказываются чудовищно искажены или же вовсе неработоспособны.
Теоритически, диск с нарушенной нумераций треков должен копироваться без проблем, поскольку номера треков в абсолютной адресации вообще не участвуют и при работе с диском на секторном уровне копировщику достаточно лишь прочитать все содержимое диска от первого читаемого сектора до последнего, даже не подозреваяя о сущестовании треков вообще. Тем не менее, на практике все обстоит иначе и подавляющее большинство копировщиков копируют диск по трекам, а не по секторам. Причем, алгоритмы анализа TOC'a зачастую тупы до ужаса и не способны справиться даже с очевидными искажениями. Любые отклонения нумерации треков от нормальной нормально вполне записываются на диск тем же Clone CDCloneCD (за исключением трека, начинающегося с номера ноль, но об этом мы поговорим позже), но для чтения искаженного диска понадобиться программа "поумннее".
Из всех известных мне программ на это способен лишь мой собственный копировщик (ну или посекторное копирование диска "вручную"), так что для защиты дисков этаот методикапримчик —– самое то!
Однако, чтобы защищенный диск не вызывал никаких конфликтов с оборудованием легальных пользователей, следует дейстовать очень осторожно, ни в коем случае не прикасаясь к нумерации треков первой сессии (т. к. зачастую это ведет к полной нечитаемости диска, подробности вы найдете далее в одноименномй разд. главе ниже"Диск, начинающийся не с первого трека" этой главы). Приятное исключение составляет лишь создание фиктивного трека с номером подлинного трека, —– защита этого типа не конфликтует ни с каким доступным мне оборудованим и, судя по всему, не должна конфликтовать ни с каким оборудованием вообще, однако, полной уверенности в этом у меня нет. Нумерацию треков второй сессии можно изменять более или менее безболезненно. В худшем случае привод просто не "увидит" треки второй сессии, но первая сессия будет доступа ему целиком.
Для изменения нумерации треков достаточно лишь изменить номер указателяpoint'а, соответствующий оригинальному номеру искажаемого трека и скорректировать значение поля PMin указателяpoint'а A1h, хранящего номер последнего трека диска (если этого не сделать, то мы получим защиту типа "некорректный номер последнего трека"). Так же следует исправить раскладку треков, содержащуюся в конеце CCD-файла. Следующий пример (листинг 6.28) демонстрирует как создать разрыв между вторым и третьим треками, увеличив номер последнего с трех до девяти. Нечетные колонки, залитые серым цветом — оригинальное содержимое CCD-файла, справа приведены измененные колонки (непосредственно сами изменения выделены полужирным шрифтом):
Листинг 6.28. Образование разрыва между вторым и третьим треками.
[Entry 8] |
[Entry 8] |
[Entry 11] |
[Entry 11] |
[TRACK 1] |
[TRACK 1] |
Session=2 |
Session=2 |
Session=2 |
Session=2 |
MODE=1 |
MODE=1 |
Point=0xa1 |
Point=0xa1 |
Point=0x03 à |
Point=0x09 |
INDEX 1=0 |
INDEX 1=0 |
ADR=0x01 |
ADR=0x01 |
ADR=0x01 |
ADR=0x01 |
||
Control=0x04 |
Control=0x04 |
Control=0x04 |
Control=0x04 |
[TRACK 2] |
[TRACK 2] |
TrackNo=0 |
TrackNo=0 |
TrackNo=0 |
TrackNo=0 |
MODE=1 |
MODE=1 |
AMin=0 |
AMin=0 |
AMin=0 |
AMin=0 |
INDEX 1=0 |
INDEX 1=0 |
ASec=0 |
ASec=0 |
ASec=0 |
ASec=0 |
||
AFrame=0 |
AFrame=0 |
AFrame=0 |
AFrame=0 |
[TRACK 3] à |
[TRACK 9] |
ALBA=-150 |
ALBA=-150 |
ALBA=-150 |
ALBA=-150 |
MODE=1 |
MODE=1 |
Zero=0 |
Zero=0 |
Zero=0 |
Zero=0 |
INDEX 1=0 |
INDEX 1=0 |
PMin=3 à |
PMin=9 |
PMin=3 |
PMin=3 |
||
PSec=0 |
PSec=0 |
PSec=1 |
PSec=1 |
||
PFrame=0 |
PFrame=0 |
PFrame=33 |
PFrame=33 |
||
PLBA=8850 |
PLBA=-1 |
PLBA=13458 |
PLBA=13458 |
[Entry 8] [Entry 8] [Entry 11] [Entry 11] [TRACK 1] [TRACK 1]
Session=2 Session=2 Session=2 Session=2 MODE=1 MODE=1
Point=0xa1 Point=0xa1 Point=0x03 à Point=0x09 INDEX 1=0 INDEX 1=0
ADR=0x01 ADR=0x01 ADR=0x01 ADR=0x01
Control=0x04 Control=0x04 Control=0x04 Control=0x04 [TRACK 2] [TRACK 2]
TrackNo=0 TrackNo=0 TrackNo=0 TrackNo=0 MODE=1 MODE=1
AMin=0 AMin=0 AMin=0 AMin=0 INDEX 1=0 INDEX 1=0
ASec=0 ASec=0 ASec=0 ASec=0
AFrame=0 AFrame=0 AFrame=0 AFrame=0 [TRACK 3] à [TRACK 9]
ALBA=-150 ALBA=-150 ALBA=-150 ALBA=-150 MODE=1 MODE=1
Zero=0 Zero=0 Zero=0 Zero=0 INDEX 1=0 INDEX 1=0
PMin=3 à PMin=9 PMin=3 PMin=3
PSec=0 PSec=0 PSec=1 PSec=1
PFrame=0 PFrame=0 PFrame=33 PFrame=33
PLBA=8850 PLBA=-1 PLBA=13458 PLBA=13458
Листинг 20 образование разрыва между вторым и третьим треками; нечтные колонки, залитые серым цветом – оригинальное содержимое CCD-файла, справа приведены измененные колонки (непосредственно сами изменения выделены жирным шрифтом).
Поскольку, большинство дисков с данными имеют лишь по одному треку на каждую сессию, то для перенумерации треков в границе одной сессии обычно приходится прибегать к созданию фиктивного трека в настоящем. Эта методика уже рассматривалась ранеевыше (см. разд. "Фиктивный трек в настоящем треке" этой главыодноименную главу) и здесь мы не будем повторяться.