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

Фиктивный трек в Lead-outLead-Out


Фиктивный трек, размещенный в области Lead-outLead-Out, не препятствует нормальному чтению диска, но серьезно озадачивает штатных копировщиков. Во-первых, длина фиктивного трека, вычисляемая как разность стартовых адресов Lead-outLead-Out и самого этого трека минус sizeof(post-gap), в данном случае выражается отрицательным числом, а мы уже знаем какую головную боль для копировщиков представляет всякая отрицательная величина! Во-вторых, содержимое области Lead-?out в силу его недоступности на сектором уровне, очень легко принять за плохой сектор (badsector)'a со всеми вытекающими отсюда последствиями. В-третьих, предпоследний сектор области Post-gap'a подлинного трека (условно называемый нами X-сектором), по загадочным причинам не обрабатыается ни командой READ CD, ни командой SEEK, ни командой READ HEADER.

Обратимся к pointуказателю'у A2h, хранящему адрес выводной области, и скопируем принадлежащие ему PMin, PSec и PFrame в соответствующие поля фиктивного сектора, увеличив PSec последнего на единицу или любую другую величину, находящуюся в границах области Lead-outLead-Out'a.

Пропустив традиционное ругательство программы Clone CDCloneCD на ненормальную длину второго трека, мы "заливаем" модифицированный нами образ на диск CD-R/CD-RW диск. Как и в предыдущем примере, приводы NEC и TEAC "видят" все, доступные им сессии, а ASUS только первую из них, поэтому на вторую и последующие сессии мы не должны закладыватьсярасчитывать.

Копировщики Stop Record Now! и Ahead Nero откажутся копировать такой диск, а информация окна "Disk iInfo", возращенная последним, окажется некорректнойа (см. рис. 6.100x072). Конкретно: копировщик Ahed Nero не сможет определить режим (mode)MODE и длину третьего трека. Странно! Третий трек вообще не имеет никакого отношения к первым двум и для определения егое атрибутов достаточно просто прочитать TOC.

Рис. 6.10. унок 5 0x072 Ahead Nero неправильно определил длину второго —– фиктивного —– трека и, что увидительно, не справилься с определением длины и mode третьего трека, лежащего совсем в другой сессии


Попытка копирования защищенного диска с помощью программы Alchol 120% ни к чему хорошему не приводит. Если галочка флажок "Пропуск ошибок чтения" была сброшена, то на экране появляется сообщение возникает "Ошибка: [05/64/00] – Illegal Mode For This Track" и процесс создания образа аварийно прерывается (см. рис. 6.110x100).



Рис. 6.11. унок 6 0x100 Alcohol 120% Алкоголь без пропуска ошибок

Листинг 6.18. Реакция Alcohol 120% на фиктивный трек в области Lead-Out

(режим пропуска ошибок выключен)

 01:25:17 Информация о процессоре:



         Pentium III (0.18 um) 256KB OnDie L2 Cache (736 MHz)

 01:25:17 Дамп диска: (G:) TEAC CD-W552E (1:1)

 01:25:18 Режим чтения: Режим RAW

 01:25:18 Информация об источнике:  Сессия: 2, Трек: 3, Длина: 29.6 MB / 003:22:23

 01:25:18 Запись файла-образа: L:\CD-hack\030713_1649.img

 01:25:20 Ошибка чтения диска: 2048

 01:25:20 Во время дампа диска произошла ошибка!

 01:25:20 Ошибка:  [05/64/00] - Illegal Mode For This Track

 01:25:20 L:\CD-hack\030713_1649.ccd: Запись файла-образа отменена!

Листинг 10 реакция Алкоголя на фиктивный трек в Lead-Out (пропуск ошибок выключен)

Если же опция режим "пропуска ошибок чтения" была включен (листинг 6.19)а, то создание образа как будто бы проходит успешно, пускай не без "пулеметной очереди" сбойных секторов, начинающихся с адреса 2058 и заканчивающихся адресом 2172 (очевидно, что эти сектора принадлежат области Pre-gap/Post-gap области фиктивного трека, тщетно "пытаемой" Alcohol 120%Алкоголем).

Листинг 6.19. Реакция Alcohol 120% на фиктивный трек в области Lead-Out

(режим пропуск ошибок включен)

01:32:11 Информация о процессоре:

         Pentium III (0.18 um) With 256 KB On-Die L2 Cache  (736MHz)

 01:32:11 Дамп диска: (G:) TEAC CD-W552E (1:1)

 01:32:12 Режим чтения: Режим RAW , Пропуск ошибок чтения

 01:32:12 Информация об источнике:  Сессия: 2, Трек: 3, Длина: 29.6 MB / 003:22:23



 01:32:12 Запись файла-образа: L:\CD-hack\030713_1649.img

 01:32:21 Ошибка чтения диска: 2056

 01:32:21 Ошибка чтения диска: 2058

 01:32:21 Ошибка чтения диска: 2059

 01:32:21 Ошибка чтения диска: 2060

 …

 01:32:22 Ошибка чтения диска: 2169

 01:32:22 Ошибка чтения диска: 2170

 01:32:22 Ошибка чтения диска: 2171

 01:32:22 Ошибка чтения диска: 2172

 01:32:32 L:\CD-hack\030713_1649.ccd: Запись файла-образа завершена!

 01:32:32 Дамп диска завершён!

Листинг 11  реакция Алкоголя на фиктивный трек в Lead-Out (пропуск ошибок включен)

На что он надеялся —– неизвестно, но образ, созданный Alcohol 120% Алкоголиком оказывается неработоспособным и выдает ошибку типа "Sector not fount. Cannot read folder contents" (см. рис. 6.12 ниже).:

г=========== Error ===========¬

¦      Sector not found       ¦

¦ Cannot read folder contents ¦

¦             Ok              ¦

L=============================-

Рис. 6.12. унок 7 Диск, скопированный Alcohol 120% Алкоголем становится нечитаемымбельным и при попытке просмотра его содержимого операционная система начинает "жутко ругаться" материться

Зато Clone CDCloneCD копирует такой диск без каких- либо ошибок и его дубликат оказывается вполне работоспосбен, однако, он все-таки отличается от оригинала. Чтение X-сектора командой READ CD по-прежнему возращает ошибку, но вот позиционирование головки командой SEEK и чтение заголовка командой READ HEADER выполняется нормально (напоминаем, что X-сектор оригинального диска не обрабатывался ни одной из этих команд!).

Листинг 6.20. Попытка чтения X-сектора оригинального диска командой READ CD дает ошибку Sense Key == 3 MEDIUM ERROR (выше), дубликат диска, полученный CloneCD ведет себя аналогично (ниже)

>cd_raw_read.exe 1.1 2056 1                     >cd_raw_read.exe 1.1 2056 1

-ERR:F0 00 03 00 00 00 00 0A 00 00 00 00 11 00 -ERR:F0 00 03 00 00 00 00 0A 00 00 00 00 11 00



>cd_raw_read.exe 1.1 2056 1

-ERR: F0 00 03 00 00 00 00 0A 00 00 00 00 11 00

Листинг 6.21. Попытка чтения заголовка оригинального диска командой READ HEADER дает ошибку Sense Key == 5 ILLEGAL REQUEST (выше), в то время как дубликат диска, полученный CloneCD обрабатывается нормально (ниже)Листинг 12 попытка чтения x-сектора оригинального диска командой READ CD дает ошибку Sense Key == 3 MEDIUM ERROR (слева), дубликат диска, полученный Clone CD ведет себя аналогично (справа)

>read.header.exe 1.1 2056 2056                  >read.header.exe 1.1 2056 2056

READ HEADER (44h) SCSI/ATAPI commad demo by KK          READ HEADER (44h) SCSI/ATAPI commad demo by KK

-ERR:f0 00 05 00 00 00 00 0a 00 00 00 00 64 00          LBA:0808h

--> MSF:00:1D:1F (MODE-1 [L-EC symb])

>read.header.exe 1.1 2056 2056

READ HEADER (44h) SCSI/ATAPI commad demo by KK

LBA:0808h

--> MSF:00:1D:1F (MODE-1 [L-EC symb])

Попытка позиционирования на X-сектор оригинального диска командой SEEK, с последующим чтением субканальной информации командой READ SUBCHANALL приводит к тому любопытному эффекту (листинг 6.22): привод не диагностирует ошибку, но и не перемещает оптическую головку, возвращая с командой READ SUBCHANALL субканальные данные с места ее предыдущего позиционирования (выше). Дубликат диска, полученный программой CloneCD, напротив, никак не препятствует позиционированию головки на X-сектор, успешно возвращая субканальные данные последнего (ниже).

Листинг 6.22. Попытка позиционирования на X-сектор оригинального диска командой SEEK, с последующим чтением субканальной информации командой READ SUBCHANALL (выше). Дубликат диска, полученный CloneCD (ниже)Листинг 13 попытка чтения заголовка оригинального диска командой READ HEADER дает ошибку Sense Key == 5 ILLEGAL REQUEST (слева), в то время как дубликат диска, полученный Clone CD обрабатывается нормально



>seek_and_Q.exe 1.1 2056                                >seek_and_Q.exe 1.1 2056

seek CD-ROM & read Q-subcode by KK                      seek CD-ROM & read Q-subcode by KK

00 15 00 0C 01 14 01 01 00 00 05 83 00 00 05 83         00 15 00 0C 01 14 01 01 00 00 08 08 00 00 08 08

>seek_and_Q.exe 1.1 2056

seek CD-ROM & read Q-subcode by KK

00 15 00 0C 01 14 01 01 00 00 08 08 00 00 08 08 

Листинг 14 попытка позиционирования на x-сектор оригинального диска командой SEEK, с последующим чтением субканальной информации командой READ SUBCHANALL приводит к тому любопытному эффекту: привод не диагностирует ошибку, но и не перемещает оптическую головку, возвращая с командой READ SUBCHANALL субканальные данные с места ее предыдущего позиционирования (слева). Дубликат диска, полученный Clone CD, напротив, никак не препятствует позиционированию головки на x?сектор, успешно возвращая субканальные данные последнего (справа)

Таким образом, помещение фиктивного трека в область Lead-outLead-Out вкупе с обработкой X-сектора командами READ HEADER и SEEK/READ SUBCHANALL позволяет надежно отличить оригинальный диск от его копии (защита с кодовым наменованием "Волк").

Как скопировать "Волка"? При записи отредактированного образа на диск, Clone CDCloneCD выдаст следующую информацию о его геометрии (листинг 6.23).:

Листинг 6.23. Встретив диск с фиктивный треков в области Post-gap, CloneCD неправильно вычисляет его длину (выделена полужирным шрифтом)

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

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

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

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

Track 2: Данные Mode 1, размер: 4294672626 Кбайт

 

Листинг 15 встретив диск с фиктивный треков в post-gap, Clone CD неправильно вычисляет его длину (выделена жирным шрифтом)

По скромному мнению Clone CDCloneCD, длина второго трека составляет целых 4 .294 .672 .626 Ккилобайт или 4 Ттерабайт! К счастью, это ничуть не мешает "прожигу" диска и если все было сделано правильно, то защищенный диск должен нормально обрабатываться операционной системой.



А вот Ahead Nero (рис. 6.13) ( и подавляющее большинство остальных копировщиков) поведет себя иначе, наотрез отказываясь "переваривать" фиктивный трек и аварийно завершая свою работу с криком "Illegal track mode" (неверный тип трека) или что-то типа того.



Рис. 6.13. унок 8 0x0342 Информация, выдаваемая Ahead Nero при анализе геометрии защищенного диска, чудовищная ошибка определения длины фиктивного трека препятствует его нормальному копированию

Копировщик CRWin по не совсем понятным причинам отказывается определять тип фиктивного трека (рис. 6.14) (хотя тип трека явно прописан в заголовках каждого из принадлежащему ему секторов) и препятствует его select'у, то есть попросту говоря выделению курсором, без которого трек извлекчаться ни за что не будет. Извлечение первого —– вполне нормального трека —– так же прерывается сообщением об ошибке.



Рис. 6.14. унок 9 0х343 Копировщик CDRWin отказывается определить тип фиктивного трека

А теперь попытаемся скопировать защищенный диск программой Alcohol 120%Алкоголем. Если галочка флажок "пропуска ошибок" не была заблаговременно установленвзведена, то Alcohol 120%Алкоголик, невнятно "ругнувшись", выведя сообщение типана "Illegal Mode For This Track", просто прервет чтение диска в самом начале снятия образа (листинг 6.24).:

Листинг 6.24. Alcohol 120% без пропуска ошибок

 02:40:38 Информация о процессоре: Pentium III (0.18um) 256KB OnDie L2Cache (736MHz)

 02:40:38 Дамп диска: (G:) TEAC CD-W552E (1:1)

 02:40:46 Режим чтения: Режим RAW

 02:40:46 Информация об источнике:  Сессия: 2, Трек: 3, Длина: 29.6 MB / 003:22:23

 02:40:53 Запись файла-образа: L:\CD-hack\030713_1649.img

 02:40:58 Ошибка чтения диска: 2048

 02:40:58 Во время дампа диска произошла ошибка!

 02:40:58 Ошибка:  [05/64/00] - Illegal Mode For This Track

 02:40:58 L:\CD-hack\030713_1649.ccd: Запись файла-образа отменена!



Листинг 16 Алкоголь без пропуска ошибок

Хорошо, галочка флажок "Пропуск ошибок чтения"

установленвзведена. Пытаемся скопировать защищенный диск опять. Благополучно достигнув X-сектора (LBA-адрес которого составляет 2056), программа Alcohol 120% Алкоголик выдает сообщение об ошибке чтения и… со всего маху "врезается" в выводную область, обдавая нас "пулеметной очередью" сбойных секторов. Достигнув 100% он по непонятным причинам продолжает процесс чтения и дальше. Затем, видимо испугавшись, что его могут неправильно понять, блокирует кнопку "Отмена"

и… "зависает". То есть, не то, чтобы совсем "зависает" ("пулеметная очередь" сбойных секторов "раскаленными гильзами" по-прежнему продолжает устилать экран), но и остановить разбушевавшегося Alcohol 120% Алкоголика становится невозможно. Приходится его "убивать"… Тоже мне, культура программирования!, блин.

Листинг 6.25. Alcohol 120% с пропуском ошибок (при достижении 100% он "зависает", но продолжает сообщать о сбойных секторах)

 09:52:22 Информация о процессоре: Pentium III (0.18 um) 256KB OnDie L2 Cache (736MHz)

         Pentium III (0.18 um) 256KB OnDie L2 Cache (736MHz)

 09:52:22 Дамп диска: (G:) TEAC CD-W552E (1:1)

 09:52:29 Режим чтения: Режим RAW , Пропуск ошибок чтения

 09:52:29 Информация об источнике:  Сессия: 2, Трек: 3, Длина: 29.6 MB / 003:22:23

 09:52:38 Ошибка чтения диска: 0

 09:52:39 Запись файла-образа: L:\CD-hack\030713_1649.img

 09:52:53 Ошибка чтения диска: 2056

 09:52:57 Ошибка чтения диска: 2057

 09:52:57 Ошибка чтения диска: 2058



 09:53:01 Ошибка чтения диска: 2707

 09:53:01 L:\CD-hack\030713_1649.ccd: Запись файла-образа отменена!

 09:53:01 Дамп диска отменён!

Листинг 17 Алкоголь с пропуском ошибок (при достижении 100% он зависает, но продолжает чесать сбойные сектора)

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

Листинг 6.26. Alcohol 120% с быстрым пропуском ошибок

02:52:18 Информация о процессоре: Pentium III (0.18 um) With 256 KB On-Die L2 Cache  (736MHz)

         Pentium III (0.18 um) With 256 KB On-Die L2 Cache  (736MHz)

 02:52:18 Дамп диска: (G:) TEAC CD-W552E (1:1)

 02:52:25 Режим чтения: Режим RAW , Быстрый пропуск ошибочных блоков

 02:52:25 Информация об источнике:  Сессия: 2, Трек: 3, Длина: 29.6 MB / 003:22:23

 02:52:25 Ошибка чтения диска: 0

 02:52:26 Ошибка чтения диска: 1

 02:52:26 Ошибка чтения диска: 2

 02:52:26 Ошибка чтения диска: 3


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