Крис Касперски - Восстановление данных. Практическое руководство
В принципе, выход за границы файла ничем не чреват. Файловые системы лазерных дисков очень просты. Лазерные диски не поддерживают фрагментацию файлов, а потому и не нуждаются в FAT. Все файлы занимают непрерывный ряд секторов, и с каждым файлом связано только две важнейшие характеристики: номер первого сектора файла, заданный в формате LBA (Logical block address), и его длина, заданная в байтах. Остальные атрибуты, вроде имени файла и времени его создания — не в счет, мы сейчас говорим исключительно о секторах.
Увеличение длины файла приводит к "захвату" того или иного количества примыкающих к его хвосту секторов, и при условии, что номер последнего сектора, принадлежащего файлу, не превышает номера последнего сектора диска, копирование файла, в принципе, протекает нормально. Я не случайно заметил, что "в принципе нормально", а не просто "нормально", так как в копируемый файл будут включены все файлы, встретившиеся на его пути. Если же в процессе своего копирования файл "выскакивает" за конец диска, то привод CD-ROM сигнализирует об ошибке и прекращает чтение. Штатные средства копирования, входящие в состав операционной системы, равно как и большинство оболочек сторонних производителей, автоматически удаляют "огрызок" недокопированного файла с диска, и в результате пользователь остается ни с чем.
Утилита IS09660.DIR.EXE выгодно отличается тем, что позволяет копировать не только весь файл целиком, но и любую его часть! Но как мы узнаем, сколько именно байт следует скопировать? Как определим, где идут полезные данные, а где начинается "послехвостовой" мусор (over-end garbage)? Будем исходить из того, что по Стандарту файлы на диске располагаются последовательно, т. е. за последним сектором одного файла, непосредственно следует стартовый сектор следующего. Поскольку стартовые сектора всех файлов нам известны, определение истинных длин всех файлов за исключением последнего, не составит никакого труда! Так как длина одного сектора лазерного диска составляет 2048 байт, истинный размер всякого файла равен: (стартовый адрес следующего файла — стартовый адрес самого этого файла) * 2048. Все просто, не правда ли?
С помощью утилиты 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 защита работает напрямую, и программный перехват уже не спасает.