С помощью утилиты IS09660.DIR.EXE мне и моим друзьям удалось скопировать большое количество дисков с MP3, обладающих защитой данного типа.
Звездная сила обращается в пыль
На нас надвигается тьма! Защита Star-Force наступает по всем направлениям, и новые игры уже не копируются. Защита выглядит неприступной, как скала, и за ней уже закрепилась слава несокрушимой. На самом деле ситуация не так мрачна. Кроме столбовой дороги есть и обходные пути, никем не охраняемые. Воспользуемся одним из них.
Что такое Star-Force
Star-Force (рис. 10.3) — это семейство защит от копирования, привязывающихся к физической структуре спиральной дорожки. Оно оснащено термоядерным ракетным комплексом противохакерских средств типа "земля — пользователь". Вместо простейшей проверки по схеме "свой — чужой", которую можно запросто нейтрализовать заменой одной инструкции
jmp
, Star-Force преобразует топологические характеристики диска в число, используемое для расшифровки основного тела программы, причем специальные защитные компоненты следят за тем, чтобы после расшифровки никто не снял дамп.
Рис. 10.3. Логотип Star-Force, по которому эту защиту легко отличить от любой другой
Часть защитного кода сосредоточенна в многомегабайтной библиотеке protect.dll, часть — в драйверах, а часть — скомпилирована в p-код, выполняемый на собственном интерпретаторе. Помимо этого, защита реализует множество антиотладочных приемов, препятствующих как изучению защитного кода, так и эмуляции оригинального диска.
Защита не стоит на месте, а напротив, активно совершенствуется. С каждой новой версией разработчики все туже и туже "затягивают гайки", да так, что резьба уже начинает сдавать. Последние версии "Звездной Силы" очень глубоко вклиниваются в Windows и даже модифицируют ее ядро, в результате чего система начинает работать нестабильно. У одних пропадают данные, у других система регулярно демонстрирует BSOD, у третьих после установки очередного обновления от Microsoft лицензионные игры внезапно отказывают в работе, требуя установки обновления от Star-Force (http://www.star-force.ru/support/sfdrvup.zip), а у кого-то защищенные диски вообще не опознаются. Разработчики, естественно, списывают все это на низкую квалификацию пользователей, которые не ведают, что творят. Хотя мое мнение и не обязательно однозначно правильно, но мне есть, что на это возразить. Никто не спорит, что Windows может упасть и сама. Тут посторонней помощи не надо. Но вот то, что вытворяет команда разработчиков Star-Force — это не просто "аморально" или "нехорошо". Ведь кроме закона о защите авторских прав, есть и закон о защите прав потребителя! Вмешиваться в работу операционной системы на компьютере пользователя, да так, чтобы защитная программа портила пользовательские данные — незаконно! Более того, требовать, чтобы при наличии привода IDE защищенный диск запускался именно с него (a Star-Force это требует) — незаконно с любой точки зрения. Если программа умышленно отказывается работать на определенных конфигурациях, и легальные пользователи никак не проинформированы об этом факте, то перед нами, как минимум, грубая конструктивная недоработка, а как максимум — злостная закладка.
В западном мире защиты от копирования вообще мало популярны. Обычно используется серийный номер или прочие надежно работающие, хотя и легко ломаемые алгоритмы. А все потому, что лучше терпеть убытки от пиратства, чем держать специальную службу поддержки, отвечающую на звонки разгневанных пользователей, требующих или немедленно сделать что-нибудь, или вернуть деньги. И не важно, что это — аппаратная несовместимость, дефект защиты или ошибка покупателя. Клиент всегда прав! Поэтому серьезные продукты "Звездной Силой" защищать никогда не будут и никуда дальше игр она не уйдет.
Как это работает
Привязка к диску основана на измерении угла между секторами. Похожая техника использовалась еще во времена 8-битных компьютеров и дискет. Аналогичным образом работают CD-Cops, SecureROM и многие другие защитные механизмы, так что назвать идею Star-Force "революционной" очень трудно. Но это не помешало разработчикам запатентовать ее, или, по крайней мере, объявить, что она запатентована. Впрочем, не будем углубляться в юридические тонкости, а лучше перейдем к техническим деталям.
Спиральная дорожка лазерных дисков очень похожа на грампластинку, только начинается не снаружи, а изнутри, и разворачивается от центра к краю. Лазерная головка, удерживаемая в магнитном поле (примерно так же, как удерживается звуковая катушка в акустических системах), движется на салазках поперек спиральной дорожки. Сама дорожка состоит из секторов с данными и каналов подкода. Номера секторов находятся как в заголовках самих секторов, так и в каналах подкода, "размазанных" вдоль спиральной дорожки. Для грубой наводки на требуемый сектор используются салазки и каналы подкода, а для точной — отклонение в магнитном поле и секторные заголовки.
Просто взять и измерить структуру спиральной дорожки нельзя, но можно использовать следующий подход (рис. 10.4). Допустим, головка считывает сектор X, а следом за ним сектор Y. Если угол XOY, образованный центром (О) диска и секторами X и Y, составляет примерно 15 градусов, а сами сектора расположены в соседних витках спиральной дорожки, то приводу будет достаточно всего лишь немного отклонить головку и через мгновение сектор Y сразу же окажется у оптической головки. Если же угол составляет менее 15 градусов, то за время перемещения головки сектор Y уже "уплывет", и приводу придется ждать целый оборот лазерного диска.
Рис. 10.4. Когда угол между секторами X и Y составляет -15 градусов, при переходе на соседний виток сектор Y сразу же "подлетает" к оптической головке (рисунок слева), при меньшем значении угла сектор Y успевает "уплыть" и головка вынуждена ждать целый виток (рисунок справа)
Таким образом, замеряя время чтения различных пар секторов, мы можем приблизительно определить их взаимное расположение на спиральной дорожке. У каждой партии дисков оно будет своим (ведь плотность секторов на 1 мм и крутизна спирали неодинакова, и варьируется от партии к партии). Чтобы побороть упреждающее считывание, которым "страдают" многие приводы, защита должна читать сектора в порядке убывания их номеров. Кроме того, защита должна измерять скорость вращения привода, чтобы определить постоянство временных замеров и скорректировать формулу для вычисления угла, ведь, как легко показать, чем быстрее вращается диск, тем скорее "уплывает" сектор.
Именно так Star-Force и поступает. Ниже приведен протокол работы защиты, перехваченный программой BusHound (рис. 10.5). При этом использовался накопитель SCSI, поскольку с IDE защита работает напрямую, и программный перехват уже не спасает.
Рис. 10.5. BusHound за работой
Сначала защита выполняет профилировку поверхности, определяя время одного оборота и оценивая величину разброса, на основании которого будет рассчитываться допуск на отклонение ключевых характеристик. Результаты профилировки спиральной дорожки представлены в листинге 10.4. Обратите внимание на то, что все номера секторов представлены в шестнадцатеричном формате.
Листинг 10.4. Профилировка спиральной дорожки (все номера секторов представлены в шестнадцатеричном формате)
049634 292ms
04961f 192ms