Правильное снятие топологии и образа диска с помощью ALCOHOL!

Считывание ключa StarForce KEYLESS программой ISO Commander!

Описание проверки защитой StarForce3 дисков на подлинность.

Описание проверки защитой StarForce3 дисков на подлинность.

Статья была любезно предоставлена AlB (статья размещена 02.07.2005)


Данная статья не претендует на подлинность предоставленных в ней данных, и может рассматриваться только как набор цифр и букв русского и латинского алфавитов.
Этой статьей автор не принимает на себя никакой ответственности и не берет никаких обязательств, также он никак не ограничивает любое распространение любой информации из этой статьи. То есть «отказываюсь от всех прав на статью».

Описание проверки компакт дисков защитой StarForce

В данной статье описывается защита от копирования компакт дисков (далее CD) "StarForce Professional 3.x" (далее SF) компании "Protection Technology" (за границей известной как "StarForce Technologies"), а точнее то, как эта защита проверяет CD на подлинность.

Глава 1. Общее описание действий SF

Приемы и особенности SF:

1. Проверка драйверов SF и их обновление;
2. Обнаружение IDE контроллера и работа с ним напрямую, минуя драйвера, что оставляет все существующие программы эмуляции в стороне;
3. Обнаружение CD-ROM приводов на IDE и прочих контроллерах и работа с ними на уровне ATAPI команд;
4. Проверка заголовка CD;
5. Проверка происхождения CD (CD-ROM/CD-R/CD-RW) в пишущих CD-приводах;
6. Проверка физических параметров CD;
7. Блокировка файловой системы при выполнении п.5;
8. Проверка (контрольной суммы) данных в прочитанных секторах п.5.


Этапы проверки SF и их назначение:

1. Проверка драйверов SF и его обновление.
В случае обнаружения модифицированного драйвера или драйвера старой версии SF производит повторную установку драйвера, для пользователя это проявляется сообщением об установке защиты и просьбой перезагрузиться;

2. Поиск IDE контроллера и CD-ROM на нем.
Данный этап очень важен, именно благодаря нему SF получил от народа зыбкое звание неломаемой защиты. Объясняю, во-первых, при обнаружении CD-ROM на IDE контроллере SF требует вставить диск именно в него, а во-вторых, при наличии CD в CD-ROM на IDE контроллере SF может сделать с ним что угодно, например, легко разоблачить RMPS CD;

3. Поиск CD в CD-ROM и проверка его заголовка.
Зачастую после этого этапа пользователь получает сообщение «Вставьте диск в привод», когда CD отсутствует или это RMPS CD в CD-ROM на IDE контроллере, или «Вставьте диск в другой привод», когда CD вставлен не в обнаруженный CD-ROM на IDE контроллере;

4. Проверка данных, физических параметров и происхождения CD.
Проверка физических параметров это тема следующей главы.
Проверка происхождения диска происходит за счет команды чтения ATIP, эти данные присутствуют только на CD-R/RW CD и не могут быть считаны не пишущими CD-ROM. Также существует возможность блокировать чтение ATIP с помощью программы «Alcohol 120%», но и она бессильна, в случае если CD-ROM находится на IDE контроллере. В случае провала данного этапа пользователь получит сообщение о неверном ключе и диске.

Здесь осталось только заострить внимание на методах борьбы с виртуальными дисками:
А: Блокировка файловой системы, что приводит к невозможности чтения образов дисков и неработоспособности виртуальных CD-ROM.

Известны и методы обхода:
а1. Использование модифицированных драйверов SF.
Автору известен только один, версии 1.24, который был срочно обновлен и навязан новыми играми и их патчами;

а2. Неполный образ.
Нет данных в образе – нет необходимости их читать. Нет необходимости их читать – нет чтения. Нет чтения – нечего блокировать. Однако при этом виртуальный CD-ROM продолжает эмулировать физические параметры диска, что приводит к запуску игры;

Б: Проверка данных CD.
Эта проверка возникла как логически верный способ предотвращения обхода блокировки файловой системы. Вероятно, происходит подсчет и проверка только контрольной суммы, но, так или иначе, стало невозможным использование неполных образов.



Подведём итоги первой главы в виде возможных обходов SF:
1. Пишущий CD-ROM на IDE контроллере:
а. Оригинальный диск.

2. Не пишущий CD-ROM на IDE контроллере:
а. Оригинальный диск;
б. Лотерея «Угадайка», подбор CD-R/RW диска с подходящими физическими параметрами.

3. Отсутствие CD-ROM на IDE контроллере и его присутствие на не-IDE контроллере:
а. Оригинальный диск;
б. «Угадайка», если CD-ROM – пишущий, то необходима программа блокировки чтения ATIP;
в. CD с RMPS информацией – отличный вариант. Смотрите, стоимость не-IDE PCI PATA/SATA контроллеров упала до неприличия (бывают и «на халяву», встроенные, чипсетные), а PATA-USB переходников (читай «не-IDE контроллер») еще ниже.

4. Отсутствие CD-ROM на IDE контроллере, наличие виртуального CD-ROM и образа оригинального диска с верными DPM:
а. Полный образ на локальном жестком диске.
Вопрос: «Оно когда-нибудь САМО работало?». Впрочем, если вы согласны помочь виртуальному CD-ROM, то попробуйте модифицированный драйвер SF версии 1.24;
б. Полный образ на сетевом диске.
Да, когда-то этот способ работал, потом блокировку файловой системы усовершенствовали. См. модифицированный драйвер SF версии 1.24;
в. Неполный образ.
Работает при отсутствии проверки целостности данных;



Глава 2. Проверка SF физических параметров CD

По ходу главы будут приводится примеры. Примером везде является диск с меткой «SR2D1» (первый диск игры «Космические рейнджеры - 2»).
Суть проверки заключается в измерении времени чтения секторов при определенном порядке их чтения. Всего SF производит 40 попыток снять физические параметры диска. Каждая попытка представляет собой 140 команд чтения сектора (139 интервалов времени) разбитых на 4 этапа. Давайте посчитаем этапы, сектора и интервалы времени:

1. Чтение первого сектора. Например «SR2D1»: 227692.
Далее чтение 100 секторов в обратном порядке с постоянным шагом равным количеству секторов на виток (далее – SPR) в данной области (например «SR2D1», 19). На выходе получаем 100 интервалов времени. Например «SR2D1»: 227673, 227654...225592.

2. Чтение 16 секторов в обратном порядке с шагом от -2 до -(SPR в данной области + 1). Итого получаем 16 интервалов времени. Например, для «SR2D1»: 225790, 225787, 225782, 225776, 225769, 225761, 225752, 225741, 225729, 225716, 225702, 225687, 225671, 225653, 225634, 225614.
Далее чтение последнего сектора первого этапа. Например, для «SR2D1»: 225792. Т.е. прыжок обратно на конец первого этапа. Интервал времени имеем, но он не нужен;

3. Чтение 6 секторов в прямом порядке с большим шагом (переход в новую область). Например «SR2D1»: 243287, 260780, 278273, 295766, 313259, 330752. Получаем 6 интервалов времени;

4. Чтение 16 секторов в обратном порядке с шагом от -2 до -(SPR в данной области (например, для «SR2D1» – 22) + 1). Например, для «SR2D1»: 330750, 330746, 330741, 330734, 330726, 330717, 330706, 330694, 330681, 330666, 330650, 330633, 330614, 330594, 330572, 330549. Итого получаем 16 интервалов времени.


Номера всех секторов можно вычислить, изначально зная всего 4 значения:
1. Номер последнего сектора первого этапа (читать как «начало второго этапа»). Кратен 256. Например «SR2D1»: 225792;
2. Количество секторов на виток в области первого и второго этапов. Целое. Например «SR2D1»: 19;
3. Номер последнего сектора третьего этапа (читать как «начало четвертого этапа»). Кратен 256. Например, для «SR2D1»: 330752;
4. Количество секторов на виток в области четвертого этапа. Целое. Например, для «SR2D1»: 22.

Из этих величин тривиально вычисляются все остальные номера секторов, точность шага для 2-го и 4-го этапов не представляет проблемы для вычислений. 6 шагов 3-го этапа получаются целым делением необходимого интервала (Число №3 – Число №1) на 6.

Теперь рассмотрим поэтапно, какую информацию и как можно добыть из полученного мусора (однако, это не означает, что именно так действует SF, это только показывает, какие у него есть возможности):

1. Имеем 100 значений интервалов времени. Если информация о SPR для данной области была верна (у CD одинаковой емкости на секторах с одинаковыми номерами она лежит в пределах 1%), то получается, что все значения кратны времени оборота диска (t1). В идеале каждый интервал должен быть приблизительно равен времени оборота диска, но из-за того, что привод может делать при чтении более одного оборота (особенно на больших скоростях), условно считаем полученные значения кратными времени оборота.
В принципе из этого уже можно вытащить t1 (например, случай, когда все значения равны 2*t1 и 3*t1), но гарантии нет (пример, когда все значения равны или кратны 2*t1). Поэтому довольствуемся значением t2, которое кратно t1, т.е. t2=t1*N, где N – целое число 1,2,3…

2. Второй этап, как и четвертый, можно использовать для вычисления SPR в данной области диска и для получения действительного значения времени оборота диска (t1). Отклонение полученных значений от действительности составляет сотые доли процента.
Полученные на этом этапе значения можно изобразить графически, все они будут расположены на семействе равноудаленных друг от друга параллельных прямых:


На рисунке 1 все линии пересекают оси в точках, кратных t1 и spr.
Все экспериментальные значения жмутся к оси шага настолько, насколько это позволяет механика CD-ROM.
Например «SR2D1» (виртуальный CD-ROM, шаг непринципиально отличается от SF):
225790 (-2) 29.072 мс;
225787 (-3) 27.360 мс;
225782 (-5) 23.938 мс;
225776 (-6) 22.228 мс;
225769 (-7) 20.517 мс;
225761 (-8) 18.805 мс;
225752 (-9) 17.094 мс;
225741 (-11) 46.189 мс;
225729 (-12) 44.486 мс;
225716 (-13) 42.777 мс;
225702 (-14) 41.069 мс;
225687 (-15) 39.327 мс;
225671 (-16) 37.611 мс;
225653 (-18) 34.189 мс;
225634 (-19) 32.478 мс;
225614 (-20) 30.767 мс.

Для получения точных значений SPR и t1 необходимо задействовать статистическую обработку полученных значений. Для этого можно использовать модель с линейной аппроксимацией методом наименьших квадратов. На вход модели подаются предполагаемые значения spr и t2 = x*t1. Надо заранее отнести каждое экспериментальное значение к какой-либо линии (1, 2, 3…). Ввиду возможной кратности полученного значения t2, надо построить несколько моделей по имеющимся у нас предполагаемым spr и tN=t2/N, где N=1,2,3…, определяем к каким прямым модели относятся значения, опять 1,2,3…, проводим линейную аппроксимацию МНК. Правильной моделью будет та, аппроксимация которой даст наименьшее среднеквадратичное отклонение. Полученную модель можно использовать для вычисления spr и t1 с оценкой точности вычислений.
Например «SR2D1» дает: t1=32.512 мс (дисперсия 0.011 мс), spr=18.982376, что на 0.09% меньше чем предполагаемые 19.

4. Да, именно 4-й этап, 3-й потом.
Расчет задержек 4-го этапа отличается от 2-го только тем, что первоначальная модель всего одна. Время оборота диска t1 берется со второго этапа, также используется новый предполагаемый spr. На выходе получаем точные spr и t1 для новой зоны.
Пример «SR2D1» (виртуальный CD-ROM, шаг непринципиально отличается от SF):
330750 (-2) 29.536 мс;
330746 (-4) 26.583 мс;
330741 (-5) 25.106 мс;
330735 (-6) 23.628 мс;
330727 (-8) 20.675 мс;
330718 (-9) 19.196 мс;
330707 (-11) 16.241 мс;
330695 (-12) 14.777 мс;
330682 (-13) 45.814 мс;
330667 (-15) 42.862 мс;
330651 (-16) 41.389 мс;
330634 (-17) 39.872 мс;
330615 (-19) 36.916 мс;
330595 (-20) 35.450 мс;
330573 (-22) 32.539 мс;
330550 (-23) 31.064 мс.
t1=32.488 мс (дисперсия 0.017 мс), spr=22.019807, что на 0.09% больше чем ожидаемые 22 сектора на виток.

3. Третий этап, как промежуточный между 2 и 4, является переходным. На нем производятся 6 больших скачков. Зная время оборота диска t1 на 2 и 4 этапах, можно интерполировать его через 3 этап, например, линейно по времени (при CAV режиме скорость вращения не меняется). Так можно определить не только количество оборотов между каждым чтением, но и даже относительный угол между 7 секторами на диске, который затрагивает 3 этап. Это их относительное положение очень индивидуально для каждого диска, т.к. на него влияет очень много факторов, таких как, линейная плотность записи и расстояние между витками.
Берем пример «SR2D1»:
243287 (17495) 37.986 мс;
260780 (17493) 28.173 мс;
278273 (17493) 49.398 мс;
295766 (17493) 24.493 мс;
313259 (17493) 46.262 мс;
330752 (17493) 44.718 мс.
И каждый интервал времени даст: 61, 312, 187, 271, 153, 135 градусов.


Подведем итоги второй главы в виде данных о диске, которые может узнать SF:
- плотность секторов на виток в двух заданных областях с очень высокой точностью;
- 6 значений характеризующих угловое положение 7 заданных секторов.



Глава 3. Практическая
Был произведен анализ реакции SF (да, да, «SR2D1») на изменение физических параметров CD, которые были обнаружены во второй главе. Т.е. игра «Угадайка» на качественно новом уровне.
Для анализа использовались: кучка CD-RW CD, непишущий SONY CDU5231 и несколько пишущих CD-ROM (разница между ними не выявлена).
Путем правки образа производилась установка (с точностью в 20 градусов, кто знает, тот поймёт) 6-ти угловых значений в соответствии с показаниями виртуального CD-ROM. Запись такого образа на соответствующий ему CD-RW CD приводила к опознанию CD SF в непишущем CD-ROM SONY CDU5231 как оригинального. И так на всех 5 CD-RW CD.
Изменение количества секторов на виток в пределах широко доступных CD-RW CD (были -0.3%..+0.5%) SF проигнорировал.

Также можно скачать архив с программами, которые явились конечным результатом этой статьи и должны помочь создавать рабочие CD копии.
SfCDVD, MDFBoost, MDFScan



Литература и ссылки:

1. Standard ECMA-130
2nd Edition - June 1996
Data interchange on read-only 120 mm optical data disks (CD-ROM)
URL www.ecma-international.org/publications/files/ecma-st/ECMA-130.pdf
2. INFORMATION TECHNOLOGY – (SCSI) Multimedia Commands – 5 (MMC-5)
WORKING DRAFT
INCITS XXX
T10/1675-D
Revision 1b
1 February 2005
URL www.t10.org/ftp/t10/drafts/mmc5/mmc5r01b.pdf
3. «Способы взаимодействия с диском на секторном уровне» Крис Касперски.
URL http://www.insidepro.com/kk/020/020r.shtml
URL http://www.insidepro.com/
4. URL http://www.cdru.tk/
5. URL http://www.bestmedia.kiev.ua/
URL http://www.bestmedia.kiev.ua/forum/
6. URL http://daemon-tools.cc/

(Статья размещена 02.07.2005)

Что именно представляет из себя ISOProtection?


Как уже всем известно, старфорс начиная с версии 3.33.* внедрил блокировку файловой системы, но по чистой случайности, выяснилось, что старфорс не проверял содержание диска на целостность, упущение было незамедлительно использовано ввиде мини образов (образ диска с урезанным размером)
На самом же деле, по утверждению разработчиков дэмон тулс, возможность применения образов с урезанным размером оказалась полной неожиданностью для них же самих, более того, данная возможность являлась не более чем ошибкой эмулятора. (Почаще бы таких полезных ошибок :))
Блокировка представляет из себя один дополнительный цикл, который защита проделывает после проверки физических свойств диска. В деталях, сначала читаются сектора для проверки физических свойств диска из 140 секторов, а далее уже читаются 24~ псевдослучайных "мусорных" сектора направленные на то, чтобы сделать данную блокировку измеримой и тем самым выявить эмуляцию. С появлением мини образов пользователи получили возможность обходить блокировку файловой системы, поскольку сектора больше не требовалось вычитывать из образа диска, они вовремя генерировались на лету будучи забитыми сплошь нулями и в отличие от полного образа не томились в очереди на тот промежуток времени, на который старфорс обычно включает блокировку файловой системы.
Но такая возможность могла быть использована так долго, пока старфорс не проверял их содержание. Тут то естественным шагом для защиты было добавление банальнейшей проверки некоторого количества секторов на их целостность с целью принудительного применения полного образа, ничего хитрого в этом естественно нет, тем самым и зародилась так называемая ISOProtection, что в общем то большинство других защит имели и без всякого лишнего названия.
Издатель создаёт образ диска, далее диск сканируется, случайным образом выбираются различные сектора с разным содержанием, для них генерируются контрольные суммы, далее эти суммы шифруются от посторонних глаз и уже эти шифрованные суммы внедряются в 6 секторов, которые дописываются в конец готового образа.
Можно конечно спекулировать насчёт количества секторов, для которых создавались контрольные суммы, но их строго ограниченное количество, ибо данный метод применяется как для CD, так и DVD дисков, нельзя при всём желании уместить в 12228 байт контрольные суммы, например для CD диска из 350000 секторов. Но пусть даже если их будет тысяча или меньше/больше, этого уже будет достаточно, чтобы затруднить саму возможность выявления таких секторов, ибо от игры к игре они разные, а случайно вычитываются только два сектора, а не то чтобы все подряд за раз проверялись.
Данная проверка на содержание представляет из себя дополнительный промежуточный цикл из 8ми секторов между физической проверкой из 140 секторов и цикла с псевдослучайными "мусорными" секторами, где происходит торможение. Для наглядности представлю различные логи игр, в данном случае при тестировании этого нововведения в качестве примера приведу лог с игры "Космические рейнджеры 2" до установленного обновления.
Пояснение: номера запрашиваемых секторов для наглядности представлены, как есть, в hex формате.



DPM проверка

Измерение скорости вращения с ожидаемым количеством секторов на виток 19
1 этап
03  79 6c      37ms  

03 79 59 12ms
03 79 46 7.6ms
03 79 33 7.7ms
03 79 20 6.0ms
03 79 0d 32ms
03 78 fa 32ms
03 78 e7 32ms
03 78 d4 32ms
03 78 c1 32ms
03 78 ae 32ms
03 78 9b 32ms
03 78 88 32ms
03 78 75 32ms
03 78 62 32ms
03 78 4f 32ms
03 78 3c 32ms
03 78 29 32ms
03 78 16 32ms
03 78 03 32ms
03 77 f0 32ms
03 77 dd 32ms
03 77 ca 32ms
03 77 b7 32ms
03 77 a4 32ms
03 77 91 32ms
03 77 7e 32ms
03 77 6b 32ms
03 77 58 32ms
03 77 45 32ms
03 77 32 32ms
03 77 1f 32ms
03 77 0c 32ms
03 76 f9 32ms
03 76 e6 32ms
03 76 d3 32ms
03 76 c0 32ms
03 76 ad 32ms
03 76 9a 32ms
03 76 87 32ms
03 76 74 32ms
03 76 61 32ms
03 76 4e 32ms
03 76 3b 32ms
03 76 28 32ms
03 76 15 32ms
03 76 02 32ms
03 75 ef 32ms
03 75 dc 32ms
03 75 c9 32ms
03 75 b6 32ms
03 75 a3 32ms
03 75 90 32ms
03 75 7d 32ms
03 75 6a 32ms
03 75 57 32ms
03 75 44 32ms
03 75 31 32ms
03 75 1e 32ms
03 75 0b 32ms
03 74 f8 32ms
03 74 e5 32ms
03 74 d2 32ms
03 74 bf 32ms
03 74 ac 32ms
03 74 99 32ms
03 74 86 32ms
03 74 73 32ms
03 74 60 32ms
03 74 4d 32ms
03 74 3a 32ms
03 74 27 32ms
03 74 14 32ms
03 74 01 32ms
03 73 ee 32ms
03 73 db 32ms
03 73 c8 32ms
03 73 b5 32ms
03 73 a2 32ms
03 73 8f 32ms
03 73 7c 32ms
03 73 69 32ms
03 73 56 32ms
03 73 43 32ms
03 73 30 32ms
03 73 1d 32ms
03 73 0a 32ms
03 72 f7 32ms
03 72 e4 32ms
03 72 d1 32ms
03 72 be 32ms
03 72 ab 64ms
03 72 98 32ms
03 72 85 32ms
03 72 72 32ms
03 72 5f 32ms
03 72 4c 32ms
03 72 39 32ms
03 72 26 32ms
03 72 13 32ms Ожидаемое количество секторов на виток 19 2 этап
03 72 00 32ms
03 71 fe 32ms
03 71 fb 29ms
03 71 f6 27ms
03 71 f0 23ms
03 71 e9 22ms
03 71 e1 20ms
03 71 d8 18ms
03 71 cd 17ms
03 71 c1 46ms
03 71 b4 44ms
03 71 a6 42ms
03 71 97 40ms
03 71 87 39ms
03 71 75 37ms
03 71 62 34ms
03 71 4e 32ms Измерение угловых значений 3 этап
03 72 00 30ms
03 b6 57 44ms
03 fa ac 40ms
04 3f 01 29ms
04 83 56 49ms
04 c7 ab 25ms Ожидаемое количество секторов на виток 22 4 этап
05 0c 00 47ms
05 0b fe 46ms
05 0b fa 29ms
05 0b f5 26ms
05 0b ee 24ms
05 0b e6 22ms
05 0b dd 20ms
05 0b d2 19ms
05 0b c6 16ms
05 0b b9 14ms
05 0b aa 45ms
05 0b 9a 42ms
05 0b 89 41ms
05 0b 76 39ms
05 0b 62 37ms
05 0b 4c 35ms
05 0b 35 32ms ISOProtection (6 секторов с контрольными суммами + 2 произвольных сектора на целостность)
05 59 de (06) 79ms + произвольные 2 сектора
05 1a 64 53ms
03 33 3d 37ms Успешный запуск игры

Как видно по логам, присутствует только DPM+ISOprotection, торможения ещё нет, поскольку видимо находилось в то время ещё на стадии тестирования и не было внедрено, потому эта игра свободно эмулировалась с полного образа. С мини образа она естественно больше не могла бы идти, ибо тогда проверка прерывалась бы уже после прочтения 6 секторов с контрольными суммами ввиду отсутствия ожидаемых данных, не говоря уже о двух произвольных секторах.

Теперь тот же лог, но уже после обновления (ограничусь в логе последними секторами)
4 этап

05  0c 00      47ms 
05  0b fe      46ms 
05  0b fa      29ms 
05  0b f5      26ms 
05  0b ee      25ms 
05  0b e6      22ms 
05  0b dd      20ms 
05  0b d2      19ms 
05  0b c6      16ms 
05  0b b9      14ms 
05  0b aa      45ms 
05  0b 9a      42ms 
05  0b 89      41ms 
05  0b 76      39ms 
05  0b 62      37ms 
05  0b 4c      35ms 
05  0b 35      32ms 

ISOProtection
05  59 de (06) 79ms  + 2 произвольных сектора
03  00 27      55ms 
00  37 08      18ms 

Торможение (случайные "мусорные" сектора попарно)
04  24 b9      31ms 
04  21 ee     4.6sc  +
04  9a 69     7.3sc  ...
Как видно по логам, при торможении один сектор читается около 5-7 секунд, что для диска с исправными секторами не может быть корректным поведением, тем самым можно сразу определить, что в данном случае имеем эмуляцию, поскольку эмулятор пытался прочитать сектор из файла представляющего эмулируемый образ на время торможения защитой, таким образом не мог вовремя получить и вовремя подать запрошенные сектора для корректной эмуляции.

Теперь тот же лог, но с корректным обходом торможения

4 этап
05  0c 00      46ms 
05  0b fe      45ms 
05  0b fa      28ms 
05  0b f5      26ms 
05  0b ee      24ms 
05  0b e6      21ms 
05  0b dd      20ms 
05  0b d2      18ms 
05  0b c6      16ms 
05  0b b9      14ms 
05  0b aa      45ms 
05  0b 9a      41ms 
05  0b 89      40ms 
05  0b 76      39ms 
05  0b 62      36ms 
05  0b 4c      34ms 
05  0b 35      32ms 

ISOProtection
05  59 de (06) 78ms (6 секторов читаются за раз) +2 произвольных сектора проверяемые на целостность
00  63 bc      55ms 
03  ae 71      18ms

Торможение
04  47 f1      32ms 
04  4f 72      13ms   (при неправильной эмуляции тут было бы торможение) +
04  d2 aa     9.7ms 
04  df 93      13ms  +
03  87 3a      11ms 
03  87 9e      15ms  +
04  9d b8     3.9ms 
04  9d 1e      19ms  +
04  92 8a     7.8ms 
04  8f 9b      11ms  +
04  15 02      13ms 
04  1e 52      13ms  +
04  df d4     9.8ms 
04  ee 63      15ms  +
04  f3 99      13ms 
04  f0 16      13ms  +
04  6b 5d      15ms 
04  63 b2     7.7ms  +
03  b4 b5      13ms 
03  be 4f      13ms  +
04  f7 19      11ms 
04  f4 5d      15ms (+)
04  5e 0d     8.5ms 
03  92 fd      13ms  Успешный запуск


В дополнение приведу также лог с игры GTR, где есть полноценное торможение при использовании полного образа, единственное, что отсутствует, это проверка целостности, что приводит к успешному запуску с мини образов.


DPM 1 этап
03 1a a4 693us
03 1a 93 39ms
03 1a 82 15ms
03 1a 71 15ms
03 1a 60 15ms
03 1a 4f 32ms
03 1a 3e 32ms
03 1a 2d 32ms
03 1a 1c 32ms
03 1a 0b 32ms
03 19 fa 32ms
03 19 e9 32ms
03 19 d8 32ms
03 19 c7 32ms
03 19 b6 32ms
03 19 a5 32ms
03 19 94 32ms
03 19 83 32ms
03 19 72 32ms
03 19 61 32ms
03 19 50 32ms
03 19 3f 32ms
03 19 2e 32ms
03 19 1d 32ms
03 19 0c 32ms
03 18 fb 32ms
03 18 ea 32ms
03 18 d9 32ms
03 18 c8 32ms
03 18 b7 32ms
03 18 a6 32ms
03 18 95 32ms
03 18 84 32ms
03 18 73 32ms
03 18 62 32ms
03 18 51 32ms
03 18 40 32ms
03 18 2f 32ms
03 18 1e 32ms
03 18 0d 32ms
03 17 fc 32ms
03 17 eb 32ms
03 17 da 32ms
03 17 c9 32ms
03 17 b8 32ms
03 17 a7 32ms
03 17 96 32ms
03 17 85 32ms
03 17 74 32ms
03 17 63 32ms
03 17 52 32ms
03 17 41 32ms
03 17 30 32ms
03 17 1f 32ms
03 17 0e 32ms
03 16 fd 32ms
03 16 ec 32ms
03 16 db 32ms
03 16 ca 32ms
03 16 b9 32ms
03 16 a8 32ms
03 16 97 32ms
03 16 86 32ms
03 16 75 32ms
03 16 64 32ms
03 16 53 32ms
03 16 42 32ms
03 16 31 32ms
03 16 20 32ms
03 16 0f 32ms
03 15 fe 32ms
03 15 ed 32ms
03 15 dc 32ms
03 15 cb 32ms
03 15 ba 32ms
03 15 a9 32ms
03 15 98 32ms
03 15 87 32ms
03 15 76 32ms
03 15 65 32ms
03 15 54 32ms
03 15 43 32ms
03 15 32 32ms
03 15 21 32ms
03 15 10 32ms
03 14 ff 32ms
03 14 ee 32ms
03 14 dd 32ms
03 14 cc 32ms
03 14 bb 32ms
03 14 aa 32ms
03 14 99 32ms
03 14 88 32ms
03 14 77 32ms
03 14 66 32ms
03 14 55 32ms
03 14 44 32ms
03 14 33 32ms
03 14 22 32ms
03 14 11 32ms

2 этап (ожидаемый SPR 17 секторов на виток)
03 14 00 32ms
03 13 fe 32ms
03 13 fb 28ms
03 13 f7 26ms
03 13 f2 25ms
03 13 ec 22ms
03 13 e5 21ms
03 13 dd 19ms
03 13 d4 17ms
03 13 c9 15ms
03 13 bd 44ms
03 13 b0 41ms
03 13 a2 40ms
03 13 93 37ms
03 13 83 36ms
03 13 72 34ms
03 13 60 32ms

3 этап (измерение углов)
03 14 00 30ms
03 58 57 46ms
03 9c ac 39ms
03 e1 01 33ms
04 25 56 47ms
04 69 ab 34ms

4 этап (ожидаемый SPR 20 секторов на виток)
04 ae 00 52ms
04 ad fe 27ms
04 ad fb 29ms
04 ad f6 27ms
04 ad f0 24ms
04 ad e9 22ms
04 ad e0 20ms
04 ad d6 17ms
04 ad cb 16ms
04 ad bf 47ms
04 ad b2 45ms
04 ad a3 44ms
04 ad 93 40ms
04 ad 82 38ms
04 ad 6f 37ms
04 ad 5b 34ms
04 ad 46 32ms

Торможение 03 e5 ab 84ms 03 df 40 6.0sc +
03 ba 6c 5.1sc ....

Теперь с корректным обходом торможения.
4 этап

04  ae 00      51ms 
04  ad fe      58ms 
04  ad fb      28ms 
04  ad f6      27ms 
04  ad f0      23ms 
04  ad e9      22ms 
04  ad e0      20ms 
04  ad d6      17ms 
04  ad cb      16ms 
04  ad bf      46ms 
04  ad b2      44ms 
04  ad a3      43ms 
04  ad 93      40ms 
04  ad 82      38ms 
04  ad 6f      36ms 
04  ad 5b      33ms 
04  ad 46      31ms 

Торможение (сектора попарно)
04  a8 23      84ms 
04  99 16      16ms  (при неправильной эмуляции тут было бы торможение) +
04  76 3a      47ms 
04  6c 4b      30ms +
03  d5 26      38ms 
03  d5 91      33ms +
03  6d be      25ms 
03  7b d0      51ms +
03  3a c9      28ms 
03  38 53      24ms +
04  49 96      18ms 
04  3a 4d      18ms +
04  56 6b      29ms 
04  61 a7      23ms  +
03  79 21      27ms 
03  75 df      34ms  +
03  5f 15      21ms 
03  58 33      33ms  +
04  25 81      27ms 
04  33 24      27ms  +
04  27 d6      29ms 
04  21 81      29ms  (+)
03  a8 b1      24ms 
04  94 56      28ms Успешный запуск


В заключение приведу лог запуска игры Splinter Cell: Chaos Theory с полного DVD образа.

1 этап
0c 6a c0 639us
0c 6a 90 29ms
0c 6a 60 31ms
0c 6a 30 15ms
0c 6a 00 15ms
0c 69 d0 32ms
0c 69 a0 32ms
0c 69 70 32ms
0c 69 40 32ms
0c 69 10 31ms
0c 68 e0 32ms
0c 68 b0 32ms
0c 68 80 32ms
0c 68 50 32ms
0c 68 20 32ms
0c 67 f0 32ms
0c 67 c0 31ms
0c 67 90 32ms
0c 67 60 32ms
0c 67 30 31ms
0c 67 00 32ms
0c 66 d0 32ms
0c 66 a0 32ms
0c 66 70 31ms
0c 66 40 32ms
0c 66 10 32ms
0c 65 e0 31ms
0c 65 b0 32ms
0c 65 80 32ms
0c 65 50 32ms
0c 65 20 31ms
0c 64 f0 32ms
0c 64 c0 32ms
0c 64 90 31ms
0c 64 60 32ms
0c 64 30 32ms
0c 64 00 32ms
0c 63 d0 32ms
0c 63 a0 32ms
0c 63 70 32ms
0c 63 40 32ms
0c 63 10 31ms
0c 62 e0 32ms
0c 62 b0 31ms
0c 62 80 32ms
0c 62 50 32ms
0c 62 20 32ms
0c 61 f0 31ms
0c 61 c0 31ms
0c 61 90 32ms
0c 61 60 31ms
0c 61 30 32ms
0c 61 00 32ms
0c 60 d0 32ms
0c 60 a0 31ms
0c 60 70 32ms
0c 60 40 32ms
0c 60 10 31ms
0c 5f e0 32ms
0c 5f b0 31ms
0c 5f 80 32ms
0c 5f 50 31ms
0c 5f 20 32ms
0c 5e f0 32ms
0c 5e c0 31ms
0c 5e 90 31ms
0c 5e 60 32ms
0c 5e 30 31ms
0c 5e 00 32ms
0c 5d d0 32ms
0c 5d a0 32ms
0c 5d 70 31ms
0c 5d 40 32ms
0c 5d 10 32ms
0c 5c e0 31ms
0c 5c b0 32ms
0c 5c 80 32ms
0c 5c 50 31ms
0c 5c 20 32ms
0c 5b f0 32ms
0c 5b c0 32ms
0c 5b 90 31ms
0c 5b 60 32ms
0c 5b 30 32ms
0c 5b 00 31ms
0c 5a d0 32ms
0c 5a a0 32ms
0c 5a 70 32ms
0c 5a 40 31ms
0c 5a 10 32ms
0c 59 e0 31ms
0c 59 b0 32ms
0c 59 80 32ms
0c 59 50 64ms
0c 59 20 31ms
0c 58 f0 32ms
0c 58 c0 32ms
0c 58 90 31ms
0c 58 60 32ms
0c 58 30 32ms

2 этап (SPR 48)
0c 58 00 31ms
0c 57 f0 32ms
0c 57 e0 21ms
0c 57 d0 21ms
0c 57 c0 21ms
0c 57 b0 21ms
0c 57 90 21ms
0c 57 70 42ms
0c 57 50 42ms
0c 57 30 42ms
0c 57 10 42ms
0c 56 e0 42ms
0c 56 b0 32ms
0c 56 80 32ms
0c 56 50 32ms
0c 56 20 31ms
0c 55 e0 32ms

3 этап (измерение углов)
0c 58 00 21ms
0e dc 00 42ms
11 60 00 45ms
13 e4 00 30ms
16 68 00 38ms
18 ec 00 26ms

4 этап (SPR 64)
1b 70 00 42ms
1b 6f f0 47ms
1b 6f e0 24ms
1b 6f d0 24ms
1b 6f b0 23ms
1b 6f 90 16ms
1b 6f 70 15ms
1b 6f 50 16ms
1b 6f 20 15ms
1b 6e f0 40ms
1b 6e c0 39ms
1b 6e 90 40ms
1b 6e 50 39ms
1b 6e 10 32ms
1b 6d d0 32ms
1b 6d 90 31ms
1b 6d 40 31ms ISOProtection 21 30 6d (06) 70ms (6 секторов читаются за раз) +2 произвольных сектора проверяемые на целостность
1c 9f b3 35ms
09 68 4e 17ms Торможение (сектора попарно)
10 88 e4 24ms
10 91 70 29ms (при неправильной эмуляции тут было бы торможение) +
0d 0e 68 29ms
0d 11 45 35ms +
0e 30 31 31ms
0e 26 96 31ms +
15 69 31 31ms
15 6a d6 31ms +
18 c1 6d 27ms
18 c0 5b 25ms +
14 68 7c 31ms
14 76 36 32ms +
12 60 05 27ms
12 5e 3d 27ms +
17 7c 04 29ms
17 6e 5b 35ms +
18 f1 07 31ms
18 f4 39 24ms +
11 a0 f2 29ms
11 92 98 31ms +
10 06 7c 31ms
10 02 17 33ms (+)
15 cc c5 30ms
1a c9 9a 37ms Успешный запуск

Из этого можно почерпнуть предположение, когда старфорс проверяет содержание, он не тормозит файловую систему, видимо тому есть серьёзные причины, а когда тормозит, это уже не имеет ничего общего с проверкой содержания. Это конечно только предположение и не обязательно сходится с реальным положением вещей. Но это уже и не столь важно, эмуляция с обходом торможения с полным чтением из образа возможна и без этого.
PS: лишний раз стоит напомнить, что старые эмуляторы не способны обходить торможение.

(Статья размещена 02.07.2005)

1. Проверка наличия ATAPI CD/DVD устройств с технической стороны.

Начну с того, что старфорс различает два уровня доступа к CD/DVD приводам.
В первую чередь - это прямой доступ через I/O порты IDE каналов совместимых с IDE ATA интерфейсом и второе - доступ через вендорские драйверы контроллеров не являющиеся совместимыми для чтения через общие команды IDE ATA интефейса.
Как собственно это делается?! Для начала старфорс сканирует конфигурационное пространство PCI устройств на наличие всех доступных в компьютере IDE контроллеров, для этого ищутся PCI устройства с IDE субклассом 01 01 **, при этом различаются контроллеры с доступом в совместимом режиме и доступом к контроллеру в родном режиме.
Для коммуникации с ATAPI CD/DVD приводами в совместимом режиме используются следующие I/O порты.

  • Primary channel: 01F0-01F7 + 3F6
  • Secondary channel: 0170-0177 + 376
    Для родного режима старфорс смотрит на побитовую карту последнего байта в IDE субклассе 01 01 (??)
    Пример: * * * * * 0 * 0
    что означает, оба канала контроллера находятся в совместимом режиме,
    либо: * * * * * 1 * 1
    что означало бы, оба канала контроллера работают в родном режиме, при этом возможны вариации, когда один канал работает в родном режиме, другой канал в совместимом. При этом база используемых I/O портов в родном режиме берётся из конфигурационного PCI пространства самого IDE контроллера по смещению 10h-17h для Primary и 18h-1Fh для Secondary.
    Идём дальше, нормальным образом всеми запросами к любым устройствам на IDE контроллере руководит системный, для PIO режима вендоронезависимый драйвер, предоставляемый операционной системой Windows. Но поскольку читать данные посторонними, в данном случае старфоросом, по прямому доступу безболезненно для операционной системы нельзя, то во избежание эксцессов старфорс на время проверки диска ставит в очередь I/O запросы операционной системы к IDE контроллеру и тем самым беспрепятственно осуществляет прямое чтение и коммуникацию с ATAPI CD/DVD приводами. При этом все портовые I/O чтения происходят в самом медленном режиме передачи данных, в так называемом PIO режиме. Данное различие уровней доступа к приводам, прямое, либо через вендорскиe драйверы, используется для системы приоритетов. То есть в компьютере, где находятся приводы с прямым доступом и непрямым одновременно, приоритет получает тот привод, о котором защита считает, что к нему можно обращаться напрямую. При таком раскладе защита будет всегда требовать от вас, вставлять диск именно в тот привод, где старфорс может осуществить прямой доступ. Это можно сочесть за чудо, что при таком ущемлении прав конечного пользователя в праве личного выбора до сих пор не было подано ни одного иска к издателям, которые даже не предупреждают пользователя о тех или иных недостатках и ограничениях игры защищённой старфорсом, а ведь закон в данном случае на стороне потребителя. Данная проверка на наличие ATAPI CD/DVD устройств с прямым IDE доступом по сути не является защитной функцией, ибо направлена на то, чтобы усложнить возможность эмуляции. Дело в том, что эмуляторы не умеют эмулировать приводы для прямого IDE ATA доступа, тем самым автоматически являются эмуляторами приводов, к которым доступ можно осуществить исключительно посредством вендорских драйверов, а следовательно при таком положении вещей такие приводы получают более низкий приоритет, если одновременно в системе найден привод, к которому защита может обратиться напрямую. Всё это и объясняет причину, по которой старфорс при эмуляции зачастую просит вставить диск в другой привод, ибо видит тот-другой привод, к которому старфорс мог бы получить прямой доступ.


    2. Меры обхода физического опознания ATAPI CD/DVD устройств, а также их плюсы и минусы.

    Как стало уже ясно, чтобы заставить защиту обратиться к приводам без возможности прямого доступа, необходимо физически, на аппаратном уровне, выключить ATAPI CD/DVD приводы. Существует множество методов аппаратного выключения, такое как механическое выключение 40/80 pin кабеля из разъёма привода, либо его отключение из разъёма питания, хотя последнее накладывает в некоторых случаях ограничение, поскольку доступ к приводу с выключенным питанием будучи подсоединённым к шине IDE канала, требует выключения I/O декодирования того канала, иначе любая попытка чтения к портам такого контроллера, на котором висит обесточенный привод, зачастую приводит к аппаратному зависанию всего комоьютера. Но всё это близко рассматриваться не будет, поскольку в данном контексте меня интересует выключение без механического вмешательства.

    Способ номер 1: вендоронезависимое выключение всего контроллера средствами Windows OS путём деактивации всего контроллера в диспетчере устройств. Это один из самых эффективных и безболезненных, для устройств, способ физического выключения всех приводов находящихся на IDE контроллере, который используется операционной системой Windows для деактивации контроллера и освобождения его ранее используемых ресурсов для остальных устройств. В данном случае этот способ является именно вендоронезависимым, поскольку запрещает декодирование обращений от устройства, тем самым запрет чтения и записи по занимаемым I/O портам по PCI спецификации.
    Минусы данного способа заключаются в том, что выключаются все возможные 4 устройства сидящих на IDE контроллере. Хотя в наше время практически не выпускают материнских плат, где бы не было как минимум двух контроллеров позволяющих подключать жёсткие диски. А ещё лучше, последние модели чипсетов имеют серийно встроенными несколько IDE контроллеров. Таким образом можно расположить ATAPI CD/DVD приводы на одном IDE контроллере, а жёсткие диски перевесить на дополнительный контроллер с соответствующим интерфейсом. Это самый рекомендуемый способ выключения, ибо минимален риск аппаратного сбоя.

    Способ номер 2: вышерассмотренный способ выключает I/O декодирование для занятых ресурсов для всего контроллера, но существуют способы выключения I/O декодирования поканально. Плюсы заключаются в том, что выключаются не все 4 привода, а только два, к тому же данный способ выключения I/O декодирования поканально зачастую используется самим BIOSом, что правда также накладывает ряд ограничений в ряде случаев, поскольку BIOS применяет иногда несколько способов выключения канала в совокупности. Минусы данного способа выключения и включения весьма обширны. Во первых нельзя выключить только одно устройство на канале, во вторых данное выключение зависит от вендора, производителя чипсета, ибо используемые регистры от вендора к вендору, и даже порой в пределах вендора от поколения к поколению, каждый раз могут быть разные. Тем самым возникает необходимость регулярно следить за выходом новых чипсетов во избежание конфликтов с будущей аппаратной архитектурой. К тому же включение каналов пo I/O декодированию, когда те были выключены в BIOSe с последующей попыткой чтения или записи может привести к банальному аппаратному сбою, ибо в BIOSе очень часто реализованы сразу несколько способов выключения в совокупности, как было уже сказано выше, но об этом речь пойдёт ниже..

    Способ номер 3: помимо вышеуказанных способов с запретом I/O, существует также поканальное выключение питания у шины одного из каналов средствами APM, не путать с поверменеджементом самого IDE контроллерa как общего PCI устройства. Данный способ применяется реже в персональных компьютерах, но чаще в ноутбуках, где максимально используется управление питанием для экономии энергии, когда выключается канал в BIOSe. Однако такое выключение питания зачастую вынуждает использовать запрет I/O декодирования на канале в совокупности, ибо даже случайная попытка чтения/записи к обесточенному каналу без запрета I/O может вызвать аппаратный сбой. К тому же, данный метод, если использовать для выключения канала, лучше не использовать для включения до следующего рестарта. О некоторых нюансах упоминается также на сайте майкрософт: HotSwap
    The operating system risks a hardware crash whenever it enables a legacy IDE controller channel that was left powered-off by the BIOS.
    Ещё один минус, мало того, что это вендорозависимо, но также не все вендоры предоставляют возможность выключать питание у канала, пока достоверно известно только для некоторых вендоров. Помимо этого существует ещё множество различных способов выключения, например чипсетная деактивация сигналов на пин подключении коннектера канала. Опять же крайне вендорозависимо, поддерживается не всеми чипсетами даже в пределах вендора, предусмотрено для банального и безболезненного хотсваппинга IDE устройств.
    И все эти возможности чипсeтов далеко ещё не предел! На некоторых чипсетах реализовано до пяти возможностей выключения каналов/IDE устройств средствами самого чипсета. К сожалению многое упирается в безызвестность различных регистров ввиду отсутствия их описания. На nForce вообще в природе пока не видел доступных даташитов, тем не менее даже там можно путём перебора кое что найти. Если кому попадались даташиты на nForce, то незамедлительно поделитесь :)

    Способ номер 4: существует также деактивация устройств по отдельности с использованием возможностей самого привода. Плюсы такого способа на лицо, не важно, если на канале находится другое устройство, оно остаётся нетронутым. Правда и тут радоваться можно только с опаской, если привод изначально не поддерживает функций поверменеджемента, то выключение такого устройства и его последующее включение может привести к банальной поломке привода, прецеденты уже были, поскольку внутренне электроника не расчитывается на подобное выключение и включение, так как применимо к чистым ATA устройствам, таким как жёсткие диски, для которых и существует этот стандартный набор команд.

    Способ номер 5: вышерассмотренные методы применительны к выключению приводов, но помимо такого обхода существует куда более лучший способ обойтись без выключения приводов ничем при этом не рискуя. В данном случае как альтернатива встроенному IDE контроллеру рассматривается дополнительный RAID контроллер. Такие контроллеры очень дешёвы, начиная с 15-20 US$ вы получаете контроллер с поддержкой райд функций, а также с поддержкой ATAPI приводов, с возможностью подключить максимально до 4 устройств. Особенно рекомендуются контроллеры на базе Silicon Image, будь то IDE RAID, либо SATA RAID. Однако следует помнить, купив такой контроллер, надо обязательно перевесить на него все имеющиеся CD/DVD приводы, только этим вы обеспечите возможность одновременной эмуляции без выключения приводов. Также эти контроллеры позволяют воспользоваться RMPS эмуляцией даже в отношении защиты старфорс, когда диск читается не напрямую, что делает эффективной эмуляцию с физической копии диска. Остаётся лишь настоятельно порекомендовать приобрести такой дополнительный контроллер, особенно ввиду его дешевизны. Часто даже не придётся приобретать его отдельно, многие встроенные в материнскую плату дополнительные RAID контроллеры уже поддерживают ATAPI устройства. Ещё один огромный плюс заключается в том, что вы повышаете свои шансы запустить копию без всякой эмуляции на пишущих приводах, поскольку старфорс при прямых обращениях к приводам отпрашивает ATIP диска. У печатных оригиналов нет ATIP, за то он есть на всех записываемых дисках, поскольку именно по нему ориентируется пишущий привод, когда пишет на диск какие-либо данные. Потому при чтении копии на пишущем приводе нет даже необходимости проверять физику диска, защите достаточно проверить, являлся ли диск записываемым или нет.

    PS: для информации, в StarForce Nightmare для выключения реализованы три способа, из выше указанных к примеру 1, 2 и 4.

  • (Статья была размещена 07.06.2004)

    Наверное многих интересует, каким образом мне удалось перехватить запрашиваемые сектора. По началу мучил вопрос, почему эмуляторы работают только тогда, когда выключишь IDE приводы. Почему при нахождении в системе SCSI приводов на SCSI шине я мог свободно эмулировать защиту даже через RMPS метку записанную Алкоголем, почему при нахождении тех же ATAPI приводов на ATA шине я мог сделать тоже самое без проблем, но как только мои ATAPI приводы находились на IDE шине, начинался бардак. Я не мог в этой ситуации перехватить запрашиваемые сектора даже на уровне IOS и вместо перехваченных MMC команд я получал только мусор, каким образом это было возможно. Всем известно, что StarForce использует свои ATAPI драйверы, чтобы получить доступ к приводам, напрямую отпрашивая порты. Помимо этого прояснилось ещё кое что, оказалось, что StarForce при нахождении АТАПИ приводов на IDE шине вводит дополнительные контрмеры для предотвращения эмуляции. Не побоюсь этого слова, драйверы StarForce наглейшим образом видоизменяют, модифицируют и патчат ядро операционной системы по своему образу и подобию. Как вывод всего этого, на момент проверки StarForce отбирает все привилегии себе оставляя остальные приложения позади. Но надеюсь команда StarForce отдаёт себе отчёт, что любое изменение чужого кода не только противозаконное и неправомерное нарушение карающееся огромными штрафами со стороны исца, но и модифицируя ядро программы защита StarForce нарушает целостность всей операционной системы, что может повлечь за собой нестабильную работу остальных драйверов установленных в системе и как правило именно это можно наблюдать на некоторых системах, когда из-за конфликтов со StarForce драйверами не работают USB устройства или же работают крайне нестабильно. Я не хочу иметь защиту на своей игре, которая форменным образом насилует мою операционную систему приводя её постоянно в нестабильное состояние. Помимо всего прочего команда StarForce пошла ещё дальше и уже с версии 3.3.33* осуществляется блокировка файловой системы WINDOWS, тем самым блокируется беспрерывный доступ к файлам, что крайне чревато утерей драгоценных данных, куда уже хуже. Пока лишь есть один способ избежать этой блокировки и он возможен только на WINDOWS 9Х системах, поскольку можно заставить операционную систему обращаться к файлам через файловую систему DOS, но опять же такой подход замедляет обращение к жёстким дискам и также может привести систему в нестабильное состояние, поскольку данный доступ предусмотрен лишь в крайних случаях, когда нарушен общий доступ к файлам обычными путями. После всех этих нюансов у меня сложилось довольно негативное отношение к тому, что позволяет себе команда StarForce совершая такие действия, хотя я был о них более высокого мнения, потому что хотя StarForce не первая защита проверяющая диск на физику, до этого была защита CD-Cops, но они единственные, кто довёл эту защиту до логического завершения. Кстати есть одна фраза на английской версии сайта Star-Force.com гласящая следующее:
    "Do StarForce Professional 3.0-protected applications work under Windows NT and Windows 2003 Server?"
    "StarForce Professional 3.0 protected applications operate under Win95, Win98, WinME, Win NT 4.0, Win2000, WinXP, Win2003 Server platforms and with all available service-packs for them. As soon as Microsoft releases a new OS or service pack - we already have modified our software to support them. If you have a protected product - you should just create a patch for your customers."
    Из всего этого можно предположить, что если у вас не работает защита с остальными операционными системами после установки сервис паков, то StarForce уже заранее решает эту проблему в следующих драйверах. Это я к тому, что я не припоминаю случая, чтобы какая нибудь компания выпускала модификации своих драйверов для поддержки стабильной работы после установления сервис пака. Но зная факт того, что StarForce модифицирует ядро операционки во время проверки, становится ясно, что без этого попросту не обойтись. Поэтому драйверы StarForce очень тщательно выведывают вашу систему на наличие сервис паков и версии операционной системы, видимо боятся ошибиться ненароком пропатчить что-то лишнее.

    Ещё одно предположение, которое постепенно обретает почву правдивости, это то что уже давно компания Link Data Security выпускающая свой продукт CD-Cops на одной из своих страниц разместила сообщение о том, что появился клон их защиты ввиде StarForce.
    "*"In 2001 we received an email from a seemingly young poor programmer in Moscow that offered us help:
    "I am programmer from Russia/Moscow. My expirience is about 5 years of programming/reverse engeneering. I know C/C++/Asm. I can work in MSVC/Borland Builder(MFC/OWL)....I reverse your protection, and i know how to improve it to very cool level against cracking. I can write for yours company many good sources... "And, at the end, i hope you will understand me, as i want to work for yours company in Denmark." Probably a smart guy, but he overlooked the Message-ID and Content-ID having the domaine name <...@starforce>. These fields are hidden meta tags in the email used for identification purposes."*"
    Это сообщение находится там довольно давно, но я полагал, что это всего лишь маркетинговый ход направленный против конкуренции. Однако учитывая факт того, что защита StarForce повторяет в своих ранних версиях защиту Cd-Cops и учитывая тот факт, что команда StarForce не побрезговала реверсировать ядро операционной системы Microsoft, а иначе попросту нельзя было бы осуществить модифицирование ядра, то предполагаемая кража кода у фирмы CD-Cops вполне могла иметь место. Ввиду всех этих негативных моментов фразы о ПИРАТСТВЕ из уст команды StarForce звучат очень тривиально и саркастически.

    Правильное снятие топологии и образа диска с помощью ALCOHOL!

    Считывание ключa StarForce KEYLESS программой ISO Commander!

    Hosted by uCoz