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

Понятие X-сектора


: Открытие феномена X-секторов произошло совершенно случайно. В процессе разработки защитных механизмов, основанных на нестандартных форматах диска, автор стремился подобрать такие искажения, которые бы корректно обрабатывались всеми моделями приводов, но в тоже время не копировались ни одним из копировщиков. Эксперименты шли с переменным успехом и многие из защитных механизмов "понуро сходили с дистанции", не выдержав чудовищной жесткости испытаний. Одни из них оказывались слишком придирчивыми к оборудованию и на ряде проводов защищенные диски частично или полностью не читались; другие же копировались широко распространенными копировщиками Alcohol120% Алкоголь и Clone CDCloneCD…

Зачастую на защищаемых дисках проявлялись один или два сбойных сектора, поначалу списываемые на физические дефекты носителя. Однако, вскоре от этой гипотезы пришлось отказаться, поскольку сбойные сектора появлялись в строго определенном месте, каким при ближайшем рассмотрении и оказался предпоследний сектор области пост-зазораной области всякого трека. Да, именно тот самый сектор, чей заголовок был искажен!

Копирование X-секторов.:  Теоретически, в копировании X-секторов нет ничего сложного. Достаточно подобрать современный читающий/пишущий софт, спроектированный с учетом требований "Оранжевой книги" и знающий о существовании блоков Run-in/Run-out блоков (т. е. обнуляющий тип сектора по двум младшем битам, а не по всему полю MODE целиком). Так же, копировщик должен аккуратно переносить содержимое областей Pre-gap и Post-gap областей с оригинала на копию, игнорируя "незлобное ворчание" стандарта по поводу, что никаких пользовательских данных здесь все равно нет.

Как уже говорилось ранеевыше, копировщик Clone CDCloneCD не удовлетворяет этому требованию —– дамп с защищенного диска он снимает вполне корректно, но с "проотжигом" последнего уже не справляется. Программа Alcohol 120% снимает корректный дамп, "прожигает" корректный диск, победоносно выплевывая работоспособный дубликат.
Разумеется, речь идет лишь о копировании "водяных знаков" в чистом виде, но даже незначительное усложнение защитного механизма повергает обоих копировщиков в глубокий ужас, граничащий с глубоким "расстройством их нервной системы"ой или попросту говоря —– "зависанием".

Поскольку Clone CDCloneCD более компетентен в снятии дампов, чем Alcohol 120%Алкоголь, для создания образа защищенного диска лучше всего использовать Clone CDCloneCD, а для "прожига" —– CDRWin или /Alcohol 120%Алкоголь. Если же это не поможет, —– хакеру придется выбирать между разработкой собственного копировщика и взломом непосредственного самого защитнщенного механизма.

Эксперименты с X-сектором. Любопытным побочным эффектом становится нечитабемльность предпоследнего сектора, ранее принадлежавшему Post-gap настоящего трека (его абсолютный адрес равен &Lead--Out —– 2), —– далее по тексту именуемым X-сектором. Попытка чтения данного сектора командой READ CD приводит к возврату нестандартных сообщений об ошибке, специфичных для каждой конкретной модели привода. ДалееНиже (листинг 6.67—6.69) приведеныа SENSE INFO приводов ASUS, NEC и TEAC. SENSE-INFO, возвращенная приводом ASUS, наиболее интересна (листинг 6.67). Привод "рапортует" об ошибке чтения, но не может вразумительно объяснить, что именно послужило первопричиной ее возникновения; первый байт SENSE-INFO, равный нулю, "торжественно заявляет", что никаких ошибок здесь вообще нет!:

Листинг 6.67. SENSE-INFO, возвращенная приводом ASUS

-ERR:00 00 00 00 00 00 00 00 00 00 00 00 00 00

SENSE-INFO, возращенная приводом NEC, более информативна (листинг 6.68). SENSE KEY, равный трем, указывает на ошибку типа "MEDIUM ERROR" (ошибка носителя); значения остальных полей — увы — нестандартны (на это указывает первый байт, равный F0h) и не могут быть расшифрованы по имеющимся у автора спецификациям.



Листинг 58 SENSE-INFO, возвращенная приводом ASUS, наиболее интересна; привод рапортует об ошибке чтения, но не может вразумительно объяснить, что именно послужило первопричиной ее возникновения; первый байт SENSE-INFO, равный нулю, торжественно заявляет, что никаких ошибок здесь вообще нет!



Листинг 6.68. SENSE-INFO, возращенная приводом NEC

-ERR:F0 00 03 00 00 00 12 0A 00 00 00 00 02 00

SENSE-INFO, возращенная приводом TEAC (листинг 6.69), так же указывает на "MEDIUM ERROR" (ошибка носителя), однако никаких других подробностей извлечь не удается.

Листинг 59 SENSE-INFO, возращенная приводом NEC, более информативна. SENSE KEY, равный трем, указывает на ошибку типа "MEDIUM ERROR" (ошибка носителя); значения остальных полей – увы – нестандартны (на это указывает первый байт, равный F0h) и не могут быть расшифрованы по имеющимся у автора спецификациям;

Листинг 6.69. SENSE-INFO, возращенная приводом TEAC

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

Листинг 60 SENSE-INFO, возращенная приводом TEAC, так же указывает на "MEDIUM ERROR", однако никаких других подробностей извлечь не удается;

Зато позиционирование головки на X-сектор командой SEEK (2Bh) с последующим чтением содержимого Q-канала подкода командой READ SUBCHANNEL (42h) на всех доступных мне приводах проходит успешно.

Используя тот факт, что все известные мне копировщики лазерных дисков (включая такие программы как Clone CDCloneCD и Alcohol 120%) всегда читают субканальную информацию в общем потоке данных (т. е. получают ее посредством команды READ CD), прочитать субканальную информацию нечитаемого X-сектора они оказываются не в состоянии! Спрятав в Q-канал X-сектора ключевую метку, мы сможем легко отличить копию диска от его оригинала.

Подготовка образа защищенного диска выглядит так. Запустив любой HEX-редактор (например, HIEW) мы открываем IMAGE.SUB, содержащий субканальную информацию, и находим в нем абсолютный адрес X-сектора (в данном случае равный 00:29:31) и, убедившись, что это действительно абсолютный адрес, а не поле контрольной суммы (все поля абсолютных адресов расположены в файле IMAGE.SUB по смещению 0xxxxxx0Ch), каким-либо образом изменяем одно из полей Q-подканала данного сектора, не забыв соответствующим образом скорректировать и его контрольную сумму.


Проще всего просто переставить содержимое Q-?подканалов соседних секторов. Давайте, например, поменяем местами сектора 00:29:31 и 00:29:32 (листинг 6.70).:

Листинг 6.70. Содержимое оригинального IMAGE.SUB (местоположение будущей метки выделено полужирным шрифтом)

0003030C:  41 01 01 00 27 31 00 00 ¦ 29 31 8F AA 00 00 00 00   AOO '1  )1Пк

0003036C:  41 01 01 00 27 32 00 00 ¦ 29 32 51 1B 00 00 00 00   AOO '2  )2Q<

Листинг 61 содержимое оригинального IMAGE.SUB (местоположение будущей метки выделено жирным шрифтом)

Листинг 6.71. Содержимое "помеченного" IMAGE.SUB (метка выделена полужирным шрифтом)

0003030C:  41 01 01 00 27 32 00 00 ¦ 29 32 51 1B 00 00 00 00   AOO '2  )2Q<

0003036C:  41 01 01 00 27 31 00 00 ¦ 29 31 8F AA 00 00 00 00   AOO '1  )1_Є

Листинг 62 содержимое "помеченного" IMAGE.SUB (метка выделена жрным шрифтом)

Теперь запишим измененный образ на диск и убедимся, что субканальная метка действительно присутствует (листинг 6.72).:

Листинг 6.72. Ключевая метка в Q-канале X-сектора (выше) и

незащищенный диск (ниже)

>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 08 09 00 00 08 09 00 15 00 0C 01 14 01 01 00 00 08 09 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 09 00 00 08 08

Листинг 63 ключевая метка в Q-канале x-сектора (слева) и незащищенный диск (справа)

Смотрите, субканальная информация сектора 2056 (808h в шестнадцатеричной нотации), утверждает, что LBA-адрес данного сектора равен 809h (2057 в десятичной нотации), т. е. субканальная информация действительно искажена! Взяв для контраста любой незащищенный диск, мы убедимся, что его субканальная информация верна.

Как уже говорилось ранеевыше, копировщик Clone CDCloneCD не использует команду READ SUBCHANNEL, а получает субканальную информацию в общем потоке данных.


Столкнувшись с нечитабельным X-сектором, Clone  CDCloneCD самостоятельно восстанавливает его субканальную информацию, такой, какой по его мнению она должна быть. Короче говоря, при копировании диска копировщиком Clone CDCloneCD наша ключевая метка "умирает" и Q-канал X-сектора теперь содержит "верные" данные.

Не верите —– смотрите сами (листинг 6.73).:

Листинг 6.73. Субканальная информация X-сектора оригинального диска (выше) и

его копии, полученной с помощью CloneCD (ниже)

>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 08 09 00 00 08 09         00 15 00 0C 01 14 01 01 00 00 08 09 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 09 00 00 08 08

Листинг 64 субканальная информация x-сектора оригинального диска (слева) и его копии, полученной с помощью Clone CD (справа)

Для получения более детальной информации давайте запустим Clone CDCloneCD и, убедившись что защищенный диск все еще находится в приводе, нажмем на "чтение CD в файл-образ". Субканальная информация, добытая Clone CDCloneCD существенно варьируется от одного привода к другому, но во всех случаях она оказывается неверна (сравните это с субканальной информацией, приведенной в листингахе  $-6.67—6.69). Привод ASUS, не поддерживающий режим возвращения субканальных данных в общем потоке, заставил CloneCD их восстаналивать самостоятельно, использя для этой цели информацию из секторных заголовков. Как следсвтие — ключевую метку как "ветром сдуло" (листинг 6.74).

Листинг 6.74. Содержимое возвращенного Х-сектора, привод ASUS

000302AC:  41 01 01 00 27 31 00 00 ¦ 29 31 8F AA 00 00 00 00   AOO '1  )1Пк

0003030C:  41 01 01 00 27 32 00 00 ¦ 29 32 51 1B 00 00 00 00   AOO '2  )2Q<



Привод NEC на таком диске вообще "поехал крышей", возвращая "мусор" вместо субканальных данных (листинг 6.75).

Листинг 65 Привод ASUS, не поддерживающий режим возвращения субканальных данных в общем потоке, заставил Clone CD их восстаналивать самостоятельно, использя для этой цели информацию из секторных заголовков. Как следсвтие – ключевую метку как ветром сдуло.

Листинг 6.75. Содержимое возвращенного Х-сектора, привод NEC

000302AC:  01

01 01 00 00 00 00 00 ¦ 02 00 5A 28 00 00 00 00   OOO     O Z(

0003030C:  01

01 01 00 00 00 00 00 ¦ 02 00 5A 28 00 00 00 00   OOO     O Z(

Привод TEAC корректно возвратил субканальную информацию сектора (X-сектор+1), но конкретно "обломался" на самом X-секторе (листинг 6.76).

Листинг 66 Привод NEC на таком диске вообще поехал крышей, возвращая мусор вместо субканальных данных

Листинг 6.76. Содержимое возвращенного Х-сектора, привод TEAC

0003030C:  41 01 01 00 27 31 00 00 ¦ 29 31 8F AA 00 00 00 00   AOO '1  )1Пк

0003030C:  41 01 01 00 27 31 00 00 ¦ 29 31 8F AA 00 00 00 00   AOO '1  )1Пк

Листинг 67 Привод TEAC корректно возвратил субканальную информацию (x?сектор)+1 сектора, но конкретно обломался на самом x-секторе!

Таким образом, защита типа "фиктивный трек в Post-gap настоящего трека с меткой в Q-канале подкода предпоследнего сектора в Post-gap" (кодовое имя защиты : "Лиса") не копируется ни одним известным мне копировщиком лазерных дисков и в тоже время не конфликтует ни с каким доступным мне оборудованием (да она и не должна ни с чем конфликтовать!), поэтому "Лису" можно считать достаточно качественной и надежной защитой.

Тем не менее, не стоит переоценивать ее стойкость ко взлому. Взломать "Лису" не просто, а очень просто! Давайте, воспользовавшись парой команд SEEK и READ SUBCHANNAL, прочитаем субканальную информацию всего диска целиком и сверим ее с содержимым файла IMAGE.SUB, созданного Clone CDCloneCD или аналогичным ему копировщиком.Вообще-то, считывать всю субканальную информацию совершенно ни к чему, —– достаточно проверить на предмет "вшивости" одни лишь сбойные сектора —– те, что Clone CDCloneCD не смог прочесть. Обнаружив ключевую метку, просто скорректируйте соответствующие поля в файле IMAGE.SUB файле и "запишите" модифицированный образ на диск CD-R/CD-RW диск. Все! Теперь, с точки зрения защиты, копия и оригинал будет совершенно идентичны друг другу и "Лиса", "стыдливо махнув своим огненным хвостом, скроется в лесу"… Единственная проблема состоит в том, что команда READ SUBCHANNAL возвращает субканальную информацию в несколько кастрированном узезанном виде —– без следов наличия контрольной суммы[Y186] [n2k187] .  и


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